Back to projects

Bioinformatics

AfriPharmaGen Catalog

Curated pharmacogenomic data and reproducible analyses for sub-Saharan African populations.

PythonNumPySciPymatplotlibuv1000 GenomesPharmVarPharmCATZenodo

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.
Back to projects