2011-10-27 77 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被簡單地設置到那些值,因爲它大大簡化了優化(以及估計的統計效率)。

綜合起來,這確實是而不是表明年齡沒有影響,正如前面所說,這個參數可以通過數字結果得到支持。