2013-06-26 98 views
67

我在lme4包中使用lmer()來估計混合效果模型。這很好,但現在我想運行估計過程進行固定次數的迭代,然後通過指定由最後估計過程計算出的開始值來恢復過程。用以前的估計值重新啓動混合效果模型估計

根據該幫助?lmer這是可能的,通過設定參數:

  • start - 這些都是新的開始值,並且根據所述幫助人們可以在插槽ST從嵌合提取的值模型,並用這些,即使用[email protected]
  • maxiter - 供應作爲命名參數control

因此,例如,假設我要使用iris數據,以適應lme,可以試試這個:

library(lme4) 

# Fit model with limited number of iterations 

frm <- "Sepal.Length ~ Sepal.Width | Species" 

x <- lmer(frm, data=iris, 
      verbose=TRUE, control=list(maxIter=1), model=FALSE) 

# Capture starting values for next set of iterations 
start <- list([email protected]) 

# Update model 
twoStep <- lmer(frm, data=iris, 
      verbose=TRUE, control=list(maxIter=100), model=TRUE, 
      start=start) 

這工作。看看輸出,其中第一列是REML,即隨機效應最大可能性。尤其要注意的是在模型2點開始REML其中模型1終止:

> x <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=1), model=FALSE) 
    0:  264.60572: 0.230940 0.0747853 0.00000 
    1:  204.22878: 0.518239 1.01025 0.205835 
    1:  204.22878: 0.518239 1.01025 0.205835 

> # Capture starting values for next set of iterations 
> start <- list([email protected]) 

> # Update model 
> twoStep <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=100), model=TRUE, 
+   start=start) 
    0:  204.22878: 0.518239 1.01025 0.205835 
    1:  201.51667: 0.610272 2.00277 0.286049 
    2:  201.46706: 0.849203 1.94906 0.358809 
    3:  201.44614: 0.932371 1.88581 0.482423 
    4:  201.39421: 1.00909 1.71078 0.871824 
    5:  201.36543: 1.00643 1.60453 1.01663 
    6:  201.31066: 1.00208 1.35520 1.27524 
    7:  201.28458: 1.08227 1.22335 1.35147 
    8:  201.24330: 1.50333 0.679759 1.31698 
    9:  201.11881: 1.95760 0.329767 0.936047 

然而,當我有maxIters不同的值,這將不再有效:

x <- lmer(frm, data=iris, 
      verbose=TRUE, control=list(maxIter=3), model=FALSE) 
start <- list([email protected]) 
twoStep <- lmer(frm, data=iris, 
       verbose=TRUE, control=list(maxIter=100), model=TRUE, 
       start=start) 

注意的REML值重新啓動在264,即開頭:

> x <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=3), model=FALSE) 
    0:  264.60572: 0.230940 0.0747853 0.00000 
    1:  204.22878: 0.518238 1.01025 0.205835 
    2:  201.94075: 0.00000 1.51757 -1.18259 
    3:  201.71473: 0.00000 1.69036 -1.89803 
    3:  201.71473: 0.00000 1.69036 -1.89803 

> # Capture starting values for next set of iterations 
> start <- list([email protected]) 

> # Update model 
> twoStep <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=100), model=TRUE, 
+   start=start) 
    0:  264.60572: 0.230940 0.0747853 0.00000 
    1:  204.22878: 0.518238 1.01025 0.205835 
    2:  201.94075: 0.00000 1.51757 -1.18259 
    3:  201.71473: 0.00000 1.69036 -1.89803 
    4:  201.64641: 0.00000 1.82159 -2.44144 
    5:  201.63698: 0.00000 1.88282 -2.69497 
    6:  201.63649: 0.00000 1.89924 -2.76298 
    7:  201.63649: 4.22291e-08 1.90086 -2.76969 
    8:  201.63649: 4.22291e-08 1.90086 -2.76969 

問題:如何可靠地重新啓動lmer(),並從先前擬合的模型中獲取起始值?


會議信息:

packageVersion("lme4") 
[1] ‘0.999999.2’ 
+1

這很可能是一個錯誤; 'lme4'的'start'功能還沒有被徹底地運用過,所以我確定有很多這樣的問題。您需要使用穩定版而不是開發版有多強?我會研究這一點,但我們希望能夠對穩定版本進行大部分的調試...... –

+0

@BenBolker我可以使用開發或測試代碼,因爲我現在只是在運行一些實驗。我可以幫忙,如果你讓我知道在哪裏可以找到開發分支。 – Andrie

+0

它在github上:'library(devtools); install_github( 「lme4」,用戶= 「lme4」)'。在這個版本中更容易提取偏差函數並將其用於您自己的優化中,如果您想要更多控制,您可能更喜歡使用它。或者,嘗試'開始'實驗,並讓我知道在https://github.com/lme4/lme4/issues,如果你發現一些不工作... –

回答

3

這是一個lme4確認的錯誤,並按照該意見

我在記錄的github.com/lme4/lme4問題/問題/ 55 - 安德里13年7月2日15:42

這應該是現在固定lmer(雖然不是爲glmer,這是略有tr ickier)。 - Ben Bolker Jul 14

那時候回來的時候版本是< 0.99999911-6;自2013年9月21日起,lme4 on CRAN版本> 1.0-4。