重新启动具有先前估计值的混合效应模型估计


69

我正在使用lmer()lme4来估计混合效果模型。这很好用,但是现在我要对固定数量的迭代运行估算过程,然后通过指定由上一个估算过程计算出的起始值来恢复过程。

根据帮助,?lmer可以通过设置参数来实现:

  • start-这些是新的起始值,根据帮助,可以ST从拟合模型中提取插槽中的值并使用这些值,即使用x@ST
  • maxiter -作为命名参数提供给 control

因此,例如,假设我要lme使用iris数据来拟合一个,可以尝试一下:

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(ST=x@ST)

# 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(ST=x@ST)

> # 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(ST=x@ST)
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(ST=x@ST)

> # 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
这很可能是一个错误。的start功能lme4尚未得到充分彻底的利用,因此我敢肯定会有很多这样的问题。您使用稳定版而不是开发版的需求有多强?我将对此进行研究,但我们希望在稳定版本上进行大部分调试工作……
Ben Bolker

@BenBolker我现在可以使用开发或测试代码,因为我现在仅在进行一些实验。如果您让我知道在哪里可以找到dev分支,我可以提供帮助。
Andrie 2013年

它在github:上library(devtools); install_github("lme4",user="lme4")。在此版本中,更容易提取出偏差函数并将其用于您自己的优化中,如果您希望获得更多控制,则可能会更喜欢。另外,请尝试start实验,如果发现不起作用,请在github.com/lme4/lme4/issues上告诉我...
Ben Bolker 2013年

碰碰..我很好奇,如果您能进一步了解开发版本...
Ben Bolker

3
现在应该修复此问题lmer(尽管不是glmer,这比较棘手)。
Ben Bolker

Answers:


3

这是在lme4中已确认的错误,并根据评论

我已经在github.com/lme4/lme4/issues/55上记录了一个问题– Andrie 13年7月2日在15:42

现在应该为lmer修复此问题(尽管不是glmer,这有点棘手)。– Ben Bolker 7月14日

当版本<0.99999911-6时又回来了;自2013年9月21日以来,CRAN上的lme4版本> 1.0-4。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.