用先前的估计值重新开始混合效应模型估计

我使用包lme4 lmer()来估计混合效果模型。 这个效果很好,但是现在我想运行估计过程进行固定次数的迭代,然后通过指定最后估计过程计算的开始值来恢复过程。

根据?lmer的帮助,这是可能的,通过设定参数:

  • start – 这些是新的起始值,根据帮助,可以从一个拟合模型中提取ST的值,并使用这些值,即使用x@ST
  • 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(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' 

这是lme4中的一个确认错误,并按照评论

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

这应该是现在固定lmer(虽然不是为glmer,这是有点棘手)。 – 本博尔克7月14日

当版本<0.99999911-6; 自2013年9月21日起,CRAN上的lme4的版本大于1.0-4。