使用glmer.nb函数的nb.control参数

7
我正在使用R中的lme4包中的glmer.nb函数进行负二项式模型。实际模型本身有些复杂,但应该(至少我认为)在统计上是可靠的。我目前的问题是,模型难以收敛,并返回以下警告: “在检查Conv(attr(opt,“derivs”),opt $ par,ctrl = control $ checkConv, 模型无法收敛,max | grad | = 0.00753068(tol = 0.001,component 1)”
大部分时间,我使用标准的glmer功能,在那里,当我收到这个警告时,我将这个参数添加到glmer功能中: “glmerControl(optimizer =“ bob yqa”,optCtrl = list(maxfun = 100000))”
那通常会解决问题。现在,查看glmer.nb的帮助文件,似乎glmer.nb的类似参数是nb.control。然而,当我只是将glmerControl更改为nb.control时,R返回错误,说它找不到该函数。好的,没关系。从帮助文件中给定的语法来看,nb.control应该设置为您所需的控制参数列表。我已经尝试了各种方法来获得我的两个期望变化,但R仍然会带有警告地删除nb.control:“忽略额外参数'nb.control'”。
我尝试搜索互联网这个广阔的资源,搜索使用nb.control参数的人的示例。我发现的大多数东西(我找不到太多东西,因此这个问题)似乎只是推荐来自glmer的glmerControl参数的使用。当我放置该参数时,似乎无法解决问题。
基本上,我只想知道如何使用nb.control参数将优化程序更改为“ bobyqa”并将迭代次数更改为高于默认值的数字。当nb.control不是默认值NULL时使用nb.control参数的语法是什么?如果您有任何想法,请告诉我。谢谢!
1个回答

5

有点违反直觉,但是你应该使用control=glmerControl(...)来完成这个任务,就像进行类似的glmer拟合一样 - 这将传递到内部循环中。

设置数据等:

library(lme4)
dd <- expand.grid(f1 = factor(1:3),
                  f2 = LETTERS[1:2], g=1:9, rep=1:15)
dd$y <- simulate(~f1+f2+(1|g),
                 newparams=list(beta=rep(1,4),
                                theta=1),
                 newdata=dd,
                 seed=101,
                 family=negative.binomial(theta=1.5))[[1]]

适用于 "香草" 版本:

m.nb <- glmer.nb(y ~ f1+f2 + (1|g), data=dd)

检查优化信息:

m.nb@optinfo[c("optimizer","control")]
## $optimizer
## [1] "Nelder_Mead"
## 
## $control
## $control$verbose
## [1] 0

与备选优化器等配合使用:

m.nb2 <- glmer.nb(y ~ f1+f2 + (1|g), data=dd,
                  control=glmerControl(optimizer="bobyqa",
                           optCtrl=list(maxfun=1e5)))

检查我们确实做出了更改:

m.nb2@optinfo[c("optimizer","control")]
## $optimizer
## [1] "bobyqa"
## 
## $control
## $control$maxfun
## [1] 1e+05
## 
## $control$iprint
## [1] 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接