我用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)

这很管用.看看输出,其中first column是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)

请注意,the REML value restarts at 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

Question: How can I reliably restart 100 with start values obtained from a previously fitted model?


会议信息:

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

推荐答案

根据 comments ,这是lme4中确认的错误

我在github上记录了一个问题.com/lme4/lme4/issues/55–安德烈2013年7月2日15:42

对于lmer,这一问题现在应该得到解决(但对于glmer,这一点要稍微复杂一些)本·博尔克7月14日

那是在版本为<;0.99999911-6; lme4 on CRAN个版本>;1.0-4自2013年9月21日起生效.

R相关问答推荐

我可以截断10字节的扩展数并转换为8字节的double吗?

在ubuntu 22.04上更新到R4.4后包安装出现编译错误

如何在弹性表中为类别值的背景上色

将复杂的组合列表转换为数据框架

如何根据R中其他列的值有条件地从列中提取数据?

S用事件解决物质平衡问题

R根据条件进行累积更改

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

使用R闪光显示所有数据点作为默认设置

根据列A中的差异变异列,其中行由列B中的相对值标识

基于R中的间隔扩展数据集行

在R中创建连续的期间

列名具有特殊字符时的循环回归

Rmarkdown::Render vs Source()

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

R:如何在数据集中使用Apply

如何在shiny 的应用程序 map 视图宣传单中可视化单点

位置_道奇在geom_point图中不躲避