lme4
包中的函数lmer
默认使用minqa
包中的bobyqa
作为优化算法。
根据以下帖子https://stat.ethz.ch/pipermail/r-sig-mixed-models/2013q1/020075.html , 也可以使用 minqa
包中的其他优化算法
如何使用 uobyqa
或 newuoa
作为 lmer
的优化算法?
library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy, control=lmerControl(optimizer="bobyqa"))
最佳答案
您不能使用 newuoa
或 uobyqa
,因为它们都不允许对参数进行约束。来自 ?lmerControl
(添加了重点)
Any minimizing function that allows box constraints can be used provided that it
(1) takes input parameters ‘fn’ (function to be optimized), ‘par’ (starting parameter values), ‘lower’ (lower bounds) and ‘control’ (control parameters, passed through from the ‘control’ argument) and
(2) returns a list with (at least) elements ‘par’ (best-fit parameters), ‘fval’ (best-fit function value), ‘conv’ (convergence code, equal to zero for successful convergence) and (optionally) ‘message’ (informational message, or explanation of convergence failure).
“bobyqa”开头的b
代表“bound”(如constrained),我假设其他算法中的u
同样代表“unconstrained” ”。您可以查看此文件以了解一些机器(重新)使用一堆不同的优化器来拟契约(Contract)一模型:
allFit <- system.file("utils", "allFit.R", package="lme4")
file.show(allFit)
我目前知道的所有优化器列表允许框约束并且不需要指定显式梯度函数(中的大多数边界约束优化器都需要) optimx
包),如上文件所示,是
- BOBYQA(
minqa
和nloptr
包实现) - Nelder-Mead(
lme4
、nloptr
和dfoptim
包实现) nlminb
来自 base R(来自贝尔实验室 PORT 库)L-BFGS-B
来自 base R,通过optimx
(Broyden-Fletcher-Goldfarb-Shanno,通过 Nash)
除了这些内置于 allFit.R
之外,您还可以使用 COBYLA
或来自 nloptr
的子丛优化器:请参阅?nloptwrap
。 subplex
包中还有另一个 subplex 的实现:可能还有一些我错过了。
关于r - lmer 的替代优化算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142457/