Bioinformatics
AfriPharmaGen Catalog
Curated pharmacogenomic data and reproducible analyses for sub-Saharan African populations.
Sources for the numbers on this page: Dataset on Zenodo; Repository README.
Problem
Pharmacogenomic reference resources are built mostly on European and East Asian cohorts, so star-allele frequencies and calling behavior for sub-Saharan African populations are underdescribed. This gap carries directly into drug-prescribing decisions for genes like CYP2D6, CYP2B6, and CYP3A5, where African-specific alleles occur at clinically meaningful frequencies.
A concrete example sits at the tooling layer. PharmCAT v3.4.0 cannot produce any CYP2D6 diplotype call from standard variant-only whole-genome VCFs, returning Unknown for all 661 African samples tested. This is a documented architectural limitation, and before this catalog no prior study had quantified it in terms of African-specific allele carrier counts.
How it works
The repository ships two things together: a machine-readable allele catalog and a set of reproducible analysis modules driven by a single top-level pipeline. Every analysis resolves its data paths relative to the repo root, so the pipeline runs from any working directory. Dependencies are pinned and installed into a local venv with uv, and the full workflow runs with one command.
data/ (alleles JSON + 661-sample metadata) --> run_analyses.py
--> [catalog validation] --> [frequency estimation] --> [HWE test]
--> [gradient plots] --> [optional PharmCAT concordance] --> analyses/*/results/- A catalog of 10 clinically actionable alleles across 6 genes, with African-specific frequency ranges, functional annotations, CPIC activity scores, evidence levels, source PMIDs, and PharmVar cross-references.
- Population metadata for 661 samples across seven 1000 Genomes African populations (YRI, LWK, GWD, MSL, ESN, ACB, ASW).
- Star-allele calls for all 661 samples across 10 genes (6,610 results).
- Per-population frequency estimation, a Hardy-Weinberg chi-squared test with Bonferroni correction, and gradient plots.
- A concordance module that parses PharmCAT JSON reports and the catalog output into a per-allele carrier comparison.
Hard parts
- Recovered CYP2D6 calls PharmCAT cannot make. A reduced-position matching strategy needs only the 1-2 core defining variants per allele, which are polymorphic and present in standard VCFs. From the same input it identifies 243 CYP2D6*17 carriers and 134 CYP2D6*29 carriers where PharmCAT returns no call for all 661 samples.
- Estimated frequencies for multi-variant haplotype alleles from statistically phased haplotypes. Estimated CYP3A5*1 indirectly as 1 minus the frequency of CYP3A5*3.
- Reported 95% Wilson score confidence intervals for each population alongside the point frequencies.
- Tested Hardy-Weinberg equilibrium with a chi-squared test and Bonferroni correction.
- Recorded where the catalog is weaker as well as stronger: for CYP3A5, PharmCAT correctly identifies 65 CYP3A5*7 non-expressers the current catalog misses.
Results
- 661 African samples across seven populations, 10 genes, 6,610 star-allele results.
- 243 CYP2D6*17 and 134 CYP2D6*29 carriers recovered from variant-only VCFs where PharmCAT makes 0 CYP2D6 calls.
- Per-gene concordance with PharmCAT: CYP2C19*9 100%, NAT2*14 99.2%, CYP2B6*18 99.0%, CYP2C9*8 97.2%, CYP2B6*6 95.3%, CYP3A5*1 88.9%.
- Three alleles show inter-population frequency gradients above 10 percentage points: CYP3A5*1 (19.3pp), CYP2D6*17 (13.5pp), CYP2D6*29 (13.1pp).
- The full pipeline reproduces from a clean checkout with three pinned dependencies and no additional packages.
Artifacts
- Open dataset published on Zenodo under an MIT license.
- GitHub repository with the catalog, pipeline, and analysis modules.
- Machine-readable allele catalog and 661-sample benchmark file.
- Per-population frequency tables with Wilson confidence intervals and gradient figures.
- PharmCAT concordance outputs plus per-module READMEs documenting method and reproduction steps.