Refit a fitted model with all available optimizers
Attempt to re-fit a [g]lmer model with a range of optimizers.
The default is to use all known optimizers for R that satisfy the
requirements (i.e. they do not require functions and allow
box constraints: see ‘optimizer’ in lmerControl
).
These optimizers fall in four categories; (i) built-in
(minqa::bobyqa, lme4::Nelder_Mead, nlminbwrap), (ii) wrapped via optimx
(most of optimx's optimizers that allow box constraints require
an explicit gradient function to be specified; the two provided
here are the base R functions that can be accessed via optimx),
(iii) wrapped via nloptr (see examples for the list of options),
(iv) ‘dfoptim::nmkb’ (via the (unexported) nmkbw
wrapper:
this appears as ‘nmkbw’ in meth.tab
)
allFit(object, meth.tab = NULL, data=NULL, verbose = TRUE, show.meth.tab = FALSE, maxfun = 1e5, parallel = c("no", "multicore", "snow"), ncpus = getOption("allFit.ncpus", 1L), cl = NULL)
object |
a fitted model |
meth.tab |
a matrix (or data.frame) with columns
|
data |
data to be included with result (for later debugging etc.) |
verbose |
logical: report progress in detail? |
show.meth.tab |
logical: return table of methods? |
maxfun |
passed as part of |
parallel |
The type of parallel operation to be used (if any).
If missing, the
default is taken from the option |
ncpus |
integer: number of processes to be used in parallel operation:
typically one would choose this to be the number of available CPUs.
Use |
cl |
An optional parallel or snow cluster for use if
|
Needs packages optimx
, and dfoptim
to use all optimizers
If you are using parallel="snow"
(e.g. when running in
parallel on Windows), you will need to set up a cluster yourself and run
clusterEvalQ(cl,library("lme4"))
before calling
allFit
to make sure that the
lme4
package is loaded on all of the workers
Control arguments in control$optCtrl
that are unused by a particular optimizer will be silently ignored (in particular, the maxfun
specification is only respected by bobyqa
, Nelder_Mead
, and nmkbw
)
Because allFit
works by calling update
, it may be fragile if the original model call contains references to variables, especially if they were originally defined in other environments or no longer exist when allFit
is called.
an object of type allFit
, which is a list of fitted merMod
objects (unless show.meth.tab
is
specified, in which case a data frame of methods is returned). The
summary
method for this class
extracts tables with a variety of useful information
about the different fits (see examples).
slice
,slice2D
from the bbmle package
if (interactive()) { library(lme4) gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd), data = cbpp, family = binomial) ## show available methods allFit(show.meth.tab=TRUE) gm_all <- allFit(gm1) ss <- summary(gm_all) ss$which.OK ## logical vector: which optimizers worked? ## the other components only contain values for the optimizers that worked ss$llik ## vector of log-likelihoods ss$fixef ## table of fixed effects ss$sdcor ## table of random effect SDs and correlations ss$theta ## table of random effects parameters, Cholesky scale } ## Not run: ## Parallel examples for Windows nc <- detectCores()-1 optCls <- makeCluster(nc, type = "SOCK") clusterEvalQ(optCls,library("lme4")) ### not necessary here because using a built-in ## data set, but in general you should clusterExport() your data clusterExport(optCls, "cbpp") system.time(af1 <- allFit(m0, parallel = 'snow', ncpus = nc, cl=optCls)) stopCluster(optCls) ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.