首页 > 解决方案 > 在 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

有谁知道发生了什么?非常感激

标签: rrecursion

解决方案


您正在更新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

推荐阅读