【问题标题】:Restart mixed effect model estimation with previously estimated values使用先前估计的值重新启动混合效应模型估计
【发布时间】:2013-06-23 15:44:48
【问题描述】:

我正在使用 lmer() 包中的 lme4 来估计混合效应模型。这很好用,但现在我想对固定次数的迭代运行估计过程,然后通过指定起始值来恢复该过程,如上一个估计过程计算的那样。

根据?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’

【问题讨论】:

  • 这很可能是一个错误; lme4start 功能还没有得到非常彻底的锻炼,所以我敢肯定有很多这样的问题。您对使用稳定版而不是开发版的需求有多强烈?我会对此进行调查,但我们希望在稳定版本上进行大部分调试......
  • @BenBolker 我可以使用开发或测试代码,因为我现在只是在进行一些实验。如果你让我知道在哪里可以找到 dev 分支,我可以提供帮助。
  • 它在 github 上:library(devtools); install_github("lme4",user="lme4")。在这个版本中,提取偏差函数并在您自己的优化中使用它更容易,如果您想要更多控制,您可能更喜欢它。或者,请尝试start 实验,如果您发现某些东西不起作用,请通过github.com/lme4/lme4/issues 告诉我...
  • bump .. 我很想知道你是否在开发版本中走得更远...
  • 现在应该为lmer 修复这个问题(虽然不是glmer,这有点棘手)。

标签: r lme4 mixed-models lmer


【解决方案1】:

这是 lme4 和 cmets 中已确认的错误

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

现在应该为 lmer 修复这个问题(虽然对于 glmer 来说不是,这有点棘手)。 – 本博尔克 7 月 14 日

那是在版本 lme4 on CRAN 的版本 > 1.0-4。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2020-10-14
    • 2021-07-17
    • 2015-12-09
    • 1970-01-01
    • 2021-10-22
    • 2021-01-04
    相关资源
    最近更新 更多