2

lmer包中的函数lme4默认使用bobyqaminqa中的优化算法。

根据以下帖子https://stat.ethz.ch/pipermail/r-sig-mixed-models/2013q1/020075.html,还可以使用minqa包中的其他优化算法

如何使用uobyqanewuoa作为优化算法lmer

library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy, control=lmerControl(optimizer="bobyqa"))
4

1 回答 1

6

您不能使用newuoanoruobyqa因为两者都不允许对参数进行约束。来自?lmerControl(强调添加)

任何允许框约束的最小化函数都可以使用,前提是它

(1) 接受输入参数“fn”(要优化的函数)、“par”(起始参数值)、“lower”(下限)和“control”(控制参数,从“control”参数传递)和

(2) 返回一个列表,其中包含(至少)元素“par”(最佳拟合参数)、“fval”(最佳拟合函数值)、“conv”(收敛代码,为零表示成功收敛)和(可选) 'message'(信息性消息,或收敛失败的解释)。

bbobyqa”开头的代表“约束”(如约束),我假设u在其他算法中同样代表“无约束”。您可以查看此文件以了解一些机器以(重新)使用一堆不同的优化器拟合相同的模型:

allFit <- system.file("utils", "allFit.R", package="lme4")
file.show(allFit)

我目前知道的所有优化器列表允许框约束并且不需要指定显式梯度函数(包中的大多数绑定约束优化器都需要optimx),如上面的文件所示,是

  • BOBYQA(minqanloptr包实现)
  • Nelder-Mead ( lme4, nloptr, 和dfoptim包实现)
  • nlminb来自 base R(来自贝尔实验室 PORT 库)
  • L-BFGS-B从基础 R,通过optimx(Broyden-Fletcher-Goldfarb-Shanno,通过 Nash)

除了内置于 的这些之外allFit.R,您还可以使用来自 的COBYLA或 subplex 优化器nloptr:请参阅?nloptwrap。包中还有subplex 的另一种实现subplex:可能还有一些我错过了。

于 2016-08-07T02:16:36.280 回答