---
title: "How many SNPs does qpAdm need? Coverage, overlap and the allsnps lever"
description: "The number that governs a qpAdm model is never your file's marker count — it is the intersection with the ancient panel, per statistic. The published coverage numbers, the allsnps table, and what a consumer chip can honestly support."
canonical: https://www.ancestrify.io/blog/how-many-snps-does-qpadm-need
date: 2026-08-31T10:08:00+00:00
author: "Andi Thomaj"
---

# How many SNPs does qpAdm need? Coverage, overlap and the allsnps lever

Every qpAdm question about data quality — can my file support this, why is my standard error so
wide, what does low coverage actually break — reduces to one number, and it is never the number
people expect. Not your file's marker count, not the ancient panel's size: the **intersection**
that survives merging, per statistic. This post puts the published figures in one place, because
they are scattered across method papers and they decide, before any analyst touches anything,
[what your model's error bars can be](/blog/how-to-read-qpadm-p-value-z-score-standard-error).

## The panels, for scale

The reference sizes that matter: the 1240K capture array reads about **1,233,013** sites — the
standard for ancient samples in the [AADR](/blog/aadr-allen-ancient-dna-resource-explained) — and
the Human Origins array about **597,573** (the classic modern-reference panel). Consumer chips
(23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA) genotype roughly 600–700k markers each — but
chosen for medical and genealogical relevance, not for overlap with ancient-DNA panels.

So when your file [merges into the reference](/blog/qpadm-from-23andme-raw-data), only positions
present in *both* survive: typically a few hundred thousand sites against 1240K-captured
ancients — and much less against low-coverage ancient samples, whose own missingness intersects
again. The merge, not the chip, sets the model's information budget. (Chip generations differ
meaningfully here, which is why the free [file check](/lab/file-check) reports usable markers per
chromosome before anything is ordered.)

## What the simulations say the budget buys

The Harney et al. 2021 audit gives the clean benchmarks. At 1 million SNPs with ten diploid
individuals per population, qpAdm's weights land within three standard errors of the truth in
99.3% of runs, with **average SE ≈ 0.009**. Cut the data to 100K or 10K SNPs and the estimates
stay *unbiased* — but the spread widens steadily. Coverage does not bend a qpAdm model; it
loosens it. That is exactly what a wide SE means, and why
[the publish bar here is stated in SE terms](/qpadm): SEs are set by
the merge before any search begins, and no amount of analyst effort shrinks an error the file has
already fixed.

Three robustness results from the same audit are worth pinning, because they cover the worries
people actually have. **Pseudohaploid data** (standard for ancient genomes) has little impact on
the estimates. **Ancient-DNA damage** is tolerable when all populations carry similar rates — the
real hazard is mixing ancient and present-day populations carelessly in one model, where
*differential* damage biases the statistics. And **single-individual populations** are usable —
including single-individual targets, the consumer case — provided their honest, wider SEs are
believed rather than resented.

## The allsnps lever

With sparse data, the biggest single decision is how missingness is handled. Classic qpAdm's
`allsnps: YES` computes each [f4-statistic](/blog/f4-statistics-explained) on every site
available *for that statistic's four populations*, instead of restricting all statistics to the
one set of sites present everywhere. Harney et al. measured the difference:

| Missingness | mean SE, allsnps: YES | mean SE, allsnps: NO |
|---|---|---|
| 25% | 0.006 | 0.006 |
| 80% | 0.015 | 0.025 |
| 85% | 0.020 | 0.066 |
| 90% | 0.035 | 9.994 |

That last row is not a typo: without allsnps, at 90% missingness the model carries no information
at all. The trade is that each statistic sits on its own SNP set, so per-f4 counts differ and the
covariance is approximated — a price worth stating and almost always worth paying on real ancient
data. (In [ADMIXTOOLS 2](/blog/run-qpadm-in-r-admixtools2), `allsnps = TRUE` requires genotype
input rather than precomputed f2 blocks — a classic setup trap.)

## What a consumer file honestly supports

Putting the numbers together for the case this site exists for — a modern chip file as target,
ancient sources, [distal by construction](/blog/qpadm-distal-vs-proximal):

- **A dense, healthy chip file** (recent 23andMe v5, AncestryDNA, MyHeritage) merges to an
  intersection that supports publishable models: SEs under 0.10 — our bar for every source in
  every published model, tier regardless — are realistic, and well-sampled sources often run far
  tighter.
- **A thin or old file** may fix SEs above the bar before anyone starts. The honest response is
  the one we give in the [checklist for choosing a service](/blog/where-to-buy-qpadm-analysis#a-checklist-for-choosing): run the free
  [file check](/lab/file-check) first, and if the file cannot support the analysis, keep your
  money or upgrade the input — a [whole-genome VCF](/blog/upload-whole-genome-vcf-ancestry)
  raises the intersection substantially and is the one upgrade that changes the arithmetic.
- **The community floor** — avoid samples under ~50k overlapping SNPs — is a practitioner rule of
  thumb for reference samples, and a useful sanity line: below that, nothing about a model's
  numbers deserves the word "estimate".

The through-line: SNP counts do not make models right or wrong — sources and
[outgroups do that](/blog/how-to-choose-qpadm-sources-and-outgroups). Counts decide how *sharp*
the statement can be. [Ancient Ancestry](/qpadm), our qpAdm analysis, reports the per-statistic SNP counts in the
[model record](/blog/qpadm-model-record-explained) for exactly that reason: the information
budget is part of the result, and a reader should never have to guess it.

Terms used here are defined in the [glossary](/glossary).

## References

- Harney, É., Patterson, N., Reich, D. & Wakeley, J. (2021). Assessing the performance of qpAdm.
  *Genetics*, 217(4), iyaa045.
- Reich Lab. Allen Ancient DNA Resource release notes (site counts: 1,233,013 / 597,573).
- Lazaridis, I. et al. (2014). Ancient human genomes suggest three ancestral populations for
  present-day Europeans. *Nature*, 513, 409–413.
