Skip to content

Methodology

Allele frequency

For each biallelic SNP passing filters, the alternate allele frequency is computed from allelic depth (AD):

AF = AD_alt / (AD_ref + AD_alt)

For multi-sample bulks, allelic depths are summed across samples before computing AF (pooling read information).

Delta allele frequency

delta_AF = AF_high - AF_low

For a recessive causal mutation, the mutant bulk approaches AF ~ 1.0 and the wild-type bulk approaches AF ~ 0.0, so delta_AF ~ 1.0 at the causal locus.

Sliding windows and tricube smoothing

The genome is scanned in overlapping windows (default 1 Mb wide, 250 kb step). Within a window, delta_AF is smoothed with a tricube kernel that weights variants by distance from the window center:

w_i = (1 - |d_i / d_max|^3)^3

G-statistic

Each window is tested for allele-frequency divergence between bulks:

G = 2 * sum_i O_i * ln(O_i / E_i)

where O_i and E_i are observed and expected allele counts under the null of equal frequencies.

Z-score and region calling

Window statistics are standardized genome-wide:

Z = (X - mu) / sigma

Windows exceeding the threshold (default Z > 3.0) are significant. Adjacent significant windows on the same chromosome within 500 kb are merged into a single candidate region.

Candidate variant filtering

Within candidate regions, variants are filtered by inheritance mode:

Mode min delta_AF min AF_high max AF_low
Recessive 0.8 0.9 0.1
Dominant 0.3 0.4 0.1

Annotation and gene ranking

With --annotate, candidate variants are written to VCF, annotated by snpEff, and ranked by: variant impact (HIGH > MODERATE > LOW > MODIFIER), loss-of-function status, distance from the region peak, and region rank (by Z-score).