← Guides Wahlund Effect

Core 9 min read Open the module

The Wahlund effect

Pooling subpopulations that differ in allele frequency leaves too few heterozygotes, by exactly twice the variance of p among them.

Read first: Genotype frequencies and Hardy-Weinberg

Every part is in equilibrium, the whole is not

Suppose a species lives in five local populations. Inside each one mating is random, so each is in Hardy-Weinberg proportions for its own allele frequency. A sample that mixes individuals from all five does not match Hardy-Weinberg for the mixed allele frequency. It has too few heterozygotes and too many homozygotes. This is the Wahlund effect, named after Sten Wahlund, who described it in 1928.

The module is a calculation, not a simulation. There is no randomness, no generations and nothing to seed. You enter the frequency of allele A in five subpopulations (p₁ to p₅), an inbreeding coefficient f that applies inside each, and it pools the five with equal weights. Press Run to see the pooled genotype frequencies next to the Hardy-Weinberg expectation.

The defaults are p = 0.1, 0.3, 0.5, 0.7 and 0.9, with f = 0. The pooled allele frequency is the mean, p̄ = 0.5.

Five subpopulations pooled

Figure 1. Pooled genotype frequencies (bars) against the Hardy-Weinberg expectation from p̄ = 0.5 (dashed line). Aa is 0.34 where 0.50 is expected. AA and aa are each 0.33 where 0.25 is expected.

Why the deficit is 2 Var(p)

Inside subpopulation i the heterozygote frequency is 2pᵢ(1 − pᵢ). The pooled frequency is the average of these. The average of pᵢ(1 − pᵢ) is p̄(1 − p̄) minus the variance of pᵢ, because the average of pᵢ² is p̄² plus Var(p). So the pooled Aa frequency is 2p̄(1 − p̄) − 2Var(p).

For the defaults Var(p) = 0.08. The Hardy-Weinberg expectation is 2 × 0.5 × 0.5 = 0.50, and the pooled heterozygote frequency is 0.50 − 2 × 0.08 = 0.34. Each homozygote class is in excess by Var(p), which is 0.08, so AA and aa are 0.25 + 0.08 = 0.33. The deficit of Aa equals the two excesses together, so the three frequencies still add up to 1.

The proportional deficit is F_ST = Var(p)/[p̄(1 − p̄)]. For the defaults that is 0.08/0.25 = 0.32. A pooled sample would show 1 − 0.34/0.50 = 0.32, the same number. The pooled sample looks 32% inbred, although nobody mates with a relative. The cause is population structure, and a test of Hardy-Weinberg on the pooled sample would reject.

At the extreme, subpopulations 1 and 2 are fixed for a (p = 0) and 3 to 5 are fixed for A (p = 1). Every individual is homozygous, so pooled Aa is 0.00 where 0.48 is expected, and F_ST = 1.

Similar subpopulations

Figure 2. Subpopulations at 0.40, 0.45, 0.50, 0.55 and 0.60. Var(p) is 0.005, so the deficit is 0.01: Aa is 0.49 where 0.50 is expected, and F_ST = 0.02. The bars and the line almost coincide.

Exercise

Shrink the spread

Open the module and run the defaults. Then set p₁ to p₅ to 0.4, 0.45, 0.5, 0.55 and 0.6 and run again. Finally set all five to 0.5.

What to expect. The defaults give Var(p) 0.08, Aa 0.34 against 0.50 and F_ST 0.32. The narrow set gives Var(p) 0.005 and F_ST 0.02. Five equal values give Var(p) 0, F_ST 0, and observed equal to expected. Step 5 of the walkthrough shows the narrow set.

Open the walkthrough step →

Inbreeding inside subpopulations

The coefficient f describes mating inside each subpopulation. With f > 0, subpopulation i has AA = p²(1 − f) + pf, Aa = 2pq(1 − f) and aa = q²(1 − f) + qf. Heterozygotes are reduced by the factor 1 − f in every subpopulation. The pooled Aa frequency is then (1 − f)(2p̄(1 − p̄) − 2Var(p)).

The three coefficients are linked. F_IS = f measures departure inside the subpopulations. F_ST measures the spread between them, from Var(p) alone. F_IT = 1 − (1 − F_ST)(1 − F_IS) measures the whole deficit in the pooled sample. With f = 0.1 on the default frequencies, F_IT = 1 − 0.68 × 0.90 = 0.388. Pooled Aa is 0.90 × 0.34 = 0.306, and 1 − 0.306/0.50 = 0.388 again.

The pooled sample alone cannot say how much of 0.388 is structure and how much is inbreeding. Both reduce heterozygotes in the same way. Separating them needs the subpopulation labels.

Structure plus inbreeding

Figure 3. The default frequencies with f = 0.1. Pooled Aa falls from 0.34 to 0.306, and AA and aa rise to 0.347 each. F_IS = 0.10, F_ST = 0.32 and F_IT = 0.388.

Exercise

Inbreeding without structure

Set all five frequencies to 0.4 and f to 0.3, then run.

What to expect. Var(p) is 0 and F_ST is 0. Pooled Aa is 0.336, which is 0.48 × 0.7. The whole deficit comes from F_IS = 0.30. Step 6 of the walkthrough adds inbreeding to the default structure.

Open the walkthrough step →

Summary

  • Subpopulations in Hardy-Weinberg, pooled, show a heterozygote deficit of 2Var(p): 0.34 against 0.50 for the default frequencies.
  • Each homozygote class is in excess by Var(p), so the three pooled frequencies still sum to 1.
  • F_ST = Var(p)/[p̄(1 − p̄)] is the proportional deficit: 0.32 for the defaults, 0.02 for subpopulations at 0.40 to 0.60, 1 when every subpopulation is fixed.
  • F_IT = 1 − (1 − F_ST)(1 − F_IS): with f = 0.1 the pooled deficit is 0.388.
  • A pooled sample cannot separate structure from inbreeding, so a Hardy-Weinberg rejection in pooled data may be the Wahlund effect.