2011-10-27 58 views
9

对于来自nlmeIGF数据,我收到此错误信息:错误与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 

由于IGFgroupedData,这样既码是相同的。我很困惑为什么第一个代码会产生错误。感谢您的时间和帮助。

+0

我快速看了一下,没有发现任何东西跳出来。你可能会在'r-sig-mixed-models'邮件列表中获得更好的运气,这个邮件列表有更多的人熟悉这个软件包...... –

+0

你有没有试过增加第一个例子中的迭代限制?见'lmeControl'。 –

+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') 

enter image description here

我想你想要做的是模型的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

您的分析肯定会回答数据中发生了什么问题,但仍然存在一个有趣的问题,即有关实际拟合的模型中的差异。看看上面成功模型的结果,你可以看到它*符合年龄的随机效应(尽管与批次间截距变化存在完美的相关性,表明模型过度配置...) –

+0

模型在OP的帖子中做的工作是适合'年龄'斜率,在该斜率上具有“Lot”的随机效应。如果数据支持它,这是一件好事。在这种情况下,举一个很好的例子,'lme(height_ age,data = Oxboys,random =〜1 + age | Subject)'。这也是'ggplot2'书中第4.9.3节中的例子。 OP的帖子中的第一个模型不起作用,对于固定效果结构中没有指定的东西具有随机效果。我甚至不认为这是有道理的。 –

+1

是的,但是这也失败了:'lme(浓度,数据= IGF,随机=〜年龄|批次)',这看起来似乎是一个相同的模型。 (虽然我对这个答案有点微不足道的好奇,但我似乎不愿意花费很多努力,因为它似乎属于以下范畴:“医生,当我这样做的时候会感到痛苦“”那么,不要那样做......“) –

3

我找到另外,老年人在这里的回答不能令人满意。我在统计上区分年龄没有影响和相反我们遇到计算错误的情况。就我个人而言,我通过将这两种情况混为一谈而犯了职业错误。 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(我认为)。第二至第四项是lmeStructIntlmeStructmodelStruct类别的称为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被简单地设置到那些值,因为它大大简化了优化(以及估计的统计效率)。

综合起来,这确实是而不是表明年龄没有影响,正如前面所说,这个参数可以通过数字结果得到支持。