Inference methods¶
genoSecretor maps FUT2 tag SNPs to haplotype alleles Se (functional), se (complete LoF, se428 / W143X), and Se^w (reduced activity, se385 / I129F), then to a recessive phenotype.
Research use only. These methods type common alleles, not the full FUT2 allelic series. FUT3/Lewis typing is out of scope.
Haplotype rules¶
For each chromosome copy:
- If rs601338 =
LOF→ haplotype = se (epistatic: truncated FUT2 is null even if rs1047781 is alsoWEAK) - Else if rs1047781 =
WEAK→ haplotype = Se^w - Else if either marker is
FUNCTIONAL→ haplotype = Se - Else if a leftover (unmodelled) state is present → haplotype = Se
- Both markers missing on that copy → no haplotype
Figure. One chromosome copy: LOF yields se; otherwise WEAK yields Se^w and FUNCTIONAL (or any leftover unmodelled state) yields Se. Both markers missing on that copy is not a haplotype. Under proxy, rs601338 / rs602662 copy-count disagreement is CONFLICT, not a forced haplotype.
Phenotype table¶
| Diplotype | secretor_status |
|---|---|
| Se/Se, Se/se, Se/Se^w | secretor |
| Se^w/Se^w, Se^w/se | weak-secretor |
| se/se | non-secretor |
--phenotype-coding biochemical (default) uses this table. --phenotype-coding gwas recodes Se^w/Se^w and Se^w/se as non-secretor (Smyth 2011 / BBJ-style binary trait). fut2_genotype still keeps Se^w.
| Diplotype | biochemical | gwas |
|---|---|---|
| Se/Se, Se/se, Se/Se^w | secretor | secretor |
| Se^w/Se^w, Se^w/se | weak-secretor | non-secretor |
| se/se | non-secretor | non-secretor |
Figure. Sorted haplotypes (Se < Se^w < se) map to phenotype: any Se copy → secretor; Se^w/Se^w and Se^w/se → weak-secretor; se/se → non-secretor.
How much residual FUT2 activity Se^w retains versus Se is assay-dependent (~2–5% lysate activity, ~22% remaining Vmax, ~19% of wild-type H-antigen-positive cells, and still above complete-null se428). See How weak is Se^w.
two-marker (default when both SNPs are present)¶
Uses rs601338 and rs1047781.
Unphased double heterozygotes (het at both SNPs) are assigned Se^w/se under --assume-trans (default), because se428 and se385 typically sit on different continental haplotypes. --no-assume-trans leaves those samples ambiguous (Se^w/se vs cis Se/se).
Figure. Unphased LOF/FUNCTIONAL × FUNCTIONAL/WEAK is compatible with trans Se^w/se or cis Se/se (the double-mutant copy is still se). Default --assume-trans assigns Se^w/se; --no-assume-trans leaves the call ambiguous. Phased GT does not use this assumption.
common¶
rs601338 only. Homozygous LOF → se/se (non-secretor); otherwise secretor. Never emits weak-secretor. Poor choice as the sole method in East Asian cohorts.
eas¶
rs1047781 only. Homozygous WEAK → Se^w/Se^w (weak-secretor); otherwise secretor. Never emits se/se from W143X. Poor choice as the sole method in European/African cohorts.
proxy¶
If rs601338 is usable, same as common. If it is missing, rs602662 SE_PROXY (A) is mapped to an LOF-like state and confidence is low. If both markers are present and copy counts disagree, QC status is CONFLICT.
Auto-selection¶
--method auto still prefers two-marker when both functional SNPs are present. After that, allowed fallbacks depend on --ancestry:
| Ancestry | Allowed auto methods | Missing required SNP |
|---|---|---|
eas (explicit or inferred) |
two-marker, then eas |
Error — do not use common or proxy |
eur / afr / amr |
two-marker, then common, then proxy |
Error if only rs1047781 (eas would hide se428) |
unknown |
two-marker → common → eas → proxy |
Warn when common is chosen without rs1047781 |
--ancestry auto (default) infers EAS-like vs EUR-like only when a single functional SNP is present and n ≥ 50 non-missing genotypes:
- rs601338 present, rs1047781 missing, se428 AF < 0.05 → treat as EAS and refuse
common - rs1047781 present, rs601338 missing, se385 AF < 0.05 → treat as EUR-like and refuse
eas
n < 50 is not inferred (behaves like unknown) unless --ancestry eas (or eur / afr / amr) is set. Explicit --method still runs and prints a warning if it contradicts ancestry.
--strict-method disables fallback when a requested method's minimum markers are missing.
List methods: