【问题标题】:obscure warning lme4 using lmer in optwrap在 optwrap 中使用 lmer 模糊警告 lme4
【发布时间】:2013-12-23 12:19:43
【问题描述】:

使用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 数据并再试一次,尽管原始数据帧和新数据帧具有完全相同的 str,但错误不会在 dput 数据上重现。

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

我知道我在这里没有给人们太多的工作机会,就像我说过我很想重现这个问题一样。 Cayone 阐明了这个警告?

【问题讨论】:

  • 听起来像dput 正在舍入或截断某些值,而原始值“非常糟糕”,而截断的值能够收敛。试试orig_data - dput_data 看看增量是什么。

标签: r lme4


【解决方案1】:

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

  • 难以重现结果的近端原因是lme4 同时使用环境和引用类:这些很难“序列化”,即转换为可以通过dput() 或@ 保存的线性流987654323@。 (您可以试试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来修改默认优化器选择... ??

【讨论】:

  • 亲爱的 Ben,感谢您的 cmets,我从未使用过 save,所以只是检查如何使用它来尝试一下。我尝试了options=22 并剪切/粘贴,但这不会重现。承诺我正在使用lmer并且我没有故意修改优化器的选择。我在R 3.0.2lme4_1.0-5 以防万一有人问。
  • 虽然如果我匿名我的数据,通过更改级别的名称 test where test is : lmer(ans1 ~ test + (1|z), data = try1) 警告也会停止..
猜你喜欢
  • 2021-09-05
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多