Skip to main content

pyreml

pyreml is a general-purpose linear mixed model solver. It fits linear mixed models for a wide range of applications: quantitative genetics, spatial statistics, health sciences, among others.

Models are fitted by direct differentiation of the Restricted Maximum Likelihood (REML), using PyTorch for variance parameter estimation. It benefits from PyTorch parallelization and GPU acceleration.

Installation

Install pyreml with pip:

pip install pyreml

Main concepts

pyreml decomposes each random effect $\mathbf{a}$ (and the residual) with a Kronecker product:

$$ \mathbf{a} \sim \mathcal{N}(\mathbf{0}, \mathbf{G_a}), \qquad \mathbf{G_a} = \mathbf{\Sigma_a} \otimes \mathbf{K_a}, $$

where:

  • $\mathbf{\Sigma_a}$ is the left-hand factor, i.e. the covariance across the components of the effect

  • $\mathbf{K_a}$ is the right-hand factor, i.e. the covariance across its levels.

The two factors are set independently, through left_hand and right_hand arguments of the Random and Residual objects.

The philosophy behind this parameterization is to provide a simple, flexible and unified framework for a large variety of use cases.

pyreml natively supports multivariate (multiple response) analysis, random regression and heteroscedasticity specification using patsy idiom. Factor-analysis, i.e. the direct estimation of principal components of large $\mathbf{\Sigma_a}$, is also available.

pyreml also enables prediction of unobserved levels of a structured random effect, for instance in this geospatial analysis:

Kriging

Illustrative example

As an illustrative example, let's realize the genetic analysis of the larix dataset, using the genetic helpers provided by pyreml. This model provides a heteroscedastic structure to the residuals.

from pprint import pprint
from pyreml import (
    MixedModel,
    Random,
    Residual,
    A_pedigree,
    prepare_pedigree,
    larix as df,
)

df = df[df["year"] == 2000].copy()
ped = prepare_pedigree(df[["ID","SIRE","DAM"]])
K = A_pedigree(ped)

model = MixedModel.from_dataframe(
    data     = df,
    response = "height",
    fixed    = "1 + C(BLOC)",
    random   = Random(
        formula      = "1",
        unit         = "ID",
        right_hand   = "str",
        covariance   = K,
        matrix_index = ped["id"].tolist(),
    ),
    residual = Residual(
        right_hand = "het",
        het_formula = "1 + C(BLOC)",
    ),
    device = "cuda",
)

model.fit()

pprint(model.estimates)
pprint(model.random[0].variance)
pprint(model.residual.variance)
model.random[0].table.head()

Documentation

The documentation is available at this address.

Citation

Please cite this package as:

Marchal, A., & Raimondi, D. (2026). pyreml - general-purpose linear mixed model solver [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.21394319

Code

The code is available at this address.

License

Copyright © 2026 CNRS, University of Montpellier

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Metadata

Release files for pyreml 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyreml 0.3.0
File Size Uploaded
pyreml-0.3.0.tar.gz 68.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyreml 0.3.0
File Interpreter ABI Platform
pyreml-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 123.0 kB

Release files / pyreml-0.3.0.tar.gz

Download URL pyreml-0.3.0.tar.gz
Size 68.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d07925969ae5260c1ecffedc21d226a681227da984701bef7dd32d117842f15b
BLAKE2b-256 checksum
How to use checksums
9f9bbbf85b2aef95506bbe6547227cbe3a034dcefa031e2c693be12672bfa2df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.

Transparency log

Release files / pyreml-0.3.0-py3-none-any.whl

Download URL pyreml-0.3.0-py3-none-any.whl
Size 54.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
afbd455d24a4a0b95cde44fd032126d38467d13533c95ea0a28ef8f0704ceaa1
BLAKE2b-256 checksum
How to use checksums
5fb4ee34a7f9c7f5b302ec50c28af6f2344de07df841554fb701141187f053aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page