r - 在 R 中实现递归函数的问题 - Fisher 评分
问题描述
我正在尝试对模拟的 iid Poisson 数据实施 Fisher Scoring,但出现堆栈溢出错误。我从函数中做了一些简单的打印,发现猜测值在第一次迭代后没有改变。
fs_pois <- function(data, true, guess) {
if (abs(guess-true) < 0.01) return(guess)
else return(fs_pois(data, true, guess + (mean(data)*exp(-guess))-1))
}
data <- rpois(100,lambda=0.34)
fs_pois(data, 0.34, 0.36)
生产
Error: C stack usage 7970416 is too close to the limit
有谁知道发生了什么?非常感激
解决方案
您正在更新guess
,(mean(data)*exp(-guess))-1
什么不使用true
您在abs(guess-true)
决定退出时使用的内容。在您的情况下,在 7970416 步之后未达到退出条件,并且典型的部件(mean(data)*exp(-guess))-1
正在到达0
. 也许你应该使用(mean(data)*exp(-guess))-1
退出决定。
fs_pois <- function(data, guess) {
d <- (mean(data)*exp(-guess))-1
if (abs(d) < 0.01) return(guess)
fs_pois(data, guess + d)
}
set.seed(7)
data <- rpois(100,lambda=0.34)
fs_pois(data, 0.36)
#[1] -0.9326207
推荐阅读
- reactjs - 不确定如何将数据从前端应用程序传递到后端
- dart - Dart 是否有任何理由不允许以下 stmts?
- onion-architecture - Onion 架构用于创建、更新、删除的不同实体
- python - Python:如何从列表中的字典中提取特定值
- javascript - 当我尝试将文件从 react 发送到 django 时,我收到此错误。(TypeError: __init__() 得到了一个意外的关键字参数 'file')
- ios - SwiftUI - 如何将多行文本对齐到左侧?
- python - 为solidity/python安装brownie的问题
- rust - 在 Rust 中执行此操作的正确方法是什么?
- javascript - 如何在不影响其他用户的个人资料的情况下将数据添加到用户的个人资料 React
- r - Shiny App Dashboard - 删除导入文件的“清除”按钮