---
title: "f4-statistics explained: the arithmetic under every ancient-DNA claim"
description: "f2, f3, f4 and D-statistics are the shared-drift arithmetic beneath qpAdm, qpWave and admixture graphs. What each statistic measures, how a four-population test works, and how to read Z-scores like the papers do."
canonical: https://www.ancestrify.io/blog/f4-statistics-explained
date: 2026-08-31T10:36:00+00:00
author: "Andi Thomaj"
---

# f4-statistics explained: the arithmetic under every ancient-DNA claim

Strip away the software and the acronyms, and the modern ancient-DNA toolkit —
[qpAdm](/qpadm), [qpWave](/blog/qpwave-explained), admixture graphs, half the
tests in any Reich-lab supplement — runs on one small family of numbers: **f-statistics**,
introduced formally in Patterson et al. 2012. They measure *shared genetic drift* between
populations, and their genius is that simple combinations of allele frequencies behave like
testable geometry. This is the family explained from the ground up, with no software required.

## Drift, and why sharing it is evidence

When a population lives on its own, allele frequencies wander — genetic drift. Two populations
descending from a common ancestor share the wandering that happened *before* they split, and not
what happened after. Measure how much drift two groups share, against how much each took alone,
and you are reading the shape of their family tree from frequencies. f-statistics are exactly
that measurement, made rigorous.

**f2(A, B)** is the squared allele-frequency difference between two populations, averaged over
many SNPs — the total drift separating them; the raw material
([ADMIXTOOLS 2 precomputes exactly this](/blog/run-qpadm-in-r-admixtools2)).

**f3(Target; A, B)** comes in two uses. As an *admixture test*, a significantly negative f3 says
the target's frequencies sit between A's and B's too consistently to be anything but a mixture of
sources related to both — one of the very few one-number proofs of admixture in the toolkit. As
*outgroup-f3* (with a distant outgroup as the target), it ranks which candidates share the most
drift with a population of interest — the standard "who is closest" screen.

## f4: the four-population test

The workhorse. Take four populations arranged as two pairs — f4(A, B; C, D) — and multiply, SNP
by SNP, the frequency difference within one pair by the difference within the other, then
average. If the tree ((A,B),(C,D)) is true and no gene flow crosses between the pairs, the two
differences are uncorrelated and **f4 is zero in expectation**. A consistently non-zero f4 means
the tree is wrong somewhere: either the topology is different, or genes flowed across it.

The sign says *where*. A positive f4(A, B; C, D) indicates A shares extra drift with C (or B with
D); negative, the reverse pairing. One worked example, the most famous in the field: f4(French,
Yoruba; Neanderthal, Chimp) is robustly positive — French carry more Neanderthal-shared drift
than Yoruba do — the archaic-introgression signal, in one line of arithmetic. (**D-statistics**,
of ABBA–BABA fame, are the same test under a normalisation; for reading purposes, D and f4 are
one idea.)

Significance comes from a **block jackknife**: the genome is cut into blocks long enough that
linkage disequilibrium does not tie neighbouring SNPs together, the statistic is recomputed
leaving out each block, and the spread gives a standard error. Estimate divided by SE is the
**Z-score** — the papers' "|Z| > 3" convention marks f4s more than three errors from zero,
[the same reading discipline qpAdm weights inherit](/blog/how-to-read-qpadm-p-value-z-score-standard-error).

## From single tests to models: the qpAdm identity

Single f4s test trees; the step that turns them into ancestry *proportions* is one identity
(Haak et al. 2015): if a target descends from sources in proportions α₁…αₙ, then **every**
f4-statistic of the target against outgroup contrasts equals the α-weighted sum of its sources'
f4s against the same contrasts. Compute a stack of such statistics against a
[well-chosen right set](/blog/how-to-choose-qpadm-sources-and-outgroups#the-standard-right-sets), and the proportions become
the least-squares solution of a linear system — with SEs from the jackknife and
[a rank test](/blog/qpwave-explained) asking whether n sources are even sufficient. That is
qpAdm, whole: f4-statistics arranged into
[a model that can fail](/blog/why-qpadm-models-get-rejected).

Reading the family this way explains the toolkit's division of labour.
[Descriptive tools](/blog/qpadm-vs-admixture-software) — PCA,
[ADMIXTURE](/blog/admixture-software-explained), [coordinate fits](/blog/nmonte-explained) —
summarise resemblance and always answer. f-statistics *test*, and their tests can refuse. Both
matter; only one can say no.

## Reading f-statistics in the wild

- **|Z| < 3 means "no detected signal"** — not "zero admixture". Power depends on
  [SNP counts](/blog/how-many-snps-does-qpadm-need) and sample sizes; thin data forgive
  everything.
- **A significant f4 says *that* something crosses the tree — never *what*.** Direction, timing
  and source identity need models ([qpAdm](/qpadm)) or graphs, which is why single-statistic
  headlines overreach.
- **The statistics are only as clean as the data** — ancient-DNA damage, reference bias and
  batch effects generate small spurious f4s, which is why the careful papers run damage-restricted
  replications and why [merge hygiene](/blog/qpadm-from-23andme-raw-data) is half the craft.

If you want to *feel* the arithmetic, run it: the free [AdmixTools 2 Lab](/lab/admixtools)
computes f-statistics, qpWave and qpAdm against a curated ancient panel in the browser — the same
family of numbers this post just built from frequencies, pointed at real genomes, including
[yours](/qpadm).

Terms used here are defined in the [glossary](/glossary).

## References

- Patterson, N. et al. (2012). Ancient admixture in human history. *Genetics*, 192(3), 1065–1093.
- Reich, D., Thangaraj, K., Patterson, N., Price, A. L. & Singh, L. (2009). Reconstructing Indian
  population history. *Nature*, 461, 489–494. (The f3/f4 framework's first major application.)
- Green, R. E. et al. (2010). A draft sequence of the Neandertal genome. *Science*, 328, 710–722.
  (The ABBA–BABA / D-statistic introduction.)
- Haak, W. et al. (2015). Massive migration from the steppe. *Nature*, 522, 207–211.
- Maier, R. et al. (2023). On the limits of fitting complex models of population history to
  f-statistics. *eLife*, 12, e85492.
