How to read qpAdm results: p-values, weights and standard errors
What a qpAdm p-value, weights and standard errors mean, when a model is feasible, and the checks that separate a good model from a lucky fit.
Updated 3 min read
A qpAdm model is feasible when its p-value is above your threshold (usually 0.05) and every weight is between 0 and 1. A feasible model is consistent with the data; it is not proven. To trust it, check its standard errors, the nested models and the competing models that fail.
This guide assumes you know what a qpAdm model is. If not, start with What is qpAdm?.
The p-value: does the model fit?
qpAdm tests whether the target's f4-statistics against the right populations are explained by the sources. The p-value is the probability of seeing a misfit at least this large if the model were true.
- p < 0.05 (or 0.01): the model is rejected. The sources do not explain the target, as seen from the right populations. Often a source is missing, or a source is the wrong proxy.
- p ≥ 0.05: the model is not rejected. This is the result you want, but it is weaker than it sounds.
A high p-value can also mean the test has no power: too few SNPs, a low-coverage target, or right populations that cannot tell your sources apart. In that case almost any model passes.
Weights: how much ancestry from each source
The weights (also called coefficients or ancestry proportions) sum to 1. A model with weights of 0.15, 0.55 and 0.30 says the target is 15% from the first source, 55% from the second and 30% from the third.
Weights outside 0 to 1 are a warning. A negative weight means the model only fits by subtracting a source, which is not a real history. Treat a model with a negative weight as infeasible, even if its p-value is high.
Standard errors: how precise the weights are
Each weight comes with a standard error from a block jackknife. A weight of 0.30 ± 0.02 is precise. A weight of 0.30 ± 0.15 is not: the true value could be anywhere from about 0 to 0.6.
Large standard errors usually mean the right populations do not separate the sources well, or the target has few SNPs. Adding a right population that is related differently to the two hard-to-separate sources often helps. See Choosing right populations.
Nested models: is every source needed?
qpAdm also reports nested models, each with one source dropped. If a model without source S3 is still feasible, S3 may not be needed. Prefer the simplest model that fits, unless you have another reason to keep the extra source.
Checks before you report a model
- Competing sources. Replace each source with a related population and run again. If many alternatives fit equally well, your data cannot tell them apart.
- Rotation. Move candidate sources into the right list. A source that still fits when its neighbours are references is better supported.
- Drop one right population at a time. If the model fails when one right population leaves, the fit depends on that population.
- Coverage. Count the SNPs the run used. As a rough guide, a run on fewer than about 100,000 SNPs gives large standard errors and a weak test.
Nexju runs these checks for you on the Pro plan, as qpAdm robustness checks: dropping right populations, competing source sets and adding a source.
A worked example
Suppose you model English with Luxembourg_Loschbour_Mesolithic, Turkey_N and Russia_Samara_EBA_Yamnaya as sources and a panel of distant right populations. An illustrative result: p = 0.3, weights near 0.1, 0.4 and 0.5, and standard errors near 0.02. This model is feasible and precise.
Now drop the Yamnaya source. If the two-source model gets p = 1e-10, steppe-related ancestry is required. That rejected model is as informative as the feasible one.
References
- Harney É. et al. 2021. Assessing the performance of qpAdm. Genetics 217. doi:10.1093/genetics/iyaa045
- Haak W. et al. 2015. Massive migration from the steppe was a source for Indo-European languages in Europe. Nature 522. doi:10.1038/nature14317