Parallelize 'lme4' functions
Henrik Bengtsson
Source:vignettes/futurize-81-lme4.md
futurize-81-lme4.Rmd+
=

The futurize package allows you to easily turn
sequential code into parallel code by piping the sequential code to the
futurize() function. Easy!
Introduction
This vignette demonstrates how to use this approach to parallelize
lme4
functions such as allFit() and bootMer().
The lme4 package
fits linear and generalized linear mixed-effects models. Its
allFit() function fits models using all available
optimizers to check for convergence issues, and bootMer()
performs parametric bootstrap inference. Both are excellent candidates
for parallelization.
Example: Fitting with multiple optimizers
The allFit() function fits a model with each available
optimizer, which can be done in parallel:
library(lme4)
## Fit a generalized linear mixed model
gm <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
data = cbpp, family = binomial)
## Try all available optimizers
gm_all <- allFit(gm)Here allFit() evaluates sequentially, but we can easily
make it evaluate in parallel by piping to futurize():
library(futurize)
library(lme4)
gm <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
data = cbpp, family = binomial)
gm_all <- allFit(gm) |> futurize()This will distribute the optimizer fits across the available parallel workers, given that we have set up parallel workers, e.g.
plan(multisession)The built-in multisession backend parallelizes on your
local computer and works on all operating systems. There are other parallel
backends to choose from, including alternatives to parallelize
locally as well as distributed across remote machines, e.g.
plan(future.mirai::mirai_multisession)and
plan(future.batchtools::batchtools_slurm)Example: Parametric bootstrap
The bootMer() function performs parametric bootstrap
inference on fitted models: