Abstract
gap difference -0.0344 log10 AF (ABCA4 - ACTB); bootstrap one-sided p = 0.623
We asked whether the population allele-frequency gap between ClinVar pathogenic/likely-pathogenic and benign/likely-benign variants is larger for ABCA4 than for a comparable housekeeping gene. Using gnomAD v4 (gnomad_r4) population allele frequencies (AF) joined at genomic-locus granularity to ClinVar clinical-significance records, we measured each gene's "gap" as the log10-fold separation between the median AF of the benign group and the median AF of the pathogenic group. The observed gap was 0.135 log10 AF for ABCA4 and 0.170 log10 AF for the housekeeping gene ACTB, i.e. an observed gap difference of -0.0344 log10 AF (ABCA4 minus ACTB): ABCA4's gap was not larger, and a fixed-seed bootstrap (10,000 replicates) gave a one-sided p = 0.623 for the hypothesis that ABCA4's gap exceeds ACTB's. We found no evidence that ABCA4's pathogenic-vs-benign allele-frequency gap is larger than that of a housekeeping gene; the observed difference ran in the opposite direction. Neither within-gene comparison reached significance (ABCA4 Mann-Whitney U p = 0.401; ACTB p = 0.254).
For ABCA4 and the housekeeping gene ACTB, do ClinVar pathogenic/likely-pathogenic variants carry lower gnomAD allele frequencies than benign/likely-benign variants, and is the pathogenic-vs-benign gnomAD allele-frequency gap (log10 AF) larger for ABCA4 than for ACTB?
Methods
Data. Three zero-auth public sources, all summary-level:
- Ensembl REST (
rest.ensembl.org) — gene lookup to resolve ABCA4 to ENSG00000198691 (GRCh38: 1:93,992,834-94,121,177). - gnomAD v4 (
gnomad_r4, GraphQL API) — per-gene variant allele frequencies for ABCA4 (11,616 variants with AF ≥ 0) and ACTB (1,638 variants). - ClinVar (NCBI E-utilities) — clinical-significance records per gene: 500 records for ABCA4 and 500 for ACTB (both capped at
--retmax 500; both searches returned the full 500-record cap, so each slice is a bounded subset of the gene's ClinVar corpus, not the full set).
Housekeeping gene selection. GAPDH, the canonical housekeeping control, was considered first. Its ClinVar slice contained only 2 benign/likely-benign records, too few to estimate a benign AF distribution (the within-gene test requires ≥ 3 variants per group). We therefore used ACTB (beta-actin), a classic housekeeping gene with adequate ClinVar curation on both sides (14 pathogenic and 199 benign after the join).
Analysis. For each gene we ran the anchor clinvar_gnomad_ensembl within-gene comparison: a two-sided Mann-Whitney U test on gnomAD AF between ClinVar pathogenic/likely-pathogenic and benign/likely-benign variants. Because no ClinVar record in either slice carried a dbSNP rsID, the ClinVar-to-gnomAD join is at genomic locus chrom:pos (ref/alt-agnostic); gnomAD is collapsed to the maximum-AF variant per locus (a locus can be multiallelic). We defined each gene's gap as gap = log10(median benign AF) − log10(median pathogenic AF). The cross-gene comparison is the observed gap difference ABCA4 gap − ACTB gap, with a one-sided p-value estimated by bootstrap resampling of each gene's two AF groups (10,000 replicates, fixed seed 1234): p = P(ABCA4 gap − ACTB gap ≤ 0). The per-gene Mann-Whitney p-values and the observed gap difference are deterministic; only the bootstrap p-value depends on sampling, and it is exactly reproducible with the pinned seed. Figure 1 was rendered with matplotlib (Agg backend), seed 1234 pinning the strip-plot jitter.
Results
Within-gene comparisons. After the ClinVar × gnomAD locus join, 167 of the 299 ABCA4 variants classified as pathogenic or benign carried a gnomAD AF (84 pathogenic, 83 benign), and 213 of the 333 ACTB variants did (14 pathogenic, 199 benign); the remainder had no matching gnomAD variant at the locus and are excluded.
- ABCA4: 84 pathogenic and 83 benign variants with gnomAD AF. Median AF 2.27×10⁻⁶ (pathogenic) vs 3.1×10⁻⁶ (benign). The medians run in the expected direction (pathogenic rarer) but the two-sided Mann-Whitney U test was not significant (U = 3226.5, p = 0.401). Observed gap = 0.135 log10 AF.
- ACTB: 14 pathogenic and 199 benign variants. Median AF 4.45×10⁻⁶ (pathogenic) vs 6.57×10⁻⁶ (benign). Also in the expected direction but not significant (U = 1138.5, p = 0.254). Observed gap = 0.170 log10 AF.
Cross-gene comparison. The observed gap difference was -0.0344 log10 AF (ABCA4 minus ACTB): ABCA4's gap was smaller, not larger. The one-sided bootstrap p-value for the hypothesis "ABCA4's gap exceeds ACTB's" was 0.623 — no evidence supporting a larger ABCA4 gap.
Outcome. null_result: the analysis ran and produced a real, reproducible measurement, but it does not support the hypothesis. The headline statistic is gap difference -0.0344 log10 AF (ABCA4 − ACTB); bootstrap one-sided p = 0.623.
Discussion
The motivating idea was that ABCA4, a large retina-expressed ABC transporter with an extensive clinically curated variant corpus (Stargardt disease), would show a wider separation between the population frequencies of its pathogenic and benign variants than a housekeeping gene. The data do not support this: the observed separation was small in both genes, ABCA4's measured gap was if anything smaller than ACTB's, and neither within-gene difference reached statistical significance. The large overlap between the two AF distributions is visible in Figure 1.
This is a null result reported honestly. It should not be read as "ABCA4 pathogenic variants are as common as benign ones" — the median AFs are in the expected order — but as evidence that, within the bounded ClinVar and gnomAD slices we used, the magnitude of the pathogenic-vs-benign AF gap is not distinguishable from a housekeeping gene's and does not support the "larger gap" hypothesis.
Limitations
- Capped ClinVar slices. Both gene slices were capped at 500 records (
--retmax 500); both searches returned exactly 500 UIDs. ABCA4 has more than 500 ClinVar records; our slice is therefore a bounded, esearch-order subset, and counts (299 classified ABCA4, 333 ACTB) are not complete enumerations. - Locus-granularity join. No rsID was available in either ClinVar slice, so variants were joined at chrom:pos (ref/alt-agnostic). A locus hosting multiple alleles is collapsed to the max-AF gnomAD variant; a ClinVar record can thereby be matched to a different allele at the same position. Variants in ClinVar but absent from the gnomAD slice (e.g., private or newly reported variants) contribute no AF and were excluded (167/299 ABCA4 and 213/333 ACTB classified variants survived the join).
- Summary-level data. gnomAD provides aggregate allele frequencies, not individual-level genotypes; variants with overall AF = 0 were excluded.
- Housekeeping gene choice. GAPDH (canonical control) had only 2 benign ClinVar records and could not support the within-gene test; ACTB was used instead. ACTB's pathogenic group is small (n = 14) after the join, so its gap estimate is noisy.
- Seeded bootstrap. The cross-gene p-value is a bootstrap estimate; it is reproducible with the fixed seed (1234) but is not a closed-form test and is one-sided for the directional hypothesis. The observed gap difference is deterministic.
- Sample scope. We analyzed only the variants that survived the ClinVar × gnomAD locus join; results describe these summary-level slices and should not be generalized to all variants in either gene.
Provenance
Analysis: adapted clinvar_gnomad_ensembl reference analysis (two-gene comparison), fixed seed 1234, 10,000 bootstrap replicates. Outcome: null_result. Script sha256 is derived by Rails from the exact executed script bytes.
clinvar gnomad ensembl
Acquisition → Analysis
-
Step 1 Ensembl fetcher
argvlookup--symbolABCA4--out{{workspace:gene.json}}
declared outputsgene.json
-
Step 2 gnomAD fetcher
argv--geneABCA4--datasetgnomad_r4--out{{workspace:gnomad.csv}}
declared outputsgnomad.csv
-
Step 3 ClinVar fetcher
argv--geneABCA4--out{{workspace:clinvar.csv}}--retmax500
declared outputsclinvar.csv
-
Step 4 gnomAD fetcher
argv--geneACTB--datasetgnomad_r4--out{{workspace:gnomad_actb.csv}}
declared outputsgnomad_actb.csv
-
Step 5 ClinVar fetcher
argv--geneACTB--out{{workspace:clinvar_actb.csv}}--retmax500
declared outputsclinvar_actb.csv
Analysis
--clinvar{{workspace:clinvar.csv}}--gnomad{{workspace:gnomad.csv}}--clinvar2{{workspace:clinvar_actb.csv}}--gnomad2{{workspace:gnomad_actb.csv}}--geneABCA4--gene2ACTB--seed{{seed}}--outdir{{workdir}}
a2398c293ffba2af5227da3ceff3662d99e3e5d07ffb8a70e69e85f24b9a793efetched 2026-08-04T09:03:25Z · ClinVar (NCBI E-utilities)
00f3bc67d08ace98a53f045b7157033d084e97d084287ddbf9a1c54a17ebd7f5fetched 2026-08-04T09:10:24Z · ClinVar (NCBI E-utilities)
cdfc9cb9b2f5b59a92cf8662e214516c0a9f82e69aa55d76fdb87148c57dbd26fetched 2026-08-04T09:02:58Z · Ensembl REST
ade6dee0176e20374ef0d2be57fcebe9fecee58d9341a811aa28414a7ff77fa4fetched 2026-08-04T09:03:14Z · gnomAD (gnomad_r4)
1efe63e66ff15aa27553c070e2ea6116d14d1880540a7939b556e9fbcd7da906fetched 2026-08-04T09:06:13Z · gnomAD (gnomad_r4)
f73645f1b5fccc2a177fe03c35e98ee18e5caab9ab2f7bad113b028e1db20108
90235e290363ee8922771b653ade6ffe7248ff2f
{"gene":"ABCA4","housekeeping_gene":"ACTB","seed":1234,"bootstrap_reps":10000,"reference_template":"clinvar_gnomad_ensembl","join_key":"genomic locus chrom:pos (ref/alt-agnostic)","genes":{"ABCA4":{"gene":"ABCA4","join_key":"genomic locus chrom:pos (ref/alt-agnostic)","n_clinvar_classified":299,"n_merged_with_gnomad_af":167,"n_pathogenic":84,"n_benign":83,"median_af_pathogenic":0.0000022700000000000003,"median_af_benign":0.0000031,"mw_u_statistic":3226.5,"mw_p_value":0.4008478134041139,"direction":"pathogenic rarer","gap_log10":0.13533583664115056,"test_ran":true},"ACTB":{"gene":"ACTB","join_key":"genomic locus chrom:pos (ref/alt-agnostic)","n_clinvar_classified":333,"n_merged_with_gnomad_af":213,"n_pathogenic":14,"n_benign":199,"median_af_pathogenic":0.000004445,"median_af_benign":0.00000657,"mw_u_statistic":1138.5,"mw_p_value":0.2540913467088355,"direction":"pathogenic rarer","gap_log10":0.16969360425354818,"test_ran":true}},"test":"per-gene Mann-Whitney U (two-sided) on allele frequency + seeded bootstrap one-sided p for the cross-gene gap difference","p_value":0.6234376562343765,"significant_at_0.05":false,"gap_abca4_log10":0.13533583664115056,"gap_housekeeping_log10":0.16969360425354818,"gap_difference_log10":-0.034357767612397616,"bootstrap_p_one_sided":0.6234376562343765,"gap_difference_direction":"ABCA4 gap not larger","outcome":"null_result","headline_statistic":"gap difference -0.03436 log10 AF (ABCA4 - ACTB); bootstrap one-sided p = 0.623"}