5

使用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.

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

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

4

1 回答 1

5

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

  • 重现结果困难的近端原因是同时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修改默认优化器选择......??

于 2013-12-23T17:29:22.000 回答