Skip to content
Ancestrify
All stories

methodology

By Andi Thomaj
7 min read

Understanding qpAdm: how to read a formal admixture model

The method, for readers who want the maths: what qpAdm computes, what the p-value, standard error and z-score each mean, why outgroup choice decides whether a model is worth anything, and how to read a rejection — with a worked example.

methodologyqpadmadmixturepopulation-genetics

  1. What qpAdm is
  2. The three numbers
  3. p-value — is this model admissible at all?
  4. Standard error — how well is this weight pinned down?
  5. Z-score — is this source distinguishable from zero?
  6. Left and right sets — where models are actually won or lost
  7. A worked example
  8. Nested models: is the extra source earning its place?
  9. Reading a rejection
  10. The conditions a publishable model should meet
  11. Trying it yourself
  12. Further reading
  13. qpAdm in practice

qpAdm is the method most published ancient-DNA admixture claims rest on, and it is routinely misread — usually by treating it as a percentage generator that happens to print extra numbers. Those extra numbers are the method.

This is a practical guide to reading a qpAdm result: what it computes, what each figure licenses you to say, and what to do when a model fails.

What qpAdm is#

qpAdm models a target population as a mixture of chosen source populations, using allele-frequency statistics rather than coordinate distances. It was developed in the Reich lab as part of ADMIXTOOLS, and it is implemented today in ADMIXTOOLS 2.

You give it three things:

  • a target — the genome or population being modelled;
  • a left set — the candidate sources you propose it descends from;
  • a right set — outgroups, used as reference points, never as candidate ancestors.

It returns a weight per source, an uncertainty on each weight, and a single p-value for the model.

The critical property, and the one that separates it from every coordinate-fitting method: qpAdm can reject a model. A method that always returns an answer cannot tell you that you asked a bad question. This one can.

The three numbers#

p-value — is this model admissible at all?#

The p-value asks whether the observed pattern of shared drift is compatible with the mixture you proposed. High is good: the data do not contradict the model. Low means the model is incompatible with the data and should be discarded.

⚠️ It is not the probability that the model is true, and it is not a measure of how much ancestry came from anywhere. It is a compatibility test on one specific proposal. Several mutually contradictory models can all pass — passing means "not refuted", never "confirmed".

Standard error — how well is this weight pinned down?#

Each source's weight carries a standard error. A weight of 40% ± 3% is a finding. The same 40% ± 18% is barely distinguishable from anything.

⚠️ SE depends far more on coverage — how many markers survive the merge between your genotypes and the reference panel — than on how long anyone searched for the model. This is the single most misunderstood point in consumer qpAdm: analyst effort cannot shrink a standard error that a sparse file has already fixed.

Z-score — is this source distinguishable from zero?#

The z-score is the weight divided by its standard error: how many standard errors it sits from nothing at all. A source with a low |Z| is not measurably contributing, whatever its headline percentage says. A "12% contribution" with |Z| of 1.2 is not a 12% contribution; it is an unresolvable one.

Left and right sets — where models are actually won or lost#

Most bad qpAdm results are bad because of the right set, not the left.

Outgroups give the method its power to discriminate. They are what allow it to tell two candidate sources apart. It follows that:

  • A right set that is too small accepts almost anything. With too few outgroups the test has little power, so models pass that should not. A high p-value from a thin right set is not evidence.
  • A right set too closely related to your sources also accepts too much. If the outgroups share the drift you are trying to detect, there is nothing left to discriminate on.
  • The right set must be reported. A weight without the outgroup list it was computed against cannot be evaluated by anyone. This is why we publish the complete right set alongside every model.

Temporal sanity matters too: a source that postdates the target cannot be its ancestor, and it is easy to assemble a model that is arithmetically fine and chronologically impossible.

A worked example#

Suppose you are modelling a Bronze Age population from the Balkans and you propose two sources: a local Neolithic farmer population and a steppe pastoralist population. You run it against a right set of a dozen deliberately distant outgroups and get:

p-value: 0.412
Farmer_Neolithic   0.612 ± 0.031   Z = 19.7
Steppe_Pastoralist 0.388 ± 0.031   Z = 12.5

Read it in this order:

  1. p = 0.412. Comfortably admissible. The data do not contradict a two-source mixture of these populations.
  2. Both standard errors are 0.031. Tight. This file has the coverage to resolve the split.
  3. Both z-scores are large. Each source is unambiguously distinguishable from zero, so this is a genuine two-way mixture rather than one source plus noise.

Now suppose instead you had seen:

p-value: 0.088
Farmer_Neolithic   0.907 ± 0.094   Z = 9.6
Steppe_Pastoralist 0.093 ± 0.094   Z = 1.0

The p-value still clears the conventional 0.05 bar, so a careless reader calls this a 91/9 mixture. It is not. The second source's weight is smaller than its own standard error — |Z| of 1.0 means it is statistically indistinguishable from zero. The honest reading is that this is a one-source model, and the correct next step is to test it as one.

That test has a name.

Nested models: is the extra source earning its place?#

A nested model is a simpler model contained inside a more complex one — most often the same model with one source removed. If the simpler version also passes, the extra source is not doing work, and the simpler model is the one to report.

This is where most over-complicated ancestry stories collapse. Adding sources tends to improve fit mechanically. The discipline is to keep only the components that survive removal.

Our reports publish this test rather than just performing it: the Reading view of every qpAdm report carries the nested-model table (every simpler model with its refitted weights, p-value and feasibility) and the rank test, alongside the chi-square, degrees of freedom and each source's 95% confidence interval, downloadable as plain text. The table is walked through in The model record explained.

Reading a rejection#

A rejected model is a result, not a malfunction. Most models anyone can think of will fail, and the failure is informative: it says the proposed ancestry story is not compatible with the data given those outgroups.

When a model fails, the productive moves are, in order:

  1. Check the right set. Wrong or too-close outgroups reject good models as readily as they accept bad ones.
  2. Check chronology. A source that postdates the target invalidates the model regardless of fit.
  3. Reconsider composition, not just place. Sources are populations with a genetic makeup, not pins on a map. The right proxy is often a group from elsewhere with the right ancestry profile.
  4. Try a simpler model. If a three-way model fails, a two-way one may not.
  5. Accept that some questions are unanswerable with this file. Coverage bounds what can be resolved.

⚠️ What is not a legitimate move is rotating sources and outgroups automatically until something passes. Automated rotation has a high false-discovery rate: run enough models and some will clear any threshold by chance. We built rotation here and then deliberately removed it — every model we publish is composed and checked by hand, which is a slower process and a defensible one.

The conditions a publishable model should meet#

  1. Sources well defined and representative of the ancestral groups being modelled.
  2. Enough marker coverage on the target for the estimates to mean anything.
  3. An appropriate, genuinely distant right set — reported alongside the result, with each outgroup's sample count.
  4. A p-value indicating admissible fit.
  5. Standard errors small enough that the weights are informative.
  6. Z-scores high enough that each source is distinguishable from zero.
  7. Nested alternatives tested — and the table of them published — so no source is carried that does not earn its place.
  8. Chronological and archaeological plausibility.

Our own published models are graded against one explicit bar rather than a vague "good fit": the p-value, every source's |Z| and every source's standard error must all clear it, in every era. The four depth tiers of our qpAdm analysis share that bar and differ only in how far the analyst searches past the first model that clears it — the analyst hours spent finding the best one. The report's content, including the full model record and the analyst's explanation, is identical at every tier. Because SE is bound by coverage, a sparse file limits how tight the intervals can be, which is why we say so before purchase rather than after.

Trying it yourself#

You can run real ADMIXTOOLS 2 — f2, f3, f4 and D statistics (the arithmetic explained), qpWave, qpAdm and admixture-graph fitting — against a reference panel in the browser, free, in the AdmixTools 2 Lab. No R installation, no genotype panel to source (the R route, for those who want it, is its own tutorial). Expect rejections; that is the method working.

If you are weighing this against coordinate methods, the comparison is set out in qpAdm vs Global25, and the vocabulary is defined in the glossary.

From €29.99 · one-time
The tested version of this question
A qpAdm model composed, run and checked by hand against AADR v66, published with its p-value, every source's standard error and z-score, and the full right set, so the result can be argued with.
See the qpAdm analysis

Further reading#

qpAdm in practice#

For worked examples showing what these conditions look like applied to real populations, see our studies of Albanian DNA and ancient origins, Roman and Slavic-period Balkan ancestry, the diverse army at ancient Himera, the Picenes of Iron Age Italy, present-day Balkan populations, modern Anatolian Turks, and the Deep Maniots of southern Greece.


Related posts

Every number in your qpAdm report: the model record explained
Every number in your qpAdm report: the model record explained

What the full qpAdm model record in an Ancestrify report means — chi-square, degrees of freedom, f4 rank, SNP counts, jackknife blocks, 95% confidence intervals, the nested-model table and the rank test — and how to read the plain-text download.

11 min read
How to read qpAdm results: p-value, Z-score and SE
How to read qpAdm results: p-value, Z-score and SE

A plain reading guide to the three numbers in every qpAdm result — what the p-value tests, what a standard error bounds, what a Z-score rules out — with worked examples and the mistakes that make a passing model wrong.

4 min read
qpAdm vs Global25: what each method can and cannot tell you
qpAdm vs Global25: what each method can and cannot tell you

Global25 fits your coordinate to a mixture and always returns percentages. qpAdm tests a model against allele-frequency statistics and can reject it. A practical comparison of when each one is the right instrument.

6 min read
Back to all stories
Ancestrify

Combining cutting-edge genomic science with rich historical records to map your ancestry across generations and continents.


© 2026 Ancestrify. All rights reserved. · Ancestrify is a trading name of Andi Thomaj, a sole trader registered in Tiranë, Albania · NUIS M61725001N
Card payments processed by POK Payments (RPay Ltd)VISAMASTERCARD