MarcoThiel/ MMAMixedEffects

(1.2.1) current version: 1.2.4 »

Native Gaussian, generalized, and nonlinear mixed-effects models for Wolfram Language

Contributed by: Marco Thiel

MMAMixedEffects extends the fitted-model workflow familiar from LinearModelFit and GeneralizedLinearModelFit to clustered, longitudinal, nested, and crossed data. Models use ordinary Wolfram expressions rather than R-style formulas, and fitted objects expose Wolfram-style properties and prediction by function application. No R, Python, cloud account, server, or API is required for fitting.

Installation Instructions

To install this paclet in your Wolfram Language environment, evaluate this code:
PacletInstall["MarcoThiel/MMAMixedEffects"]


To load the code after installation, evaluate this code:
Needs["MarcoThiel`MMAMixedEffects`"]

Details

Fit Gaussian linear mixed models by ML or REML, generalized mixed models by Laplace or adaptive Gauss-Hermite quadrature, and nonlinear mixed models from symbolic Wolfram expressions.
Random-effect specifications support correlated or independent random slopes, multiple crossed factors, and explicit nested grouping. Gaussian models additionally support residual correlation structures, heteroscedastic variance functions, weights, offsets, missing-row auditing, and Satterthwaite or Kenward-Roger inference.
The release includes 275 focused Wolfram verification tests plus live reference comparisons with lme4, nlme, glmmTMB, lmerTest, pbkrtest, and statsmodels. External languages are optional validation tools and are never called by a fitting function.
The installed guide and six reference pages document usage syntax, detailed behavior, fitted-model properties, diagnostics, applications, and evaluated examples.

Paclet Guide

Examples

Basic Examples (1) 

Fit repeated measurements with a patient random intercept using ordinary Wolfram expressions:

