← Guides Pool-Seq Allele Frequencies

Core 14 min read Open the module

Pooled sequencing and allele frequencies

A pool is sampled twice, once when its chromosomes are drawn and once when its reads are drawn, and only the second error shrinks with depth.

Read first: Genetic drift

Two rounds of sampling

Pool-seq mixes the DNA of n diploid individuals into one library and sequences it. The result is cheap allele frequencies, but no individual genotypes. The estimate of a population frequency p comes from two rounds of sampling.

In round one, the pool holds 2n chromosomes drawn from the population. The number of A copies among them, k, follows a Binomial(2n, p) distribution, so the pool frequency q = k/2n differs from p by chance. This is the same sampling error as drift. In round two, C reads are drawn from the pool, each showing A with probability q, plus a small misreading rate ε. The estimate is p̂ = a/C, where a counts reads showing A, corrected for ε.

At the defaults of the module (p = 0.3, n = 20, mean depth 30, ε = 0.005) a pool has 40 chromosomes. Reading them with 30 reads cannot reveal more than the pool holds.

Two thousand pools at one site

Figure 1. The estimate p̂ from 2000 replicate pools at p = 0.3, seed 1. The mean is 0.300, so the estimator is unbiased. The spread is wide: the simulated SD is 0.112 and the theoretical SD is 0.112. The dots mark the exact expected counts per bin.

Where the variance comes from

The variance of p̂ adds the two rounds: Var = pq/2n + [pq(1 − 1/2n) + error term] × E[1/C]. With p = 0.3, pq = 0.21. For a fixed depth C = 40 = 2n and no error, the pool term is 0.21/40 = 0.00525 and the read term is 0.21 × (1 − 1/40)/40 = 0.00512. Reads cost as much as the pool: 51% of the variance comes from the pool and 49% from the reads, and the SD is 0.102.

Deeper reads shrink only the second term. At C → ∞ the variance falls to pq/2n, so the SD reaches a floor of √(0.21/40) = 0.072 here. That floor is set by the 40 chromosomes in the pool, and no depth lowers it. The effective number of chromosomes, pq divided by the variance, never exceeds 2n. At the defaults it is 16.8 of 40, because with a Poisson depth of mean 30, reads and misreading still make 58% of the variance.

The practical rule: when C is below 2n, reads dominate and depth helps. When C is above 2n, the pool dominates and a bigger pool helps. At the defaults, doubling the depth to 60 lowers the SE from 0.112 to 0.094, and doubling the pool to 40 individuals lowers it to 0.100. Reads dominate here, so depth helps more.

Standard error against depth

Figure 2. Standard error of p̂ against mean depth at p = 0.3 and ε = 0.005, for a pool of 2n = 40 chromosomes (ink) and for pools of 200 and 20 (shaded lines). The points are simulated with 500 pools per depth for 2n = 40. The horizontal line is the floor √(pq/2n). Theory gives 0.170 at 10×, 0.112 at 30×, 0.086 at 100× and 0.074 at 1000×, close to the floor of 0.072.

Sampling noise looks like differentiation

Now take two populations with true differentiation F_ST = 0.05 and sequence one pool of each. F_ST measures how much of the allele-frequency variance lies between populations. A naive estimate takes the read frequencies of the two pools as if they were the population frequencies. But each pool frequency also carries pool-sampling and read-sampling noise, and noise in the difference between two pools adds to the between-population signal.

The expected naive value is F + (1 − F)[1/2n + (1 − 1/2n)E(1/C)] plus an error term. With F = 0.05, 2n = 40 and infinite depth it is 0.05 + 0.95/40 = 0.074. Depth removes the read part only. The pool part, (1 − F)/2n = 0.024, stays. A pool-corrected estimator subtracts the estimated sampling variance of each pool, and an analysis-of-variance estimator (Hivert et al. 2018) does the same from raw read counts.

Three estimators of F_ST

Figure 3. F_ST estimates against depth, 1000 independent SNPs per scan, 6 scans, true F_ST = 0.05, 2n = 40 per pool. The naive estimate is 0.108 at 30×, against an expected 0.107, and still 0.077 at 500×. The pool-corrected estimate is 0.051 at 30× and the analysis-of-variance estimate is 0.049.

Exercise

Make reads cost as much as the pool

In One pool mode set Cov to Fixed, C to 40 and Error to 0, with n = 20 and p = 0.3. Read the variance bar. Then set C to 400.

What to expect. At C = 40 the theoretical SD is 0.102, with 51% of the variance from the pool and 49% from reads, and the effective number of chromosomes is 20.3 of 40. At C = 400 the SD is 0.076 and the pool share is 91%. Ten times more reads buys 25% less SD.

Open the walkthrough step →

Exercise

Measure the bias with no differentiation

Switch to Two pools, set FST to 0 and Error to 0, and run. Compare the naive and corrected estimates at 30× and at 500×.

What to expect. The true F_ST is 0, yet the naive estimate is 0.059 at 30× and 0.027 at 500×. The corrected and analysis-of-variance estimates stay within 0.002 of 0 from 20× up.

Open the walkthrough step →

What to keep

  • A pool estimate has two error sources: the 2n chromosomes drawn from the population and the C reads drawn from them. The variance is pq/2n plus a read term that shrinks as 1/C.
  • Depth cannot lower the SE below √(pq/2n). At p = 0.3 and 2n = 40 that floor is 0.072, and the SE is 0.074 at 1000×.
  • Reads dominate the variance below C = 2n and the pool dominates above it, so the cheaper gain comes from whichever side is larger.
  • Naive F_ST from read frequencies is inflated by (1 − F)/2n even at infinite depth, 0.024 here. Pool-corrected and analysis-of-variance estimators remove it.