对于来自IGF
库的nlme
数据,我收到此错误消息:
lme(conc ~ 1, data=IGF, random=~age|Lot)
Error in lme.formula(conc ~ 1, data = IGF, random = ~age | Lot) :
nlminb problem, convergence error code = 1
message = iteration limit reached without convergence (10)
但是这个代码的一切都很好
lme(conc ~ age, data=IGF)
Linear mixed-effects model fit by REML
Data: IGF
Log-restricted-likelihood: -297.1831
Fixed: conc ~ age
(Intercept) age
5.374974367 -0.002535021
Random effects:
Formula: ~age | Lot
Structure: General positive-definite
StdDev Corr
(Intercept) 0.082512196 (Intr)
age 0.008092173 -1
Residual 0.820627711
Number of Observations: 237
Number of Groups: 10
由于IGF
为groupedData
,因此两个代码都相同。我很困惑为什么第一个代码会产生错误。感谢您的时间和帮助。
答案 0 :(得分:5)
如果您绘制数据,您可以看到age
没有效果,所以尽管如此,尝试拟合age
的随机效果似乎很奇怪。难怪它没有融合。
library(nlme)
library(ggplot2)
dev.new(width=6, height=3)
qplot(age, conc, data=IGF) + facet_wrap(~Lot, nrow=2) + geom_smooth(method='lm')
我认为你想要做的是模拟Lot
对拦截的随机效果。我们可以尝试将age
作为固定效果包含在内,但我们会发现它并不重要且可以被抛弃:
> summary(lme(conc ~ 1 + age, data=IGF, random=~1|Lot))
Linear mixed-effects model fit by REML
Data: IGF
AIC BIC logLik
604.8711 618.7094 -298.4355
Random effects:
Formula: ~1 | Lot
(Intercept) Residual
StdDev: 0.07153912 0.829998
Fixed effects: conc ~ 1 + age
Value Std.Error DF t-value p-value
(Intercept) 5.354435 0.10619982 226 50.41849 0.0000
age -0.000817 0.00396984 226 -0.20587 0.8371
Correlation:
(Intr)
age -0.828
Standardized Within-Group Residuals:
Min Q1 Med Q3 Max
-5.46774548 -0.43073893 -0.01519143 0.30336310 5.28952876
Number of Observations: 237
Number of Groups: 10
答案 1 :(得分:4)
我发现另一个较旧的答案不能令人满意。我区分的情况是,在统计上,年龄没有影响,相反,我们遇到计算错误。就个人而言,我通过混淆这两个案件犯了职业错误。 R已经发出了后者的信号,我想深入了解为什么会这样。
OP指定的模型是增长模型,具有随机斜率和截距。包括一个大的拦截但不是一个大的年龄斜坡。通过拟合随机斜率而不添加其“大”项而施加的一个令人讨厌的约束是,您迫使随机斜率具有0均值,这是非常难以优化的。边际模型表明年龄在模型中与0没有统计学上显着的不同值。此外,将年龄添加为固定效应并不能解决问题。
> lme(conc~ age, random=~age|Lot, data=IGF)
Error in lme.formula(conc ~ age, random = ~age | Lot, data = IGF) :
nlminb problem, convergence error code = 1
message = iteration limit reached without convergence (10)
这里的错误是显而易见的。设置迭代次数可能很诱人。 lmeControl
有许多迭代估计。但即使这样也行不通:
> fit <- lme(conc~ 1, random=~age|Lot, data=IGF,
control = lmeControl(maxIter = 1e8, msMaxIter = 1e8))
Error in lme.formula(conc ~ 1, random = ~age | Lot,
data = IGF, control = lmeControl(maxIter = 1e+08, :
nlminb problem, convergence error code = 1
message = singular convergence (7)
因此,这不是一个精确的事情,优化器正在超出范围。
您建议拟合的两个模型之间必须存在关键差异,以及诊断您发现的错误的方法。一种简单的方法是为有问题的模型指定“详细”:
> lme(conc~ 1, random=~age|Lot, data=IGF, control = lmeControl(msVerbose = TRUE))
0: 602.96050: 2.63471 4.78706 141.598
1: 602.85855: 3.09182 4.81754 141.597
2: 602.85312: 3.12199 4.97587 141.598
3: 602.83803: 3.23502 4.93514 141.598
(truncated)
48: 602.76219: 6.22172 4.81029 4211.89
49: 602.76217: 6.26814 4.81000 4425.23
50: 602.76216: 6.31630 4.80997 4638.57
50: 602.76216: 6.31630 4.80997 4638.57
第一个词是REML(我认为)。第二到第四项是类lmeSt
,lmeStructInt
和lmeStruct
中名为modelStruct
的对象的参数。如果你使用Rstudio的调试器来检查这个对象的属性(问题的关键),你会发现它是在这里爆炸的随机效果组件。 50次迭代后coef(lmeSt)
生成
reStruct.Lot1 reStruct.Lot2 reStruct.Lot3
6.316295 4.809975 4638.570586
如上所示并产生
> coef(lmeSt, unconstrained = FALSE)
reStruct.Lot.var((Intercept)) reStruct.Lot.cov(age,(Intercept))
306382.7 2567534.6
reStruct.Lot.var(age)
21531399.4
与
相同Browse[1]> lmeSt$reStruct$Lot
Positive definite matrix structure of class pdLogChol representing
(Intercept) age
(Intercept) 306382.7 2567535
age 2567534.6 21531399
所以很明显随机效应的协方差在这里为这个特定的优化器爆发了。 nlminb
中的PORT例程因其无法解释的错误而受到批评。来自David Gay(贝尔实验室)的文本在这里http://ms.mcmaster.ca/~bolker/misc/port.pdf PORT文档表明我们的错误7来自使用10亿iter max“x可能有太多免费组件。参见§5。”。我们应该问,是否存在应该产生类似结果的近似结果,而不是修复算法。例如,很容易拟合lmList
对象来得出随机截距和随机斜率方差:
> fit <- lmList(conc ~ age | Lot, data=IGF)
> cov(coef(fit))
(Intercept) age
(Intercept) 0.13763699 -0.018609973
age -0.01860997 0.003435819
虽然理想情况下这些将按其各自的精确权重进行加权:
要使用nlme
包,我注意到使用BFGS的无约束优化不会产生这样的错误,并且会得到类似的结果:
> lme(conc ~ 1, data=IGF, random=~age|Lot, control = lmeControl(opt = 'optim'))
Linear mixed-effects model fit by REML
Data: IGF
Log-restricted-likelihood: -292.9675
Fixed: conc ~ 1
(Intercept)
5.333577
Random effects:
Formula: ~age | Lot
Structure: General positive-definite, Log-Cholesky parametrization
StdDev Corr
(Intercept) 0.032109976 (Intr)
age 0.005647296 -0.698
Residual 0.820819785
Number of Observations: 237
Number of Groups: 10
可以使用MUCH更简单的lme4
包完成此类模型的替代语法声明:
library(lme4)
lmer(conc ~ 1 + (age | Lot), data=IGF)
产生:
> lmer(conc ~ 1 + (age | Lot), data=IGF)
Linear mixed model fit by REML ['lmerMod']
Formula: conc ~ 1 + (age | Lot)
Data: IGF
REML criterion at convergence: 585.7987
Random effects:
Groups Name Std.Dev. Corr
Lot (Intercept) 0.056254
age 0.006687 -1.00
Residual 0.820609
Number of obs: 237, groups: Lot, 10
Fixed Effects:
(Intercept)
5.331
lmer
及其优化器的属性是非常接近1,0或-1的随机效应相关性被简单地设置为这些值,因为它简化了优化(以及估计的统计效率)基本上
总而言之,不表明年龄没有效果,如前所述,数字结果可以支持这个论点。