"iteration limit reached" 在 lme4 GLMM 中 - 这是什么意思?

"iteration limit reached" in lme4 GLMM - what does it mean?

我构建了几个 glmer.nb 具有不同随机截距组合的模型,对于其中一个模型(嵌套随机截距,具有最低的 AICc),我始终得到:“达到迭代限制”,没有通常的“警告信息: 在 theta.ml(Y, mu, weights = object@resp$weights, limit = limit, :..."

这是我所知道的:

  1. 这是一个警告(从颜色上看)但没有这样标记
  2. 您也可以使用 GLM 和 LMER 发出该警告

这是我不知道的:

  1. 是否表示模型无效?
  2. 是什么导致了这个问题?
  3. 我该怎么做才能解决这个问题?

这是我搜索的内容:

  1. https://stats.stackexchange.com/questions/67287/very-large-theta-values-using-glm-nb-in-r-alternative-approaches(没有解释原因和方式)
  2. GLMM 常见问题解答:未提及
  3. 我不是唯一经常 运行 陷入那个或类似问题的人:Using glmer.nb(), the error message:(maxstephalfit) PIRLS step-halvings failed to reduce deviance in pwrssUpdate is returned https://stats.stackexchange.com/questions/40647/lme-error-iteration-limit-reached/40664

以下是我们将不胜感激的内容:

信息更丰富的警告消息:模型收敛了吗?是什么原因造成的?可以做些什么来修复它?我们可以阅读更多相关信息吗(link 到 GLMM FAQ - brms-style)?

这是一个一般性问题。我没有提供可重现的代码,因为可以概括的答案将是最有用的。

library(lme4)
dd <- data.frame(f = factor(rep(1:20, each = 20)))
dd$y <- simulate(~ 1 + (1|f), family = "poisson",
                 newdata = dd,
                 newparam = list(beta = 1, theta = 1),
                 seed = 101)[[1]]

m1 <- glmer.nb(y ~ 1 + (1|f), data = dd)

Warning message: In theta.ml(Y, mu, weights = object@resp$weights, limit = limit, : iteration limit reached

有点不好说,但是这个警告出现在MASS::theta.ml(),它被调用以获得对色散参数的初始估计。 (如果您设置 options(error = recover, warn = 2),警告将转换为错误,错误会将您转储到调试器中,您可以在调试器中看到在 warning/error 发生时处于活动状态的调用序列)。

这通常发生在数据(具体来说,数据的条件分布)实际上是等分散(方差==均值)时或 underdispersed(即方差 < 均值),这是负二项分布无法实现的。如果你 运行 getME(m1, "glmer.nb.theta") 你通常会得到一个非常大的值(在本例中为 62376),这表明优化器在尝试将色散参数发送到无穷大时放弃的位置。

您可以:

  • 忽略警告(负二项式不是一个好的选择,但该模型无论如何都有效地收敛到泊松解)。
  • 恢复到泊松模型(您 link 的 CV 问题确实说“泊松模型可能是更好的选择”)
  • 与过度分散相比,人们通常更不担心分散不足(因为分散不足会使泊松模型的结果变得保守),但是如果您想考虑分散不足,您可以使用允许分散不足和过度分散的条件分布来拟合您的模型(在 lme4 内无法直接实现,但请参阅 here

PS lme 中的 nlminb,您 link 编辑的答案之一中的“未收敛达到迭代限制”警告是一个完全不同的问题(除了这两种情况都涉及 一些 形式的迭代解决方案,并设置了最大迭代次数...)