lmer
包中的函数lme4
默认使用bobyqa
包中的minqa
作为优化算法。
根据以下帖子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"))
答案 0 :(得分:5)
您不能使用newuoa
或uobyqa
,因为它们都不允许对参数进行约束。来自?lmerControl
(强调添加)
任何允许框约束
的最小化函数都可以使用(1)取输入参数'fn'(要优化的功能),'par'(起始参数值),'lower'(下限)和'control'(控制参数,从'control'传来)论证)和
(2)返回一个列表,其中包含(至少)元素'par'(最适合 参数),'fval'(最佳拟合函数值),'conv' (收敛代码,成功等于零) 收敛)和(可选)'消息'(信息 消息,或对收敛失败的解释)。
&#34; bobyqa&#34;开头的b
代表&#34;绑定&#34; (如在约束中),我假设其他算法中的u
同样代表&#34;无约束&#34;。您可以查看此文件中的某些机制,以便(重新)使用一堆不同的优化器来匹配相同的模型:
allFit <- system.file("utils", "allFit.R", package="lme4")
file.show(allFit)
我目前所知道的所有优化器列表允许使用框约束,并且不需要指定显式渐变函数(大多数绑定约束优化器都需要{ {1}} package),如上面的文件所示,是
optimx
和minqa
包实施)nloptr
,lme4
和nloptr
包实施)dfoptim
(来自贝尔实验室PORT图书馆)nlminb
,通过L-BFGS-B
(Broyden-Fletcher-Goldfarb-Shanno,来自纳什)除了optimx
内置的这些内容之外,您还可以使用allFit.R
中的COBYLA
或subplex优化器:请参阅nloptr
。 ?nloptwrap
包中有另一个subplex实现:可能还有其他一些我错过了。