Genomic Ensembling (GenomEn) is an ensemble framework for genotype-to-phenotype prediction that uses both linear and non-linear estimators to potentially capture gene-gene interactions often overlooked by traditional polygenic risk score (PRS) methods. For more informations on the methods, please refer to our paper.
The package enables researchers to improve predictive performance beyond conventional linear PRS approaches by modeling higher-order genetic interactions. GenomEn also natively supports variants on the X sex chromosome, which are often neglected due to integration challenges with autosomes, further improving predictive performance and simplifying the study of X-linked traits. Finally, GenomEn allows for local and global variant-level interpretability via SHAP values, allowing to gain new insights into complex traits.
Install from PyPI:
pip install genomenInstall with optional dependency groups:
# Development dependencies (black, pytest, etc.)
pip install genomen[dev]
# GPU support (CUDA 12)
pip install genomen[gpu]GenomEn also requires PLINK for some genotype computations. A Linux x86-64 binary is bundled at assets/plink and used automatically; if it doesn't work on your platform, install PLINK yourself and replace that file with your own executable.
A clean pip install genomen takes about 90 seconds on average (measured across 10 installs in a fresh virtual environment). It's mostly download-bound (lightgbm, xgboost, catboost, shap, pandas, etc.), so it'll be quicker on a faster network connection, and installing via uv (uv pip install genomen) cut this to ~16 seconds in our testing.
The repo ships a small, fully-synthetic demo dataset (see data/demo/) so you can try GenomEn right away, without your own genotype data.
Point .env at the demo files:
cp .env.template .env# in .env
FAM_PATH="data/demo/demo.fam"
BED_PATH="data/demo/demo.bed"
BIM_PATH="data/demo/demo.bim"
MASTER_PATH="data/demo/demo_master.phe"Then train and predict using the demo dataset's matching config (docs/configs/demo.yml):
import genomen.utils as utils
from genomen.data import DataSet, split
from genomen.model import GenomenModel
utils.set_config_path("docs/configs/demo.yml")
# Load and split data
dataset = DataSet()
train_set, test_set, val_set = split(dataset, split_by_col=("split", ("train", "test", "val")))
# Train model
model = GenomenModel()
model.fit(train_set, val_set)
# Make predictions
geno_preds, covar_preds, preds = model.predict(test_set)Or equivalently, run the training script directly from the command line:
python docs/scripts/train.py --cfg_path=docs/configs/demo.ymlTo use your own data, follow the getting started guide and point .env / config.yml at your own PLINK files instead.
To test GenomEn against a phenotype with known genetic/covariate architecture (instead of a real or demo trait), use docs/scripts/simulate.py. It simulates a binary or continuous phenotype from your genotype data with configurable heritability, trains a model, and reports test-set performance:
python docs/scripts/simulate.py --cfg_path=docs/configs/demo_sim.yml --task=cls # or --task=reg for a continuous traitFor detailed documentation, tutorials, and examples, please visit the official documentation site or browse the local documentation in the docs/ directory.
If you use GenomEn in your research, please cite:
@article{Thomassin2026,
title = {Biobank-scale Polygenic Risk Prediction with Nonlinear Estimators},
author = {Thomassin, Christophe and Franquesa Mon{\'e}s, Marc and Bonet, David and Gerlach, Peter A. and Comajoan Cara, Mar{\c{c}}al and Mas Montserrat, Daniel and Ioannidis, Alexander G.},
year = {2026},
url = {https://genomen-website.vercel.app/docs}
}Contributions are welcome! Please feel free to submit a Pull Request. For development setup, see the getting started guide.
This project is licensed under the Apache License 2.0. See the LICENSE file for details.
- Website: https://genomen-website.vercel.app/
- Documentation: https://genomen-website.vercel.app/docs
- Phenotype Browser: https://genomen-website.vercel.app/browser
- PyPI: https://pypi.org/project/genomen/
- GitHub: https://github.com/AI-sandbox/genomen