r - 在 optwrap 中使用 lmer 的模糊警告 lme4

标签 r lme4

使用lmer我收到以下警告:

Warning messages:
1: In optwrap(optimizer, devfun, x@theta, lower = x@lower) :
  convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q

此错误是在使用 anova(model1, model2) 后生成的。我尝试使其可重现,但如果我 dput 数据并重试,则错误不会在 dput 数据上重现,尽管原始数据帧和新数据帧具有完全相同的 str >.

如果在干净的 session 中再次尝试,并且错误重现,并且再次因dput而丢失

我知道我不会在这里给人们太多的帮助,就像我说的我很乐意重现这个问题。 Cayone 解释了这个警告吗?

最佳答案

(我不确定这是评论还是答案,但它有点长,可能是一个答案。)

  • 难以重现结果的最直接原因是 lme4 同时使用环境和引用类:这些很难“序列化”,即转换为可以通过保存的线性流dput()save()。 (您可以尝试一下 save() 并看看它是否比 dput() 效果更好?
  • 此外,环境和引用类都使用“按引用传递”语义,因此对保存的模型进行操作可以更改它。 anova() 自动重新拟合模型,这会对保存的模型对象的内部结构进行一些微小但非零的更改(我们仍在尝试追踪这一点)。
  • @alexkeil 的评论是错误的:lme4 中使用的非线性优化器使用对伪随机数生成器的任何调用。它们是确定性的(但以上两点解释了为什么事情可能看起来有点奇怪)。

为了减轻您对拟合的担忧,我会通过计算最终拟合的梯度和 Hessian 来检查拟合,例如

library(lme4)
library(numDeriv)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
dd <- update(fm1,devFunOnly=TRUE)
params <- getME(fm1,"theta") ## also need beta for glmer fits
grad(dd,params)
## all values 'small', say < 1e-3
## [1] 0.0002462423 0.0003276917 0.0003415010
eigen(solve(hessian(dd,params)),only.values=TRUE)$values
## all values positive and of similar magnitude
## [1] 0.029051631 0.002757233 0.001182232

我们正在实现类似的检查,以便在 lme4 中自动运行。

也就是说,如果有一种方法可以相对轻松地重现它,我仍然希望看到您的示例。

PS:为了使用 bobyqa,您必须使用 glmer 或已使用 lmerControl 修改默认优化器选择。 ..??

关于r - 在 optwrap 中使用 lmer 的模糊警告 lme4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743453/

相关文章:

r - 如何仅使用基本 R 创建二叉树?

r - 如何感谢 R 包(使用 roxygen2)的想法(而非代码)贡献者?

r - 从 nlme/lme4 输出中提取固定效应的 p 值

r - 用交互项引导 lmer

r - 在 R 中绘制混合模型的回归系数

r - 评估线性混合模型中的似然函数 (lme4)

r - 更改 plot.dendrogram 中的叶子颜色,就像包 ape 的 plot.phylo

regex - R:环顾四周

r - 看似 protected 配对列表的垃圾收集

r - 汇集估算数据集的 glmers