1000 Genomes --assume-bo check¶
Phased NYGC 30x GRCh38 panels (AFR, AMR, EAS, EUR) as cis/trans truth for the unphased double-heterozygote rule.
Research use only
Phased 1000 Genomes genotypes are not serological ABO types. This check asks whether
unphased --assume-bo matches phase at rs8176719 × rs8176746. It is not a clinical
validation.
Panels: ~/.gwaslab/{ANC}.ALL.split_norm_af.1kg_30x.hg38.vcf.gz (override with GENOABO_1KG_<ANC>_VCF). EAS falls back to the bundled extract if the full panel is absent.
#!/usr/bin/env bash
# Compare unphased --assume-bo to phased 1KG AFR/AMR/EAS/EUR diplotypes.
# Panels: GENOABO_1KG_<ANC>_VCF, else ~/.gwaslab/<ANC>.ALL.split_norm_af.1kg_30x.hg38.vcf.gz
# EAS falls back to the bundled four-marker extract.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
mkdir -p "$ROOT/out"
python "$ROOT/verify_assume_bo_1kg.py" --out-dir "$ROOT/out"
echo "Summary: $ROOT/out/assume_bo_1kg.summary.txt"
Writes examples/out/assume_bo_1kg.summary.tsv, .discordant.tsv, and .summary.txt.
Operational metric (the flag)¶
Unphased O_DEL/NON_O × A_ALLELE/B_ALLELE is compatible with A/O or B/O. --no-assume-bo leaves those samples ambiguous; default --assume-bo assigns B/O. Concordance is the fraction of that double-het set whose phased genotype is B/O.
| Super-population | n | Double-het | Phased B/O | Phased A/O | Concordance |
|---|---|---|---|---|---|
| AFR | 661 | 113 | 105 | 8 | 105/113 (92.9%) |
| AMR | 347 | 20 | 20 | 0 | 20/20 (100%) |
| EAS | 504 | 124 | 124 | 0 | 124/124 (100%) |
| EUR | 503 | 41 | 41 | 0 | 41/41 (100%) |
In AMR, EAS, and EUR every unphased double-het is B/O in phase, so --assume-bo matches the phased diplotype (and phenotype). In AFR, 8/113 double-hets are A/O: --assume-bo would emit group B instead of A. Default --assume-bo is unchanged; for unphased African-ancestry data, --no-assume-bo leaves those samples ambiguous.
Homozygous O_DEL is called O/O without phase even when rs8176746 carries B (O-cis-B). An earlier genoABO build left those samples unphased-ambiguous (25 AFR in the 30x panel); they are no longer expected failures. Re-run ./examples/run_1kg_assume_bo.sh to refresh discordant-row counts if you have local panels.
Haplotype metric (O deletion background)¶
Among phased O haplotypes, cis allele at rs8176746. A_ALLELE matches the “O arose on A” story; B_ALLELE does not. This also counts O-cis-B configurations that unphased genotypes resolve uniquely (so the flag never applies).
| Super-population | O haplotypes | O cis A | O cis B | O cis unknown |
|---|---|---|---|---|
| AFR | 933 | 867 | 41 | 25 |
| AMR | 533 | 533 | 0 | 0 |
| EAS | 625 | 625 | 0 | 0 |
| EUR | 609 | 609 | 0 | 0 |
Unknown AFR counts in the table below include O haplotypes whose cis A/B allele was not assigned by the verification script’s unphased shortcuts. Re-run the script after this release if you need an updated cis-unknown tally; the operational double-het table above does not depend on that.
See Assumptions and Inference methods (double-heterozygote resolution).