A qpAdm result is a short table: one p-value for the model, and for every source a weight, a standard error and a Z-score. People read the weights and skip the rest, which is exactly backwards. The weights are the claim; the other three numbers are what decide whether the claim is worth anything.
This guide reads the table in the right order. If you want the method itself — what qpAdm computes and why outgroups matter — start with Understanding qpAdm; if you are deciding whether to buy a test at all, the buyer's guide comes first.
The table you are reading#
p-value: 0.231 chi-square: 12.09 dof: 10 f4 rank: 2
min SNPs per f4: 118,402 merged SNPs: 214,910 jackknife blocks: 706
Anatolian_Neolithic_Farmer 0.541 SE 0.028 Z 19.3 95% CI 0.486 to 0.596
Western_Steppe_Herder 0.312 SE 0.031 Z 10.1 95% CI 0.251 to 0.373
Western_Hunter_Gatherer 0.147 SE 0.024 Z 6.1 95% CI 0.100 to 0.194
right set: 14 populations (shown in full, with sample counts)
Four kinds of number, read in this order: p-value first, then standard errors, then Z-scores, then — only then — the weights. The rest of the header (chi-square, degrees of freedom, rank, SNP counts, blocks) and the confidence intervals are the record behind those four; they are read in The model record explained.
1. The p-value: is this model admissible?#
The p-value answers one question: is the pattern of shared drift in the data compatible with the mixture I proposed? It comes from a test of the f4-statistics between the target, the sources and the outgroups; a high value means the data do not contradict the model, a low value means they do.
Three things it is not:
- Not the probability the model is true. It is a compatibility test on one specific proposal.
- Not a measure of how much ancestry came from anywhere. That is the weights' job.
- Not comparable across models with different right sets. A p-value is only meaningful against the outgroups it was computed with, which is why the right set must be published beside it.
The conventional threshold is p > 0.05. Below it, the model is rejected and the weights are not worth reading. Above it, the model is not refuted — which is a much weaker statement than "confirmed", because several mutually incompatible models can all clear the same bar.
⚠️ A very high p-value is not automatically better. A thin or poorly chosen right set makes almost everything pass; p = 0.9 against six outgroups says less than p = 0.2 against fourteen distant ones.
2. The standard error: how well is each weight pinned down?#
Every weight carries a standard error, estimated by block jackknife across the genome. Read a weight as a range, not a point: 0.312 ± 0.031 means "roughly 25–37% at two standard errors", and that range is the finding.
What sets the standard error is mostly coverage — how many markers survive the merge between your genotypes and the reference panel — and how distinct the sources are from one another. Two consequences follow that are widely misunderstood:
- Analyst effort cannot shrink a standard error. If a sparse file fixes SE at 0.12, a longer search will find different models, not tighter ones.
- Similar sources inflate each other's errors. Asking the model to split ancestry between two closely related populations produces two large SEs even on a dense file, because the data cannot tell them apart.
A useful private rule: if a weight is smaller than twice its own standard error, do not repeat it as a percentage.
3. The Z-score: is this source distinguishable from zero?#
The Z-score is the weight divided by its standard error. It tells you how many standard errors the weight sits from nothing at all. A source at Z = 1.2 is not measurably contributing, whatever its headline weight; a source at Z = 10 unambiguously is.
This is the number that catches the most common over-reading. Consider:
p-value: 0.088
Neolithic_Farmer 0.907 SE 0.094 Z 9.6
Steppe_Herder 0.093 SE 0.094 Z 1.0
The p-value clears 0.05 and a careless reader reports a 91/9 mixture. But the second weight equals its own standard error: it is statistically indistinguishable from zero. The honest reading is a one-source model, and the correct next step is to test it as one — if the single-source version also passes, the extra source was never earning its place.
4. The weights, at last#
With the p-value admissible, every SE small and every Z large, the weights can be read as proportions of ancestry — from the proxy populations named, measured against the outgroups listed, for the target as merged. Each of those qualifiers does work. Change the outgroups and the weights move; substitute a closer proxy for one source and they move again. A weight is a property of a model, not of a person.
The bar we publish against#
Because "good fit" is vague, our published models are graded against explicit thresholds, the same at every tier of the qpAdm analysis: p > 0.05, and for every source in every era |Z| > 3 and SE < 0.10. The tiers differ in how far the analyst searches past the first model that clears it, never in the bar. Three things that bar deliberately does not do: it does not prefer a higher p-value once admissible, it does not reward more sources, and it does not let a model through because its story is appealing.
Reading a rejection#
A rejected model (p below 0.05) is a result, not a malfunction. It says the proposed ancestry story is incompatible with the data given those outgroups. The productive responses, in order: check the right set for outgroups too close to a source; check chronology, since a source that postdates the target cannot be its ancestor; try a simpler model; and accept that some questions cannot be resolved at your file's coverage. What is not legitimate is rotating sources and outgroups until something passes — run enough models and one will clear any threshold by chance, which is why Harney and colleagues (2021) warn against exactly that practice and why we removed automated rotation from our own pipeline.
Three worked misreadings#
"My steppe ancestry went up at the higher tier." The higher tier found a different model — a better proxy or a cleaner outgroup set — and the weights moved. Neither figure is "your steppe ancestry"; each is a model's estimate against its own right set.
"p = 0.62 must be a stronger result than p = 0.14." Only if the right sets are the same. Check their size and composition before comparing.
"Four sources fit better than three, so the four-source model is right." Adding a source tends to improve fit mechanically. If the three-source nested model also passes, and the fourth source's Z is small, the three-source model is the one to report.
Checking a result yourself#
Every number above is printed in our reports, with the right set in full, so anyone who understands the method can re-run it — and the report's Reading view adds the complete model record (the nested-model table, the rank test, every count) with a plain-text download, so the whole thing can be handed to another analyst as a file. Two free routes: the AdmixTools 2 Lab runs real qpAdm over the public AADR panel in the browser, and after a report is published the Model Lab unlock lets you run models on your own merged sample — see Run your own qpAdm models. The vocabulary used here is defined in the glossary, and the comparison with coordinate methods, which have none of these three numbers, is in qpAdm vs Global25.
References#
- Patterson, N. et al. (2012). Ancient admixture in human history. Genetics, 192(3), 1065–1093.
- Haak, W. et al. (2015). Massive migration from the steppe was a source for Indo-European languages in Europe. Nature, 522, 207–211 (Supplementary Information 10 introduces qpAdm).
- Harney, É., Patterson, N., Reich, D. & Wakeley, J. (2021). Assessing the performance of qpAdm: a statistical tool for studying population admixture. Genetics, 217(4), iyaa045.
- Maier, R. et al. (2023). On the limits of fitting complex models of population history to f-statistics. eLife, 12, e85492.



