Refit a fitted model with all available optimizers
allFit.Rd
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
)
Arguments
- object
a fitted model
- meth.tab
a matrix (or data.frame) with columns
- method
the name of a specific optimization method to pass to the optimizer (leave blank for built-in optimizers)
- optimizer
the
optimizer
function to use
- 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
optCtrl
to set the maximum number of function evaluations: this is automatically converted to the correct specification (e.g.maxfun
,maxfeval
,maxit
, etc.) for each optimizer- parallel
The type of parallel operation to be used (if any). If missing, the default is taken from the option
"boot.parallel"
(and if that is not set,"no"
).- ncpus
integer: number of processes to be used in parallel operation: typically one would choose this to be the number of available CPUs. Use
options(allFit.ncpus=X)
to set the default value toX
for the duration of an R session.- cl
An optional parallel or snow cluster for use if
parallel = "snow"
. If not supplied, a cluster on the local machine is created for the duration of theboot
call.- catch.errs
(logical) Wrap model fits in
tryCatch
clause to skip over errors? (catch.errs=FALSE
is probably only useful for debugging)
Value
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).
Details
Needs packages
optimx
, anddfoptim
to use all optimizersIf you are using
parallel="snow"
(e.g. when running in parallel on Windows), you will need to set up a cluster yourself and runclusterEvalQ(cl,library("lme4"))
before callingallFit
to make sure that thelme4
package is loaded on all of the workersControl arguments in
control$optCtrl
that are unused by a particular optimizer will be silently ignored (in particular, themaxfun
specification is only respected bybobyqa
,Nelder_Mead
, andnmkbw
)Because
allFit
works by callingupdate
, 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 whenallFit
is called.
See also
slice
,slice2D
from the bbmle package
Examples
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
}
if (FALSE) { # \dontrun{
## 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)
} # }