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