← Guides F-Statistics

Core 12 min read Open the module

F-statistics

Drift builds differences between populations, migration removes them, and F_ST settles at a value set by Nm.

Read first: Genetic drift, Island-island migration

Three fixation indices

The F-Statistics module starts 20 populations at the same allele frequency, p₀ = 0.5, each with N = 50 diploids (100 gene copies). Every generation each population drifts by binomial sampling, and then each population is replaced by a fraction m from the average of all 20. Three numbers summarise the result, all built from heterozygosity H.

H_I is the observed heterozygosity inside populations. H_S is the heterozygosity expected from each population allele frequency, averaged over populations. H_T is the heterozygosity expected from the pooled frequency. Then F_IS = (H_S − H_I) / H_S measures non-random mating inside a population, F_ST = (H_T − H_S) / H_T measures differences between populations, and F_IT = (H_T − H_I) / H_T measures both together.

The three are linked by (1 − F_IT) = (1 − F_IS)(1 − F_ST). In the module the inbreeding coefficient f only scales H_I, so F_IS = f in every generation and f does not change the drift. F_ST is the one that gene flow acts on.

The module has two panels. The left panel draws the allele frequency of up to 8 of the populations. The right panel draws the three F values against generation. At the start all populations are identical, so every F is 0. Differences appear only as drift scatters the populations, which is why the F_ST line rises from the left edge of the right panel.

Drift alone builds F_ST

Figure 1. Twenty populations of N = 50 with m = 0 and f = 0, for 100 generations. F_ST rises from 0 to 0.627 in this run. F_IS stays at 0, and F_IT lies on top of F_ST. Theory expects 1 − (1 − 1/100)^100 = 0.634, and the mean over 200 seeded runs is 0.613.

Inbreeding adds F_IS

Figure 2. The same run with f = 0.2. F_IS is a flat line at 0.200 and F_ST is unchanged at 0.627. F_IT ends at 0.701, which equals 1 − (1 − 0.2)(1 − 0.627).

Exercise

Check the identity

Open the module and set Pops 20, Ne 50, p0 0.5, Gen 100, m 0 and f 0.2. Run, then hover the right-hand panel at generation 100 and read the three F values.

What to expect. F_IS reads 0.2000 and F_ST is some value near 0.6. Multiply (1 − F_IS) by (1 − F_ST) and subtract from 1. The result equals the F_IT value. Step 3 of the walkthrough shows this with a fixed seed.

Open the walkthrough step →

Migration sets a balance

Drift alone pushes F_ST toward 1, because each population eventually fixes one allele. Migration pulls the populations back toward their common mean. The two forces balance at F_ST ≈ 1 / (1 + 4Nm), where Nm is the number of migrants per generation. The answer depends on the product Nm and not on m alone.

With N = 50 and m = 0.01, Nm = 0.5 and F_ST ≈ 1 / (1 + 2) = 0.333. With m = 0.1, Nm = 5 and F_ST ≈ 1 / 21 = 0.048. The module measures F_ST after migration, which shrinks the spread among populations by about (1 − m)². At m = 0.1 that factor is 0.81, so the module should read 0.048 × 0.81 = 0.039. The mean over 200 seeded runs is 0.040.

Raising N to 500 at m = 0.01 gives Nm = 5 again. The mean F_ST is 0.045, close to the same 0.048 even though the migration rate is ten times lower. One migrant per generation, Nm = 1, gives F_ST ≈ 1 / 5 = 0.2.

Half a migrant per generation

Figure 3. Twenty populations of N = 50 with m = 0.01, so Nm = 0.5, for 300 generations. F_ST levels off instead of rising toward 1. It reads 0.258 at generation 300 in this run. The mean over 200 seeded runs is 0.320, near the theory value 0.333.

Exercise

Change Nm two ways

Run Pops 20, Ne 50, m 0.1, f 0 and Gen 300. Then set Ne 500 and m 0.01 and run again. Repeat each run a few times.

What to expect. Both settings have Nm = 5, so F_ST stays small, about 0.04 in both, and the lines on the left panel stay bunched. At Nm = 0.5 (Ne 50, m 0.01) F_ST settles near 0.32. Step 5 of the walkthrough compares them.

Open the walkthrough step →

Summary

  • F_IS = (H_S − H_I) / H_S, F_ST = (H_T − H_S) / H_T and F_IT = (H_T − H_I) / H_T, with (1 − F_IT) = (1 − F_IS)(1 − F_ST).
  • Drift alone drives F_ST up as 1 − (1 − 1/2N)^t: 0.634 after 100 generations at N = 50.
  • The inbreeding coefficient f sets F_IS and leaves F_ST unchanged: f = 0.2 gives F_IS = 0.200 and F_IT = 0.701.
  • Migration and drift balance at F_ST ≈ 1 / (1 + 4Nm): 0.333 at Nm = 0.5 and 0.048 at Nm = 5.
  • Nm is what matters, so N = 500 with m = 0.01 gives about the same F_ST (0.045) as N = 50 with m = 0.1 (0.040).