SNPgen: Phenotype-Supervised Genotype Representation and Synthetic Data Generation via Latent Diffusion
Organizations: DEIB, Politecnico di Milano, Milan 20133, Italy · Health Data Science Centre, Human Technopole, Milan 20157, Italy · Genomics Research Centre, Human Technopole, Milan 20157, Italy · MOX - Department of Mathematics, Politecnico di Milano, Milan 20133, Italy ·
Abstract
Polygenic risk scores and other genomic analyses require large individual-level genotype datasets, yet strict data access restrictions impede sharing. Synthetic genotype generation offers a privacy-preserving alternative, but most existing methods operate unconditionally, producing samples without phenotype alignment, or rely on unsupervised compression, creating a gap between statistical fidelity and downstream task utility. We present SNPgen, a two-stage conditional latent diffusion framework for generating phenotype-supervised synthetic genotypes. SNPgen combines GWAS-guided variant selection (1,024-2,048 trait-associated SNPs) with a variational autoencoder for genotype compression and a latent diffusion model conditioned on binary disease labels via classifier-free guidance. Evaluated on 458,724 UK Biobank individuals across four complex diseases (coronary artery disease, breast cancer, type 1 and type 2 diabetes), models trained on synthetic data matched real-data predictive performance in a train-on-synthetic, test-on-real protocol, approaching genome-wide PRS methods that use - more variants. Privacy analysis confirmed zero identical matches, near-random membership inference (AUC ), preserved linkage disequilibrium structure, and high allele frequency correlation () with source data. A controlled simulation with known causal effects verified faithful recovery of the imposed genetic association structure.
Figures & tables
| Trait | PRSice-2 | LDpred2 | SNPgen |
|---|---|---|---|
| (best config) | (auto) | (best XGB) | |
| CAD | 0.606 | 0.539 | 0.594 |
| BC | 0.636 | 0.661 | 0.598 |
| T1D | 0.628 | 0.559 | 0.671 |
| T2D | 0.599 | 0.628 | 0.593 |
| Trait | Condition | IMR (%) | NNDR | MI AUC | NNAA | DCR <5% (%) | MAF |
|---|---|---|---|---|---|---|---|
| CAD | Reconstructed | 0.0 | 0.263 | 1.000 | 0.468 | 100.0 | 0.989 |
| Synthetic | 0.0 | 0.983 | 0.500 | 0.537 | 3.5 | 0.988 | |
| BC | Reconstructed | 0.0 | 0.984 | 0.856 | 0.507 | 73.7 | 0.950 |
| Synthetic | 0.0 | 0.990 | 0.501 | 0.507 | 46.3 | 0.951 | |
| T1D | Reconstructed | 0.0 | 0.247 | 0.979 | 0.460 | 86.3 | 1.000 |
| Synthetic | 0.0 | 0.934 | 0.503 | 0.572 | 2.3 | 0.999 |
Appendix figures & tables18 assets
Supplementary material from the paper’s appendix.
Appendix
| Trait | Cases | Controls | Sample prev. (%) | Pop. prev. (%) | |
|---|---|---|---|---|---|
| BC | 248,987 | 19,634 | 229,353 | 7.9 | 12.0 |
| CAD | 458,724 | 35,306 | 423,418 | 7.7 | 6.0 |
| T1D | 458,724 | 4,593 | 454,131 | 1.0 | 0.4 |
| T2D | 458,724 | 38,541 | 420,183 | 8.4 | 8.0 |
| Trait | GWAS source | Clumping window | threshold | Final |
|---|---|---|---|---|
| CAD | Nikpay et al. (2015) | 10 kb | 0.5 | 2,048 |
| BC | Zhang et al. (2020) | 500 kb | 0.1 | 1,024 |
| T1D | Michalek et al. (2024) | 10 kb | 0.5 | 2,048 |
| T2D | Scott et al. (2017) | 10 kb | 0.5 | 2,048 |
| Trait | Condition | XGBoost | XGBoost (Balanced) | PRS Univariate |
|---|---|---|---|---|
| Simulated | Real | 0.967 0.002 | 0.975 0.002 | 0.903 0.006 |
| Reconstructed | 0.960 0.003 | 0.967 0.003 | 0.898 0.007 | |
| Synthetic | 0.902 0.012 | 0.897 0.006 | 0.849 0.008 | |
| Syn Augmented | 0.905 0.011 | 0.898 0.006 | 0.849 0.008 | |
| CAD | Real | 0.592 0.031 | 0.601 0.009 | 0.575 0.014 |
| Reconstructed | 0.559 0.036 | 0.578 0.014 | 0.566 0.019 |
| Config | N SNPs | AUC (PRS Only) | AUC (Age+Sex) | AUC (Age+Sex+PRS) | AUC | |
|---|---|---|---|---|---|---|
| 10 kb / 0.1 | 19,867 | 0.587 | 0.713 | 0.709 | 0.004 | 0.052 |
| 10 kb / 0.5 | 23,517 | 0.587 | 0.713 | 0.708 | 0.004 | 0.052 |
| 50 kb / 0.1 | 3,878 | 0.593 | 0.713 | 0.710 | 0.003 | 0.060 |
| 50 kb / 0.5 | 5,706 | 0.596 | 0.713 | 0.711 | 0.002 | 0.064 |
| 100 kb / 0.1 | 1,724 | 0.596 | 0.713 | 0.711 | 0.002 | 0.065 |
| 100 kb / 0.5 | 4,954 | 0.602 | 0.713 | 0.713 | 0.000 | 0.072 |
| Config | N SNPs | AUC (PRS Only) | AUC (Age+Sex) | AUC (Age+Sex+PRS) | AUC | |
|---|---|---|---|---|---|---|
| 10 kb / 0.1 | 110,465 | 0.595 | 0.581 | 0.626 | +0.045 | 0.077 |
| 10 kb / 0.5 | 109,954 | 0.600 | 0.581 | 0.629 | +0.048 | 0.084 |
| 50 kb / 0.1 | 617 | 0.604 | 0.581 | 0.632 | +0.051 | 0.089 |
| 50 kb / 0.5 | 15,193 | 0.613 | 0.581 | 0.639 | +0.058 | 0.107 |
| 100 kb / 0.1 | 458 | 0.613 | 0.581 | 0.639 | +0.058 | 0.108 |
| 100 kb / 0.5 | 9,493 | 0.623 | 0.581 | 0.647 | +0.066 | 0.127 |
| Config | N SNPs | AUC (PRS Only) | AUC (Age+Sex) | AUC (Age+Sex+PRS) | AUC | |
|---|---|---|---|---|---|---|
| 10 kb / 0.1 | 1,040 | 0.616 | 0.586 | 0.643 | +0.057 | 0.201 |
| 10 kb / 0.5 | 1,632 | 0.623 | 0.586 | 0.648 | +0.062 | 0.230 |
| 50 kb / 0.1 | 356 | 0.619 | 0.586 | 0.645 | +0.060 | 0.223 |
| 50 kb / 0.5 | 799 | 0.625 | 0.586 | 0.650 | +0.064 | 0.248 |
| 100 kb / 0.1 | 234 | 0.623 | 0.586 | 0.649 | +0.063 | 0.246 |
| 100 kb / 0.5 | 646 | 0.626 | 0.586 | 0.652 | +0.066 | 0.261 |
| Config | N SNPs | AUC (PRS Only) | AUC (Age+Sex) | AUC (Age+Sex+PRS) | AUC | |
|---|---|---|---|---|---|---|
| 10 kb / 0.1 | 133,010 | 0.590 | 0.619 | 0.639 | +0.020 | 0.056 |
| 10 kb / 0.5 | 156,002 | 0.593 | 0.619 | 0.641 | +0.022 | 0.060 |
| 50 kb / 0.1 | 1,383 | 0.589 | 0.619 | 0.638 | +0.019 | 0.056 |
| 50 kb / 0.5 | 20,591 | 0.597 | 0.619 | 0.643 | +0.024 | 0.064 |
| 100 kb / 0.1 | 1,137 | 0.589 | 0.619 | 0.638 | +0.019 | 0.056 |
| 100 kb / 0.5 | 5,007 | 0.597 | 0.619 | 0.643 | +0.024 | 0.066 |
| Trait | Cases | OR/SD | AUC (PRS Only) | AUC (A+S) | AUC (A+S+PRS) | AUC | AUC (Full) | AUC (Full+PRS) | PR-AUC | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| BC | 248,987 | 19,634 | 1.822 | 0.661 | 0.581 | 0.679 | 0.098 | 0.582 | 0.679 | 0.221 | 0.147 |
| CAD | 458,724 | 35,306 | 1.165 | 0.539 | 0.713 | 0.705 | 0.007 | 0.708 | 0.708 | 0.012 | 0.089 |
| T1D | 458,724 | 4,593 | 1.235 | 0.559 | 0.586 | 0.599 | 0.013 | 0.584 | 0.602 | 0.046 | 0.013 |
| T2D | 458,724 | 38,541 | 1.602 | 0.628 | 0.619 | 0.665 | 0.046 | 0.621 | 0.671 | 0.115 | 0.134 |
| Trait | Condition | Class | NNDR | MI AUC | NNAA | DCR <5% (%) | MAF |
|---|---|---|---|---|---|---|---|
| Simulated | Reconstructed | Controls | 0.260 | 1.000 | 0.438 | 100.0 | 0.989 |
| Cases | 0.260 | 1.000 | 0.334 | 100.0 | 0.989 | ||
| Synthetic | Controls | 0.982 | 0.502 | 0.583 | 5.3 | 0.979 | |
| Cases | 0.983 | 0.502 | 0.546 | 34.5 | 0.984 | ||
| CAD | Reconstructed | Controls | 0.262 | 1.000 | 0.464 | 100.0 | 0.989 |
| Cases | 0.249 | 1.000 | 0.000 | 100.0 | 0.989 |
| Trait | Dataset | Same-chrom. pairs (%) | Missing (%) | Spearman |
|---|---|---|---|---|
| CAD | Original | 6.7 | 0.0 | 0.602 |
| Reconstructed | 6.7 | 0.9 | 0.638 | |
| Synthetic | 6.7 | 0.5 | 0.642 | |
| BC | Original | 6.1 | 0.0 | 0.395 |
| Reconstructed | 6.1 | 17.2 | 0.140 | |
| Synthetic | 6.1 | 0.8 | 0.096 |
Synthetic Data Generation
Synthetic data generation creates artificial examples, simulations, and datasets to train, test, or protect machine-learning systems.
See all 625 papers