Quantitative traits, heritability and selection
Ten additive loci plus environmental noise give a trait whose heritability drift erodes and selection uses up.
Read first: Genetic drift, Natural selection at one locus
A trait built from many small effects
Height, yield and body mass do not fall into classes. They vary continuously because many loci each add a little, and the environment adds more. The module simulates this with N diploid individuals and a number of trait loci (QTL, quantitative trait loci). At each locus an individual carries 0, 1 or 2 copies of the + allele, and every copy adds the same amount α = 10 / (2 × nQTL). With 10 loci, α = 0.5.
The genotypic value is G = α × (total number of + alleles). The phenotype is P = G + E, where E is random noise with variance Ve. At the start each allele is + with probability p₀ = 0.5. The mean G is 2 × 10 × 0.5 × 0.5 = 5 and the genetic variance is VG = 2 × 10 × 0.5 × 0.5 × 0.5² = 1.25.
Variances of independent parts add: VP = VG + Ve = 1.25 + 1 = 2.25. The heritability h² = VG / VP is the share of phenotypic variance that is genetic, here 1.25 / 2.25 = 0.556. It is the narrow-sense heritability, because all gene action is additive. Ve = 0 gives h² = 1. Ve = 4 gives 1.25 / 5.25 = 0.238.
Variance without selection
Exercise
Turn the noise up
Open the module, set Sel to 0 and Ve to 4, and run. Read h² at generation 0 and at generation 50 in the heritability panel. Then set Ve to 0 and run again.
What to expect. With Ve = 4, h² starts near 0.24 and a single run usually ends lower, because the same genetic variance is a smaller share of VP. With Ve = 0, h² is 1 throughout.
Open the walkthrough step →Drift erodes genetic variance
In a finite population, the + allele at each locus wanders by drift until it is fixed or lost, as in the pure drift module. Once a locus is fixed it contributes no variance. Under neutrality VG shrinks by about (1 − 1/2N) per generation.
In the default population, N = 100, that factor is 0.995 per generation, so VG falls slowly: 1.25 × 0.995^50 = 0.97 on average. A single run is noisy. In N = 20 the factor is 0.975 and the loss is fast: 1.25 × 0.975^100 = 0.10 after 100 generations. In the seeded run below, VG goes from 0.93 to 0.05 and h² from 0.56 to 0.04.
The consequence is practical. A small breeding population loses the variation selection needs, even with no selection at all. Larger populations keep it: with N = 500, VG is 1.31 at the start and 1.18 at generation 50.
Loci fix in a small population
Selection and the breeder's equation
Selection in the module is on the phenotype. The fitness of an individual is 1 + s × z, where z = (P − mean P) / σP is its phenotype in standard deviations, and s is the Sel control. Fitness is floored at 0.01. Parents are drawn in proportion to fitness.
The expected response follows the breeder's equation, R = h² × S. S is the selection differential, the gap between the selected parents' mean and the population mean. Here S = s × σP. With s = 0.3, σP = √2.19 = 1.48 and h² = 0.56, one generation should raise the mean G by 0.56 × 0.3 × 1.48 = 0.25.
The response cannot last. Selecting for the + alleles drives them towards fixation, and that uses up VG. As VG and h² fall to zero, R falls to zero. The trait also has a ceiling: G is at most 10, when every locus is homozygous +.
Response, then a plateau
Exercise
Compare weak and strong selection
Set Sel to 0.1 and run with Gen 50. Note the final genotypic mean and h². Then set Sel to 0.3 and run again. Each run uses new random numbers, so repeat a few times.
What to expect. Sel = 0.1 ends near 8 (8.19 at the tutorial seed). Sel = 0.3 ends near 10, with h² close to zero. Stronger selection responds faster and then runs out of variance sooner.
Open the walkthrough step →What to keep
- G = α × (+ alleles), α = 10 / (2 × nQTL). With 10 loci at p₀ = 0.5, mean G = 5, VG = 1.25 and h² = 0.556 when Ve = 1.
- VP = VG + Ve and h² = VG / VP. Raising Ve to 4 lowers h² to 0.238 without changing any gene.
- Drift shrinks VG by about (1 − 1/2N) per generation. At N = 20, 9 of 10 loci fixed within 100 generations in the seeded run.
- R = h² × S predicts the response to selection. It was predicted at 0.25 per generation at Sel = 0.3 (0.245 observed), and it stops once VG is used up. Single runs vary, so repeat before trusting a number.