Learn R Programming

⚠️There's a newer version (1.0.14) of this package.Take me there.

LMMsolver

The goal of the LMMsolver package is to fit (generalized) linear mixed models efficiently when the model structure is large or sparse. It provides tools for estimating variance components using restricted maximum likelihood (REML) and is designed for models that involve many random effects or smooth terms.

A key feature of the package is support for smoothing using P-splines. LMMsolver uses a sparse formulation (Boer 2023), which makes computations fast and memory efficient, especially for two-dimensional smoothing problems such as spatial surfaces or image-like data (Boer 2023; Carollo et al. 2024).

This makes LMMsolver particularly useful for applications involving spatial or temporal smoothing, large data sets, and models where standard mixed model tools become slow or impractical.

Installation

  • Install from CRAN:
install.packages("LMMsolver")
  • Install latest development version from GitHub (requires remotes package):
remotes::install_github("Biometris/LMMsolver", ref = "develop", dependencies = TRUE)

Example

As an example of the functionality of the package we use the USprecip data set in the spam package (Furrer and Sain 2010).

library(LMMsolver)
library(ggplot2)

## Get precipitation data from spam
data(USprecip, package = "spam")

## Only use observed data.
USprecip <- as.data.frame(USprecip)
USprecip <- USprecip[USprecip$infill == 1, ]
head(USprecip[, c(1, 2, 4)], 3)
#>      lon   lat  anomaly
#> 6 -85.95 32.95 -0.84035
#> 7 -85.87 32.98 -0.65922
#> 9 -88.28 33.23 -0.28018

A two-dimensional P-spline can be defined with the spl2D() function, with longitude and latitude as covariates, and anomaly (standardized monthly total precipitation) as response variable:

obj1 <- LMMsolve(fixed = anomaly ~ 1,
                 spline = ~spl2D(x1 = lon, x2 = lat, nseg = c(41, 41)),
                 data = USprecip)

The spatial trend for the precipitation can now be plotted on the map of the USA, using the predict function of LMMsolver:

newdat <- makeGrid(obj1, grid = c(200, 300))
plotDat <- predict(obj1, newdata = newdat)

plotDat <- sf::st_as_sf(plotDat, coords = c("lon", "lat"))
usa <- sf::st_as_sf(maps::map("usa", regions = "main", plot = FALSE))
sf::st_crs(usa) <- sf::st_crs(plotDat)
intersection <- sf::st_intersects(plotDat, usa)
plotDat <- plotDat[!is.na(as.numeric(intersection)), ]

ggplot(usa) + 
  geom_sf(color = NA) +
  geom_tile(data = plotDat, 
            mapping = aes(geometry = geometry, fill = ypred), 
            linewidth = 0,
            stat = "sf_coordinates") +
  scale_fill_gradientn(colors = topo.colors(100))+
  labs(title = "Precipitation (anomaly)", 
       x = "Longitude", y = "Latitude") +
  coord_sf() +
  theme(panel.grid = element_blank())

Further examples can be found in the vignette.

vignette("Solving_Linear_Mixed_Models")

References

Boer, Martin P. 2023. “Tensor Product P-Splines Using a Sparse Mixed Model Formulation.” Statistical Modelling 23 (5-6): 465–79. https://doi.org/10.1177/1471082X231178591.

Carollo, Angela, Paul Eilers, Hein Putter, and Jutta Gampe. 2024. “Smooth Hazards with Multiple Time Scales.” Statistics in Medicine. https://doi.org/10.1002/sim.10297.

Furrer, R, and SR Sain. 2010. “spam: A sparse matrix R package with emphasis on MCMC methods for Gaussian Markov random fields.” J. Stat. Softw. https://doi.org/10.18637/jss.v036.i10.

Copy Link

Version

Install

install.packages('LMMsolver')

Monthly Downloads

1,228

Version

1.0.13

License

GPL-3

Issues

Pull Requests

Stars

Forks

Maintainer

Bart-Jan van Rossum

Last Published

May 29th, 2026

Functions in LMMsolver (1.0.13)

oats.data

Alpha lattice design of spring oats
predict.LMMsolve

Predict function
spl1D

Fit P-splines
residuals.LMMsolve

Residuals of an LMMsolve object.
multinomial

Family Object for Multinomial Model
mLogLik

Function to obtain restricted log-likelihood and the first derivatives of the log-likelihood, given values for the penalty parameters
multipop

Simulated QTL mapping data set
summary.LMMsolve

Summarize Linear Mixed Model fits
makeGrid

Create a data frame for use in making predictions.
RowKronecker

Row-wise kronecker product
effDim

Function to get the Effective Dimensions.
displayMME

Display the sparseness of the mixed model coefficient matrix
LMMsolveObject

Fitted LMMsolve Object
diagnosticsMME

Give diagnostics for mixed model coefficient matrix C and the cholesky decomposition
as.ginverse

Construct a ginverse Object from Precision Matrices
deviance.LMMsolve

Deviance of an LMMsolve object
LMMsolve

Solve Linear Mixed Models
coef.LMMsolve

Coefficients from the mixed model equations of an LMMsolve object.
calcStandardErrors

Standard errors for predictions
Bsplines

Construct design matrix for B-Splines
LMMsolver

Package LMMsolver
barley.uniformity.trial

Uniformity trial of barley
ADchol

construct object for Automated Differentiation Cholesky decomposition
PsplinesKnots

Construct equally placed knots
SeaSurfaceTemp

Sea Surface Temperature
constructRinv

Helper function for constructing Rinv
APSIMdat

Simulated Biomass as function of time using APSIM wheat.
fitted.LMMsolve

Fitted values of an LMMsolve object.
logLik.LMMsolve

Log-likelihood of an LMMsolve object
obtainSmoothTrend

Obtain Smooth Trend.
getHeritability

Generalized heritability of a random term