"qpAdm best practices" used to mean folklore plus one 2020 blog post. It does not have to anymore. Between 2021 and 2025 the method was audited to its edges: Harney and colleagues validated the machinery and mapped its limits, Williams and colleagues measured its resolution, and Flegontova and colleagues measured how often high-throughput screens are wrong, on simulated admixture graphs and on simulated stepping-stone landscapes. The practices that survive that literature are specific and short enough to hold while working. This is the checklist, with the source behind each rule, and with the rules that are conventions rather than findings marked as such.
First: what kind of history?#
Every rule below was established in simulations of one of two worlds, and that decides how far it travels. On an admixture-graph history, discrete populations split and occasionally mix in pulses; qpAdm's assumptions can be written down as topology, and rules such as temporal stratification are powerful. On a stepping-stone landscape, groups exchange migrants with their neighbours continuously; there is generally no unique true set of sources, protocol choices stop mattering much, and sampling density, pre-study odds and geometry take over. Real regions and periods can look like either or both, and you rarely know in advance which. So treat the graph rules as necessary rather than sufficient, and read every fitting model with the landscape case in mind (what temporal order does and does not protect against).
Before any model: the data rules#
- Know your intersection, not your marker count. Standard errors are set by the SNPs that survive the merge per statistic (the budget arithmetic). Rule of thumb floor for any included sample: ~50k overlapping SNPs; below that, nothing deserves the word estimate.
- Use allsnps on sparse data. The measured stakes: at 85% missingness, mean SE 0.020 with it versus 0.066 without; at 90%, 0.035 versus a meaningless 9.99 (the parameters guide).
- Never mix capture classes carelessly. Ancient and present-day samples, and by extension shotgun and capture ancients, carry different damage and bias profiles, and differential artefacts bias f-statistics where uniform ones mostly cancel. The AADR's suffixes exist for exactly this.
- Hold processing constant across compared models.
allsnps,fudge_twice, block size, f2 versus genotype input: each changes numbers, and comparisons are only valid inside one regime.
Building the model: the structural rules#
- Constrain the hypothesis set before running anything. A search's false-discovery rate depends on its pre-study odds, the ratio of plausible to implausible models among those tested. On realistic simulated landscapes, screens built like typical published protocols had odds of about 0.18 for two-way models and 0.015 for four-way ones (Flegontova et al. 2025). Choose a few candidate sources for reasons that exist before qpAdm runs (archaeology, chronology, geography, earlier genetic work) and treat a wide sweep as exploration. Whether a person or a script composes the models does not change the odds (the arithmetic).
- Stratify temporally. No source should postdate the target. On simulated admixture-graph histories this was the largest lever the audits found: distal models had median false-discovery rates of 16.4 to 31.2%, while proximal rotating screens ran 72.5 to 100% and got worse with more data. On simulated stepping-stone landscapes the protocols showed no significant differences in false-discovery rate, so stratification is necessary there but nowhere near sufficient (both results, side by side).
- Right sets: floor, band, ceiling. At least one more outgroup than sources (degrees of freedom = |right| − |sources|); the published sets run 9 to 13; and by ~30 added references qpAdm starts rejecting true models. Build on the O9 spine with era contrasts, and remember the direction of power: an outgroup differentially related to your sources is worth more than five generic ones, and the published example cut standard errors threefold.
- No known violations on the right, and mind the geometry. Where the history is graph-like, the rule is topological: no right population cladal with a source, none descended from the target, none that received gene flow from the left after separation (the prohibition list). On a landscape that rule cannot be met literally, because every population is connected to every other through the groups in between, and geometry takes over: in the simulations, a small average distance between the left and right sets lowered p-values and pushed screens toward more complex models, while distant right sets let screens stop early at simpler ones. Check the model against right sets at different distances, and do not read a pass as proof that nothing is shared.
- Simplest adequate model first. One-source explanations before two, two before three, with qpWave and the rank test as referee (Harney et al. 2021's emphasis). This is statistical parsimony, not a head count: the simplest model that fits, relative to the right set used, is not the number of migrations in the target's history. On simulated landscapes, screens with close sources available stopped at two or three sources, far simpler than the history that produced the target.
Judging results: the acceptance rules#
- Never rank surviving models by p-value. The measured fact that should end the habit: the true model has the best p-value in only 48% of cases (Harney et al. 2021). On simulated landscapes, p-values related only weakly to how close and how symmetric the sources were, while the estimated admixture fractions tracked it better. p answers "is this model compatible", never "is this model best".
- Use composite feasibility, and know what it buys. In Williams et al. 2024's simulations of recent history,
a p ≥ 0.05 filter alone let through 27.5% of false models and gave an 84.1% false-discovery rate; requiring
weights inside [0,1] brought those to 9.8% and 57.4%; adding a two-standard-error margin cut false positives
to 6.0% and left the false-discovery rate at 61.0%. Composite criteria cut false positives more than fourfold;
on their own they do not rescue a search with poor pre-study odds. The standard composite: model p over
threshold, every weight bounded away from 0 and 1 within error, and every trailing simpler model rejected
(the
p_nestedcolumn in the record). Flegontova et al. 2025's stringent version (every estimate ± 2 SE inside (0,1), p ≥ 0.05, trailing models rejected) cut the landscape false-positive rate from 0.2 to 5.4% down to 0.01 to 0.5%, but the p threshold itself barely helped there: their best combination paired dense sampling and the ± 2 SE condition with a low threshold, p ≥ 0.001. - Respect the resolution floor. Sources separated by FST under roughly 0.002 cannot be told apart by any right set; at Iron-Age-scale differentiation the true model is only ~22% of the plausible set (Williams et al. 2024). When candidates are that close, report the family, not a winner.
- Read weights through their errors. A weight within two SEs of zero is a source the data cannot tell apart from absent; within two SEs of one, the other sources are not established. |Z| above 3 is a practitioner line, not a validated one. Our reports measure every source against it in every era, as part of a house bar (p above 0.05, every |Z| above 3, every SE below 0.10) that is our own convention, and say per era whether the bar is met; with every weight positive, |Z| above 3 implies the ± 2 SE condition above.
- Read a fit as a position, not an event. On a landscape there is generally no unique true decomposition, and a feasible model such as 60% A + 40% B can summarise where a target sits between sampled groups without populations resembling A and B ever having mixed. Admixture fractions land in (0,1) mainly for sources placed symmetrically around the target, and the lopsided models with distant sources that also pass are how false long-distance migrations appear. A fitting two-way model with every rival rejected can be a true model of a simple graph-like history, a suboptimal model on a poorly sampled landscape, or an optimal but overly simple model on a densely sampled one. Claim a migration only when evidence outside qpAdm supplies the event.
Reporting: what a checkable model states#
A qpAdm claim that cannot be re-run is a vibe with a table. The reporting floor, for a forum post or a paper: the candidate pool you started from and why, so a reader can judge the pre-study odds; the full right set in run order with sample counts; every source's panel label, weight, SE, z and confidence interval; the model p with chi-square and degrees of freedom; SNP counts per statistic; the nested-model table; the software, version and parameter regime; and which alternative models also passed. The last item is the one most often omitted and most informative: screening survivors are cheap, and a stated family of passing models is what honesty looks like at this resolution.
The one-page version#
Decide which kind of history you might be modelling. Pick a few hypotheses for reasons outside qpAdm. Stratify temporally. Build the right set for the specific contrast, 9 to 15 strong, and check the model against right sets at other distances. Try the simplest adequate model first, and do not read the rank as a head count. Accept on the composite, never on p rank. Read weights through their errors, and fits as positions rather than events. Hold processing constant. Report everything a stranger needs to re-run you, including where your candidates came from. And treat every rejection as the method working: a test that cannot fail you cannot vouch for you either.
Ancient Ancestry, our qpAdm analysis, is built on these rules: candidate sources come from a pool curated for the customer's declared origins and era before any model runs, every published model is temporally ordered and measured against our house bar, and a person reviews the candidates and approves every published model. Read a published model as one adequate description of a genome relative to the sampled groups, not as the only one.
Terms used here are defined in the glossary.
References#
- Harney, É., Patterson, N., Reich, D. & Wakeley, J. (2021). Assessing the performance of qpAdm. Genetics, 217(4), iyaa045.
- Williams, M. P. et al. (2024). Testing times: disentangling admixture histories in recent and complex demographies using ancient DNA. Genetics, 228(1), iyae110.
- Flegontova, O. et al. (2025). Performance of qpAdm-based screens for genetic admixture on graph-shaped histories and stepping stone landscapes. Genetics, 230(1), iyaf047.
- Lazaridis, I. et al. (2016). Genomic insights into the origin of farming in the ancient Near East. Nature, 536, 419 to 424. (The O9 outgroup set.)
- Agranat-Tamir, L. et al. (2020). The genomic history of the Bronze Age Southern Levant. Cell, 181(5), 1146 to 1157. (The o9a extension and the threefold SE reduction.)
- Maier, R. et al. (2023). On the limits of fitting complex models of population history to f-statistics. eLife, 12, e85492.
Editorial note: revised on 24 September 2026. An earlier version presented false-discovery rates from simulated admixture-graph histories as general rules, left out the same study's stepping-stone landscape results, overstated what composite criteria do to the false-discovery rate, and described our publish bar as if the audit literature had validated it. This version adds the landscape results and pre-study odds, and marks our bar as our own convention.



