R: Refit 'lmer' model using multiple optimizers

all_fit {afex} | R Documentation

## Refit `lmer` model using multiple optimizers

### Description

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 (do not require explicit gradients, allow box constraints), in four categories; (i) built-in (`minqa::bobyqa`, `lme4::Nelder_Mead`), (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 really base R functions that can be accessed via optimx, (iii) wrapped via nloptr, (iv) `dfoptim::nmkb`.

### Usage

    all_fit(m, meth_tab = cbind(optimizer = rep(c("bobyqa", "Nelder_Mead",
      "optimx", "nloptwrap", "nmkbw"), c(1, 1, 2, 2, 1)), method = c("", "",
      "nlminb", "L-BFGS-B", "NLOPT_LN_NELDERMEAD", "NLOPT_LN_BOBYQA", "")),
      verbose = TRUE, maxfun = 1e+06, ...)

    nmkbw(fn, par, lower, upper, control)

### Arguments

`m` | a fitted model with `lmer`
`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
`verbose` | print progress messages?
`maxfun` | number of iterations to allow for the optimization rountine.
`...` | further arguments passed to `update.merMod` such as `data`.
`fn` | needed for `dfoptim::nmkb`
`par` | needed for `dfoptim::nmkb`
`lower` | needed for `dfoptim::nmkb`
`upper` | needed for `dfoptim::nmkb`
`control` | needed for `dfoptim::nmkb`

### Details

Needs packages nloptr, optimx, and `dfoptim` to try out all optimizers. optimx needs to be loaded explicitly using `library` or `require` (see examples).

`nmkbw` is a simple wrapper function for fitting models with the corresponding optimizer. It needs to be exported for `lme4`, but should not be called directly by the user.

### Value

a list of fitted `merMod` objects

### Note

code taken from https://github.com/lme4/lme4/blob/master/inst/utils/allFit.R

### Author(s)

Ben Bolker, minor changes by Henrik Singmann

### See Also

slice, slice2D in the bbmle package

### Examples

    ## Not run:

    # basic usage
    require(optimx)
    gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
                 data = cbpp, family = binomial)
    gm_all <- all_fit(gm1)
    t(sapply(gm_all,fixef)) ## extract fixed effects
    sapply(gm_all,logLik) ## log-likelihoods
    sapply(gm_all,getME,"theta") ## theta parameters
    !sapply(gm_all,inherits,"try-error") ## was fit OK?

    ## for GLMMs:
    require("mlmRev") # for data
    gm1 <- mixed(use ~ age*urban + (1 | district), family = binomial,
                 data = Contraception, method = "LRT")
    gm_all <- all_fit(gm1$full_model)
    sapply(gm_all,logLik)

    ## use allFit in combination with expand.re = TRUE
    data("sk2011.2") # see example("mixed")
    sk2_aff <- droplevels(sk2011.2[sk2011.2$what == "affirmation",])
    sk_m2 <- mixed(response ~ instruction*inference*type+(inference*type||id), sk2_aff,
                   expand_re = TRUE)
    sk_m2
    sk_m2_allFit <- all_fit(sk_m2$full_model)
    sk_m2_allFit # all fits fail

    sk_m2_allFit <- all_fit(sk_m2$full_model, data = sk_m2$data) # works
    t(sapply(sk_m2_allFit,fixef))
    sapply(sk_m2_allFit,logLik)

    ## End(Not run)

[Package afex version 0.17-8 Index]