← Guides Bottleneck Effect

Core 10 min read Open the module

The bottleneck effect

A crash to a few survivors resamples the gene pool, and regrowth restores the headcount but not the lost diversity.

Read first: Genetic drift

Three steps on one population

A bottleneck is a sudden fall in population size followed by recovery. The module runs it in three steps. Initialize creates N₀ individuals at one locus with alleles A and a. Each genotype is drawn in Hardy-Weinberg proportions for the starting frequency p₀. Bottleneck! keeps Nb survivors, chosen at random without replacement. Recover regrows the population to the target size.

Nothing selects the survivors. They are a random sample of N₀ individuals, so by chance alone their allele frequency differs from the original one. Nothing in the module adds alleles, so an allele that is missing from the survivors is gone for good. The starting population is itself a random draw. For N₀ = 200 its frequency typically lies within √(0.25/400) = 0.025 of p₀, so the Before bar is close to the nominal value but not equal to it.

This page uses N₀ = 200, Nb = 5 and p₀ = 0.5 unless it says otherwise. A recovery generation adds 30% of the current size, rounded up, until the target is reached. Each offspring gets one gamete from each of two parents picked at random from the population as it stands.

The stats bar reports three numbers. N is the count of individuals. p(A) is the frequency of A, (2 × AA + Aa)/2N. H is the observed share of heterozygous individuals, Aa/N. H is a count of people, not the expected value 2pq.

Recovery from five survivors

Figure 1. Population size after each recovery generation, from 5 survivors to 200 individuals. The sizes are 5, 7, 10, 13, 17, 23, 30, 39, 51, 67, 88, 115, 150, 195 and 200, which takes 14 generations.

How far the survivors stray

Choosing Nb individuals from the population is sampling. The allele frequency of the survivors has variance p(1 − p)/2Nb, because Nb diploid survivors carry 2Nb gene copies. For Nb = 5 and p = 0.5 the standard deviation is √(0.25/10) = 0.158. For Nb = 50 it is √(0.25/100) = 0.05.

A single bottleneck gives one draw from that spread. The two histograms below repeat the crash 400 times and bin the survivors' frequency of A.

Five survivors carry 10 gene copies, so p can only be 0, 0.1, 0.2 and so on up to 1. A single copy is a tenth of the gene pool. A rare allele at p = 0.1 that turns up in 4 of those 10 copies is suddenly at 0.4, four times its old frequency.

Recovery also has a cost. The population is small for several generations on the way back up, and each of those generations adds its own sampling variance, p(1 − p)/2N at the current size N. The effective size over the whole episode is close to the harmonic mean of the sizes, 1/Ne = mean of 1/N. For the 15 sizes of the first figure that mean is 19.9. It is about a tenth of the final 200, so the population drifts as if it were 20 individuals.

Five survivors, 400 crashes

Figure 2. Frequency of A among 5 survivors, from a population of 200 at p = 0.5, over 400 runs. The standard deviation is 0.159. One run falls below 0.2 and 20 land at 0.8 or above.

Fifty survivors, 400 crashes

Figure 3. The same experiment with 50 survivors. The standard deviation is 0.049, and 380 of 400 runs fall between 0.4 and 0.6. Ten times more survivors cut the spread by about √10.

Exercise

Watch the crash and the recovery

Set Initial N 200, Survivors 5, Initial p 0.5 and Recovery N 200. Press Initialize, Bottleneck! and Recover. Read p(A) and H in the stats bar at each stage. Repeat five times, pressing Initialize again after each run.

What to expect. The p after the crash lands anywhere from about 0.2 to 0.8 across runs. H after recovery averages near 0.42, below the 0.50 at the start. The Before and After bars of the timeline rarely match. In the timeline, bar height follows N, and the colours split each bar into aa, Aa and AA counts. The Bottleneck bar is the narrowest part of the funnel.

Open the walkthrough step →

Exercise

Lose the rare allele

Set Initial p 0.9, Survivors 5 and Recovery N 200. Run Initialize, Bottleneck! and Recover about ten times.

What to expect. About 35% of runs, 3 or 4 in ten, end with p(A) exactly 1.0. All five survivors must be AA, and that has probability 0.9^10 = 0.349. Recovery never brings the allele a back.

Open the walkthrough step →

Summary

  • Survivors are a random sample, so their allele frequency has variance p(1 − p)/2Nb.
  • Five survivors give a standard deviation of 0.158 around p = 0.5, and 50 survivors give 0.05.
  • Recovery restores the headcount, 5 to 200 in 14 generations, but drift continues while the population is small.
  • The share of heterozygotes averages 0.42 after recovery from 5 survivors, against 0.495 from 50.
  • A rare allele can vanish in the crash. Nothing in the module re-creates it.