qpGraph and admixture graphs, explained
An admixture graph is a population tree with mixture edges. How qpGraph fits one, how to read the worst Z-score, and why many graphs can fit.
Updated 2 min read
An admixture graph is a model of population history: a tree of population splits, with extra edges where populations mixed. qpGraph fits such a graph to all the f-statistics between the populations in it, and reports how well it fits.
qpGraph is part of ADMIXTOOLS (Patterson et al. 2012). ADMIXTOOLS 2 (Maier et al. 2023) added a fast reimplementation and an automatic graph search.
What a graph contains
- Nodes: the populations you sampled (leaves) and their unsampled ancestors (internal nodes).
- Drift edges: branches whose length is an amount of genetic drift.
- Admixture edges: two edges that join at one node, each with a weight. The weights sum to 1, as in qpAdm.
How qpGraph fits a graph
Every f2, f3 and f4 statistic between the graph's populations can be written as a sum of branch lengths. qpGraph chooses the branch lengths and admixture weights that best predict the observed statistics. It then compares each predicted statistic with the observed one.
Reading the fit
- Worst Z-score: the largest difference between an observed and a predicted f-statistic, in standard errors. A worst |Z| below 3 is the usual criterion for a graph that fits.
- Score: a weighted sum of the squared differences over all statistics. Lower is better. Use it to compare graphs on the same populations.
- Admixture weights and branch lengths: read them only for a graph that fits.
Many graphs fit
Maier et al. 2023 showed that, for realistic numbers of populations, many graphs with different topologies fit the data about equally well. A graph that fits is one possible history, not the history.
To make a graph claim robust:
- Search the graph space automatically, for example with ADMIXTOOLS 2's
find_graphs, and collect every graph that fits. - Report the features the fitting graphs share, such as "Population X always receives an admixture edge from a lineage related to Y".
- Compare a graph with and without a disputed edge, using the score difference and a bootstrap.
When to use qpGraph or qpAdm
- Use qpAdm when you want ancestry proportions for a target and have a few candidate sources.
- Use qpGraph when you want a joint model of several populations, including the relations between sources.
- Use both: a graph that fits should give admixture weights that agree with qpAdm models of the same target.
Running qpGraph
ADMIXTOOLS runs qpGraph from a graph file, and ADMIXTOOLS 2 with qpgraph and find_graphs in R. Nexju fits qpGraph admixture graphs on the Pro plan, and searches and compares graphs on the Max plan.
References
- Patterson N. et al. 2012. Ancient admixture in human history. Genetics 192. doi:10.1534/genetics.112.145037
- Maier R. et al. 2023. On the limits of fitting complex models of population history to f-statistics. eLife 12. doi:10.7554/eLife.85492
- Lipson M. 2020. Applying f4-statistics and admixture graphs: theory and examples. Molecular Ecology Resources 20. doi:10.1111/1755-0998.13230