我找到另外,老年人在这里的回答不能令人满意。我在统计上区分年龄没有影响和相反我们遇到计算错误的情况。就我个人而言,我通过将这两种情况混为一谈而犯了职业错误。 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(我认为)。第二至第四项是lmeStructInt
,lmeStruct
和modelStruct
类别的称为lmeSt
的对象的参数。如果你使用Rstudio的调试器来检查这个对象的属性(问题的关键),你会发现它是在这里爆炸的随机效应组件。coef(lmeSt)
经过50次迭代产生 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
中的端口例程因其无误的错误而受到批评。来自David Gay(贝尔实验室)的文本在这里http://ms.mcmaster.ca/~bolker/misc/port.pdf PORT文档建议我们的错误7使用最大10亿iter 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.9976 (Intr)
age 0.005647296 -0.698
Residual 0.820819785
Number of Observations: 237
Number of Groups: 10
这种模式的一个替代句法声明可以与T完成他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,1,0或-1被简单地设置到那些值,因为它大大简化了优化(以及估计的统计效率)。
综合起来,这确实是而不是表明年龄没有影响,正如前面所说,这个参数可以通过数字结果得到支持。
我快速看了一下,没有发现任何东西跳出来。你可能会在'r-sig-mixed-models'邮件列表中获得更好的运气,这个邮件列表有更多的人熟悉这个软件包...... –
你有没有试过增加第一个例子中的迭代限制?见'lmeControl'。 –
请参阅下面的答案和评论。您的第一个模型没有固定效应的年龄,也没有第二个模型的随机效应约束。 –