In[1]:=
\!\(
TagBox[
RowBox[{
RowBox[{"patientData", "=", 
RowBox[{"Flatten", "[", 
RowBox[{
RowBox[{"Table", "[", 
RowBox[{
RowBox[{"Table", "[", 
RowBox[{
RowBox[{"{", 
RowBox[{
RowBox[{"N", "[", "t", "]"}], ",", 
RowBox[{"\"\<P\>\"", "<>", 
RowBox[{"ToString", "[", "i", "]"}]}], ",", 
RowBox[{"10.`", " ", "+", 
RowBox[{"0.35`", " ", "t"}], "+", 
RowBox[{"1.2`", " ", 
RowBox[{"Sin", "[", "i", "]"}]}], "+", 
RowBox[{"0.15`", " ", 
RowBox[{"Cos", "[", 
RowBox[{"t", "+", "i"}], "]"}]}]}]}], "}"}], ",", 
RowBox[{"{", 
RowBox[{"t", ",", "0", ",", "4"}], "}"}]}], "]"}], ",", 
RowBox[{"{", 
RowBox[{"i", ",", "1", ",", "8"}], "}"}]}], "]"}], ",", "1"}], "]"}]}], ";", 
RowBox[{"fit", "=", 
RowBox[{"InterpretationBox[FrameBox[TagBox[TooltipBox[PaneBox[GridBox[List[List[GraphicsBox[List[Thickness[0.0025`], List[FaceForm[List[RGBColor[0.9607843137254902`, 0.5058823529411764`, 0.19607843137254902`], Opacity[1.`]]], FilledCurveBox[List[List[List[0, 2, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0]], List[List[0, 2, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0]], List[List[0, 2, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0]], List[List[0, 2, 0], List[1, 3, 3], List[0, 1, 0], List[1, 3, 3], List[0, 1, 0], List[1, 3, 3], List[0, 1, 0], List[1, 3, 3], List[1, 3, 3], List[0, 1, 0], List[1, 3, 3], List[0, 1, 0], List[1, 3, 3]]], List[List[List[205.`, 22.863691329956055`], List[205.`, 212.31669425964355`], List[246.01799774169922`, 235.99870109558105`], List[369.0710144042969`, 307.0436840057373`], List[369.0710144042969`, 117.59068870544434`], List[205.`, 22.863691329956055`]], List[List[30.928985595703125`, 307.0436840057373`], List[153.98200225830078`, 235.99870109558105`], List[195.`, 212.31669425964355`], List[195.`, 22.863691329956055`], List[30.928985595703125`, 117.59068870544434`], List[30.928985595703125`, 307.0436840057373`]], List[List[200.`, 410.42970085144043`], List[364.0710144042969`, 315.7036876678467`], List[241.01799774169922`, 244.65868949890137`], List[200.`, 220.97669792175293`], List[158.98200225830078`, 244.65868949890137`], List[35.928985595703125`, 315.7036876678467`], List[200.`, 410.42970085144043`]], List[List[376.5710144042969`, 320.03370475769043`], List[202.5`, 420.53370475769043`], List[200.95300006866455`, 421.42667961120605`], List[199.04699993133545`, 421.42667961120605`], List[197.5`, 420.53370475769043`], List[23.428985595703125`, 320.03370475769043`], List[21.882003784179688`, 319.1406993865967`], List[20.928985595703125`, 317.4896984100342`], List[20.928985595703125`, 315.7036876678467`], List[20.928985595703125`, 114.70369529724121`], List[20.928985595703125`, 112.91769218444824`], List[21.882003784179688`, 111.26669120788574`], List[23.428985595703125`, 110.37369346618652`], List[197.5`, 9.87369155883789`], List[198.27300024032593`, 9.426692008972168`], List[199.13700008392334`, 9.203690528869629`], List[200.`, 9.203690528869629`], List[200.86299991607666`, 9.203690528869629`], List[201.72699999809265`, 9.426692008972168`], List[202.5`, 9.87369155883789`], List[376.5710144042969`, 110.37369346618652`], List[378.1179962158203`, 111.26669120788574`], List[379.0710144042969`, 112.91769218444824`], List[379.0710144042969`, 114.70369529724121`], List[379.0710144042969`, 315.7036876678467`], List[379.0710144042969`, 317.4896984100342`], List[378.1179962158203`, 319.1406993865967`], List[376.5710144042969`, 320.03370475769043`]]]]], List[FaceForm[List[RGBColor[0.5529411764705883`, 0.6745098039215687`, 0.8117647058823529`], Opacity[1.`]]], FilledCurveBox[List[List[List[0, 2, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0]]], List[List[List[44.92900085449219`, 282.59088134765625`], List[181.00001525878906`, 204.0298843383789`], List[181.00001525878906`, 46.90887451171875`], List[44.92900085449219`, 125.46986389160156`], List[44.92900085449219`, 282.59088134765625`]]]]], List[FaceForm[List[RGBColor[0.6627450980392157`, 0.803921568627451`, 0.5686274509803921`], Opacity[1.`]]], FilledCurveBox[List[List[List[0, 2, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0]]], List[List[List[355.0710144042969`, 282.59088134765625`], List[355.0710144042969`, 125.46986389160156`], List[219.`, 46.90887451171875`], List[219.`, 204.0298843383789`], List[355.0710144042969`, 282.59088134765625`]]]]], List[FaceForm[List[RGBColor[0.6901960784313725`, 0.5882352941176471`, 0.8117647058823529`], Opacity[1.`]]], FilledCurveBox[List[List[List[0, 2, 0], List[0, 1, 0], List[0, 1, 0], List[0, 1, 0]]], List[List[List[200.`, 394.0606994628906`], List[336.0710144042969`, 315.4997024536133`], List[200.`, 236.93968200683594`], List[63.928985595703125`, 315.4997024536133`], List[200.`, 394.0606994628906`]]]]]], List[Rule[BaselinePosition, Scaled[0.15`]], Rule[ImageSize, 10], Rule[ImageSize, 15]]], StyleBox[RowBox[List["MixedEffectsModelFit", " "]], Rule[ShowAutoStyles, False], Rule[ShowStringCharacters, False], Rule[FontSize, Times[0.9`, Inherited]], Rule[FontColor, GrayLevel[0.1`]]]]], Rule[GridBoxSpacings, List[Rule["Columns", List[List[0.25`]]]]]], Rule[Alignment, List[Left, Baseline]], Rule[BaselinePosition, Baseline], Rule[FrameMargins, List[List[3, 0], List[0, 0]]], Rule[BaseStyle, List[Rule[LineSpacing, List[0, 0]], Rule[LineBreakWithin, False]]]], RowBox[List["PacletSymbol", "[", RowBox[List["\"MarcoThiel/MMAMixedEffects\"", ",", "\"MarcoThiel`MMAMixedEffects`MixedEffectsModelFit\""]], "]"]], Rule[TooltipStyle, List[Rule[ShowAutoStyles, True], Rule[ShowStringCharacters, True]]]], Function[Annotation[Slot[1], Style[Defer[PacletSymbol["MarcoThiel/MMAMixedEffects", "MarcoThiel`MMAMixedEffects`MixedEffectsModelFit"]], Rule[ShowStringCharacters, True]], "Tooltip"]]], Rule[Background, RGBColor[0.968`, 0.976`, 0.984`]], Rule[BaselinePosition, Baseline], Rule[DefaultBaseStyle, List[]], Rule[FrameMargins, List[List[0, 0], List[1, 1]]], Rule[FrameStyle, RGBColor[0.831`, 0.847`, 0.85`]], Rule[RoundingRadius, 4]], PacletSymbol["MarcoThiel/MMAMixedEffects", "MarcoThiel`MMAMixedEffects`MixedEffectsModelFit"], Rule[Selectable, False], Rule[SelectWithContents, True], Rule[BoxID, "PacletSymbolBox"]]", "[", 
RowBox[{"patientData", ",", 
RowBox[{"{", 
RowBox[{"1", ",", "time"}], "}"}], ",", 
RowBox[{"{", 
RowBox[{
RowBox[{"{", "1", "}"}], ",", "patient"}], "}"}], ",", 
RowBox[{"{", 
RowBox[{"time", ",", "patient"}], "}"}], ",", 
RowBox[{"Method", "->", "\"\<REML\>\""}]}], "]"}]}], ";", 
RowBox[{"fit", "[", 
RowBox[{"{", 
RowBox[{"\"\<FixedEffects\>\"", ",", "\"\<ResidualVariance\>\"", ",", "\"\<Converged\>\""}], "}"}], "]"}]}],
HoldForm]\)
Out[1]=

Nested and crossed designs (1) 

A list of random specifications adds grouping factors; NestedGrouping makes a hierarchy explicit:

Generalized and nonlinear models (1) 

Use an explicit response family for events or counts, or give a symbolic nonlinear mean expression and starting values:

Inspect fit["ConvergenceReport"], fit["SingularFit"], fit["Warnings"], the grouping levels, residual structure, and prediction target before interpreting a result.

Publisher

Marco Thiel

Compatibility

Wolfram Language Version 13.0

Version History

  • 1.2.4 – 07 August 2026
  • 1.2.2 – 05 August 2026
  • 1.2.1 – 05 August 2026

License Information

MIT License

Paclet Source