library(lme4)
ls.str(environment(nloptwrap)) # 'defaultControl' algorithm "NLOPT_LN_BOBYQA"
## Note that 'optimizer = "nloptwrap"' is now the default for lmer() :
fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
## tighten tolerances
fm1B <- update(fm1, control= lmerControl(optCtrl = list(xtol_abs=1e-8, ftol_abs=1e-8)))
## run for longer (no effect in this case)
fm1C <- update(fm1,control = lmerControl(optCtrl = list(maxeval=10000)))
logLik(fm1B) - logLik(fm1) ## small difference in log likelihood
c(logLik(fm1C) - logLik(fm1)) ## no difference in LL
## Nelder-Mead
fm1_nloptr_NM <- update(fm1, control=
lmerControl(optimizer = "nloptwrap",
optCtrl = list(algorithm = "NLOPT_LN_NELDERMEAD")))
## other nlOpt algorithm options include NLOPT_LN_COBYLA, NLOPT_LN_SBPLX, see
if(interactive())
nloptr::nloptr.print.options()
fm1_nlminb <- update(fm1, control=lmerControl(optimizer = "nlminbwrap"))
if (require(optimx)) { ## the 'optimx'-based nlminb :
fm1_nlminb2 <- update(fm1, control=
lmerControl(optimizer = "optimx",
optCtrl = list(method="nlminb", kkt=FALSE)))
cat("Likelihood difference (typically zero): ",
c(logLik(fm1_nlminb) - logLik(fm1_nlminb2)), "\n")
}
Run the code above in your browser using DataLab