默认情况下,lmer
包中的lme4
函数使用来自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"))
发布于 2016-08-07 02:16:36
您不能使用newuoa
或uobyqa
,因为它们都不允许对参数进行约束。来自?lmerControl
(重点添加)
任何允许框约束的最小化函数都可以使用,只要它 (1)接受输入参数fn(要优化的函数)、“par”(起始参数值)、“下限”和“控制参数”(从“控制”参数传递过来的控制参数)和 (2)返回一个包含(至少)元素‘par’(最佳拟合参数)、‘fval’(最佳拟合函数值)、‘conv’(收敛码等于零的成功收敛)和(可选)‘message’(信息消息或收敛失败解释)的列表。
"bobyqa“开头的b
表示”绑定“(如在约束中),我假设其他算法中的u
类似地表示”无约束“。您可以查看此文件,以便某些机器(重新)可以将同一模型与一组不同的优化器相匹配:
allFit <- system.file("utils", "allFit.R", package="lme4")
file.show(allFit)
我目前所知道的允许框约束的所有优化器列表不需要指定显式梯度函数( optimx
包中的大多数绑定约束优化器都需要),如上面的文件所示
minqa
和nloptr
包实现)lme4
、nloptr
和dfoptim
包实现)nlminb
(来自贝尔实验室端口库)L-BFGS-B
来自R基地,途经optimx
(Broyden Goldfarb-Shanno,经纳什)除了这些内置于allFit.R
的功能之外,您还可以使用来自nloptr
的COBYLA
或子丛优化器:参见?nloptwrap
。在subplex
包中还有另一个子丛的实现:可能还有其他几个我错过了。
https://stackoverflow.com/questions/25142457
复制相似问题