我找到另外,老年人在這裏的回答不能令人滿意。我在統計上區分年齡沒有影響和相反我們遇到計算錯誤的情況。就我個人而言,我通過將這兩種情況混爲一談而犯了職業錯誤。 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'。 –
請參閱下面的答案和評論。您的第一個模型沒有固定效應的年齡,也沒有第二個模型的隨機效應約束。 –