nicolynnvila/splicing_epistasis_okgp_test
Splicing epistasis — 1000 Genomes matched-arms test set End-to-end reproducibility test set for the splicing-epistasis paper (Lynn et al., Genome Medicine, in preparation). 28,642 cis-double SNV pairs from a 138-gene cancer panel, matched in two arms (observed in 1000 Genomes vs. matched unobserved control). Test purpose This dataset exists to validate the engine-inference layer of the paper's pipeline. The 4-engine splice-prediction ensemble (Pangolin… See the full description on the dataset page: https://huggingface.co/datasets/nicolynnvila/splicing_epistasis_okgp_test.
Splicing epistasis — 1000 Genomes matched-arms test set
End-to-end reproducibility test set for the splicing-epistasis paper (Lynn et al., Genome Medicine, in preparation). 28,642 cis-double SNV pairs from a 138-gene cancer panel, matched in two arms (observed in 1000 Genomes vs. matched unobserved control).
Test purpose
This dataset exists to validate the engine-inference layer of the paper's pipeline. The 4-engine splice-prediction ensemble (Pangolin, SpliceAI-PyTorch, Spliceformer, OpenSpliceAI) was originally scored on a private compute cluster; this test set lets anyone re-score it on portable infrastructure (e.g. Modal, RunPod, or local GPU) and compare against the ground-truth predictions.
Composition
- n = 28,642 pairs
- arms: 14,321 observed (both variants co-occur in ≥ 1 1KG individual) + 14,321 matched unobserved (both variants exist individually in 1KG but never together; 1:1 matched on gene, log-rarity bin, and inter-variant distance ± 2 nt)
- panel: 132 genes (of a 138-gene cancer panel; 6 genes had no scoreable pair)
- distance: 1–100 nt (within-gene, intra-intron-window)
Files
inputs.parquet— the 28,642 pairs with constituent variants, distance, gene, intron positions, and ClinVar metadata. This is the input you score.
Columns (inputs)
Quick start
from datasets import load_dataset
ds = load_dataset("YOUR_USERNAME/splicing_epistasis_okgp_test")
df = ds["train"].to_pandas()
print(df.head())
print(f"{len(df):,} pairs, {df.arm.value_counts().to_dict()}")Scoring contract
A scorer (any splice-prediction engine) should consume the input pairs and produce, per pair:
psi_ref— reference PSI at the focal junctionpsi_event— predicted PSI under the cis-double (mut1 + mut2 in cis)psi_mut1,psi_mut2— predicted PSI under each single variant alonepsi_expected=psi_mut1 + psi_mut2 - psi_ref(additive null)psi_residual=psi_event - psi_expected(the epistatic signal)
The paper uses |psi_residual| ≥ 0.10 as the call threshold under a 1-of-4 ensemble rule (any one of 4 engines passing).
Paper reproduction target
For a successful end-to-end test, scoring this 28k set with OpenSpliceAI should reproduce the psi_residual_openspliceai column from the paper's bundled master parquet within numerical tolerance.
Citation
@article{lynn2026splicing,
title = {Splicing-context epistasis identifies cis-double variants with
joint splice-disrupting effects across health and cancer},
author = {Lynn, Nicolas A. and ... and Pe'er, Itsik},
journal = {Genome Medicine},
year = {2026}
}Source code + full pipeline
Project repository (in progress): https://github.com/nicolaslynn/splicing_epistasis
