Ancestrify
All stories

qpadm

By Andi Thomaj
3 min read

qpAdm troubleshooting: the errors, warnings and weird outputs, decoded

Negative weights, SE 9.99, every model rejected, every model passing, infeasible popdrop rows, allsnps confusion — the standard failure gallery of qpAdm runs and what each symptom actually indicates.

qpadmmethodologyguide

  1. Negative weights
  2. SE = 9.994, or errors wider than the weight
  3. Every model is rejected
  4. Every model passes
  5. Popdrop rows all infeasible, or the nested model embarrasses the full one
  6. p = 0 exactly, or p = NA
  7. The meta-fix
  8. References

qpAdm fails in informative ways — that is its virtue — but the information arrives as cryptic numbers: a weight of −0.31, an SE of 9.994, a p-value of exactly 0, a popdrop table where nothing is feasible. This is the failure gallery: symptom, meaning, fix. It assumes the basics (the method, the three numbers) and complements why models get rejected, which covers the good failures. These are the other kind.

Negative weights#

Symptom: a source at −0.31, the others inflated to compensate. Meaning: the least-squares solution lives outside the simplex — no non-negative mixture of these sources reproduces the target's f4 pattern. Usually the source pool brackets the target wrongly (both sources sit on the same side of it along some axis), or a needed stream is missing entirely. Fix: treat the sign as a diagnosis, not a rounding error. Rethink the pool — the negative source is often related to the right answer without being it. And do not reach for the constrained = TRUE option to make the minus sign go away: a constrained fit hides exactly the information the sign carried. Diagnose unconstrained; publish only models that are feasible without being forced.

SE = 9.994, or errors wider than the weight#

Symptom: a weight of 0.4 ± 10. Meaning: the information budget collapsed. Either the SNP intersection is tiny — the coverage arithmetic — or allsnps is off while the data are sparse (the audit's measured example: SE 9.994 at 90% missingness without allsnps, 0.035 with), or two sources are near-cladal and the model cannot apportion their shared stream. Fix: in order — check per-f4 SNP counts in the output; enable allsnps = TRUE (in ADMIXTOOLS 2 that requires genotype-prefix input, not precomputed f2 blocks — the classic silent trap); qpWave the source pair for cladality and drop one if they merge.

Every model is rejected#

Symptom: p < 0.05 across the board, including the historically obvious candidates. Meaning: three suspects, in frequency order. The right set contains a population entangled with the left (gene flow into target or sources after separation — the prohibition list); the right set is too large (the measured onset: ~30 added references begin rejecting true models); or the target genuinely needs a stream nothing in the pool provides. Fix: audit the rights before mourning the model — remove the entangled reference, or rebuild on a standard spine. If rejection survives a clean right set, the pool is missing a stream: that is a finding, and the rank test will say how many streams you are short.

Every model passes#

Symptom: four different stories, all p > 0.3. Meaning: the test has no power — right set too small (degrees of freedom = outgroups − sources; near zero at the floor), or symmetric to the sources, so nothing constrains the fit. Passing everything is not generosity; it is silence. Fix: add outgroups that are differentially related to the competing sources — the published example added one Neolithic Anatolian reference and cut SEs threefold. Distinguishing between passing models is then margin work, never p-ranking: the best p-value identifies the true model only 48% of the time.

Popdrop rows all infeasible, or the nested model embarrasses the full one#

Symptom: the sub-model table shows every reduced model infeasible — or worse, a simpler model passing comfortably. Meaning: if all sub-models fail and the full model passes with every source significant, that is the good outcome: every source is earning its place. If a simpler model passes, the extra source was decoration — the p_nested column is the referee, and the discipline is lowest rank first. Fix: publish the simplest model the data cannot reject. Nobody defends a weight of 0.06 ± 0.05 in an argument.

p = 0 exactly, or p = NA#

Symptom: a p-value of 0.000000, or nothing at all. Meaning: p = 0 to machine precision is an enormous chi-square — usually a left/right entanglement or a data-processing fault (build mismatch, strand flips, a merge gone wrong), not a merely wrong model. NA means degrees of freedom hit zero or the covariance matrix could not be inverted (too few blocks, too few usable SNPs). Fix: verify the merge itself (population labels, reference build, per-population SNP counts) before touching model composition. For consumer files, the pre-flight is free: file check.

The meta-fix#

Half of this gallery is one lesson wearing six costumes: the model is a machine with two inputs, and most breakage is input breakage. Sources decide what can be estimated; rights decide what can be tested; coverage decides how sharply. Our paid analysis exists because walking a real file through this gallery to a defensible model is hours of hand work — every published model ships with its full record precisely so the diagnostics above are visible rather than trusted. And if you want to hit these errors yourself, instructively, on your own merged genome: the Model Lab will oblige — rejection included, as a feature.

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

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.
  • Flegontova, O. et al. (2025). Performance of qpAdm-based screens for genetic admixture. Genetics, 230(1), iyaf047.
  • ADMIXTOOLS 2 documentation: qpadm() reference (weights, rankdrop, popdrop tables).

Related posts

Learn qpAdm: the complete guide, from zero to defensible models
Learn qpAdm: the complete guide, from zero to defensible models

A structured learning path through everything qpAdm — what to read in what order, from the f4-statistics underneath to running models in R, choosing outgroups, reading results and knowing the method's measured limits.

3 min read
qpAdm best practices: the current checklist, with the numbers behind every rule
qpAdm best practices: the current checklist, with the numbers behind every rule

The definitive working checklist for qpAdm in 2026 — temporal stratification, right-set construction, lowest-rank-first search, composite feasibility and reporting standards — each rule carrying its measured justification from the 2021–2025 audit literature.

4 min read
Classic ADMIXTOOLS vs ADMIXTOOLS 2: why your qpAdm numbers differ, and how to match them
Classic ADMIXTOOLS vs ADMIXTOOLS 2: why your qpAdm numbers differ, and how to match them

Same model, different p-value: the real differences between original qpAdm and ADMIXTOOLS 2 — allsnps semantics, fudge_twice, f2 precomputation — and the settings that reproduce classic behaviour when you need to.

3 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