BIOL-208 · Lesson 5 of 12 · 25 min

Life histories and demography

A sockeye salmon hatches in a gravel bed in a British Columbia tributary of the Fraser River, spends a year or two in a lake, two years at sea, returns to its natal stream, spawns once and dies. A black bear may live 25 years, first breed at four or five, and raise a small litter every second year. A dandelion sets thousands of seeds within weeks of germinating. These differences in the timing of growth, reproduction and death are called life histories, and they determine how fast populations can grow and how they respond to harvest, habitat loss and conservation. Lesson 4 treated all individuals in a population as identical. This lesson adds age and stage: how ecologists measure survival and reproduction at each age using life tables, how they project populations with matrix models, and how natural selection shapes life histories through trade-offs.

Life tables

A life table summarizes how survival and reproduction change with age. A cohort life table follows a group of individuals born at the same time until all have died, which is practical for short-lived organisms or long-term field studies. A static (or time-specific) life table instead records the ages of individuals alive, or at death, at one time and assumes the population is stable. The standard columns are:

The columns of a life table (female-based, as is usual)
SymbolMeaningHow it is calculated
xAge classUsually in years
nₓNumber alive at the start of age xCounted
lₓSurvivorship: proportion of the original cohort alive at age xnₓ / n₀
dₓNumber dying during age xnₓ − nₓ₊₁
qₓAge-specific mortality ratedₓ / nₓ
mₓ (or bₓ)Average number of female offspring per female of age xCounted
lₓmₓExpected offspring at age x per newborn femalelₓ × mₓ
eₓLife expectancy at age xMean further years for individuals alive at x

From the life table, three key numbers summarize the population. The net reproductive rate, \( R_0 \), is the average number of female offspring a newborn female produces in her lifetime. The generation time, \( T \), is the average age at which females give birth. The intrinsic rate of increase can then be approximated:

\[R_0 = \sum_x l_x m_x, \qquad T = \frac{\sum_x x\, l_x m_x}{R_0}, \qquad r \approx \frac{\ln R_0}{T}\]

If \( R_0 > 1 \), each female more than replaces herself and the population grows; if \( R_0 < 1 \), it declines.

A life table and its summary statistics (invented data)
import numpy as np

# Invented cohort life table for a small mammal (females only)
x  = np.array([0, 1, 2, 3, 4, 5])
n  = np.array([1000, 300, 160, 70, 20, 0])
m  = np.array([0.0, 1.2, 2.6, 2.8, 2.0, 0.0])
lx = n / n[0]
dx = n - np.append(n[1:], 0)
qx = np.divide(dx, n, out=np.zeros(len(n)), where=n > 0)
lm = lx * m
R0 = lm.sum(); T = (x * lm).sum() / R0; r = np.log(R0) / T
print(" x    nx    lx     dx    qx     mx   lxmx")
for row in zip(x, n, lx, dx, qx, m, lm):
    print("{:2d} {:5d} {:6.3f} {:5d} {:6.3f} {:5.1f} {:6.3f}".format(*row))
print(f"R0 = {R0:.3f}  T = {T:.2f} years  r = {r:.3f} per year")
Output
 x    nx    lx     dx    qx     mx   lxmx
 0  1000  1.000   700  0.700   0.0  0.000
 1   300  0.300   140  0.467   1.2  0.360
 2   160  0.160    90  0.562   2.6  0.416
 3    70  0.070    50  0.714   2.8  0.196
 4    20  0.020    20  1.000   2.0  0.040
 5     0  0.000     0  0.000   0.0  0.000
R0 = 1.012  T = 1.92 years  r = 0.006 per year

In this invented population, a newborn female produces almost exactly one daughter over her life (R₀ ≈ 1.01), the average age of mothers is about 1.9 years, and the population is nearly stable, growing at well under 1 percent a year. A small drop in first-year survival would tip it into decline. Note that 70 percent of individuals die in their first year: high juvenile mortality is common in nature, and it means that what happens to the young often controls population growth.

Survivorship curves

Plotting \( l_x \) on a logarithmic scale against age gives a survivorship curve. Raymond Pearl described three idealized types in 1928. Type I curves stay high until old age and then drop, as in humans in wealthy countries and many large mammals that invest heavily in few offspring. Type II curves fall in a straight line on the log scale, meaning a constant mortality rate at every age, as in many songbirds once they leave the nest. Type III curves plunge early and then flatten, as in trees, fish and marine invertebrates that produce huge numbers of tiny offspring, almost all of which die young. Real species mix these shapes, but the types are a useful shorthand.

A graph of survivorship on a logarithmic scale from 1 to 0.001 against relative age. Type I stays high and falls late, Type II is a straight diagonal line, and Type III drops steeply at first and then flattens.
Type I, II and III survivorship curves (log scale)

Matrix population models

Life tables summarize the past; matrix models project the future. Patrick Leslie introduced the approach in 1945. The population is divided into age classes, and a matrix gives the fecundity of each class (top row) and the probability of surviving from one class to the next (sub-diagonal). Multiplying the matrix by the vector of numbers in each class gives the numbers one time step later:

\[\mathbf{n}_{t+1} = \mathbf{A}\,\mathbf{n}_t, \qquad \mathbf{A} = \begin{pmatrix} F_1 & F_2 & F_3 \\ P_1 & 0 & 0 \\ 0 & P_2 & 0 \end{pmatrix}\]

After many time steps, the proportions in each class settle into the stable age distribution, and the population grows by a constant factor each step. That factor is the dominant eigenvalue of the matrix, which equals \( \lambda \), and the stable age distribution is its corresponding eigenvector. Matrix models extend naturally to stages rather than ages, which is often more useful: a tree's fate depends on its size, not its age, and a turtle's on whether it is an egg, a juvenile or an adult.

Projecting a stage-structured population and finding λ and the stable distribution
import numpy as np

A = np.array([[0.0, 1.5, 2.2],
              [0.4, 0.0, 0.0],
              [0.0, 0.6, 0.5]])     # last class: adults that survive and stay adults
n = np.array([100.0, 0.0, 0.0])
for t in range(1, 6):
    n = A @ n
    print(f"year {t}: " + "  ".join(f"{v:7.1f}" for v in n) + f"   total {n.sum():7.1f}")
vals, vecs = np.linalg.eig(A)
i = np.argmax(vals.real)
lam = vals[i].real
w = np.abs(vecs[:, i].real); w = w / w.sum()
print(f"dominant eigenvalue lambda = {lam:.3f}  (r = {np.log(lam):.3f})")
print("stable stage distribution:", np.round(w, 3))
Output
year 1:     0.0     40.0      0.0   total    40.0
year 2:    60.0      0.0     24.0   total    84.0
year 3:    52.8     24.0     12.0   total    88.8
year 4:    62.4     21.1     20.4   total   103.9
year 5:    76.6     25.0     22.9   total   124.4
dominant eigenvalue lambda = 1.175  (r = 0.162)
stable stage distribution: [0.609 0.207 0.184]

Sensitivity and elasticity

Matrix models answer a practical question: if we could improve survival or reproduction at one stage, which would raise \( \lambda \) the most? Elasticity measures the proportional change in \( \lambda \) caused by a proportional change in one matrix element. In a famous analysis in 1987, Deborah Crouse and colleagues built a stage-based model of loggerhead sea turtles in the southeastern United States. Conservation had focused on protecting eggs and nesting beaches, but the model showed that \( \lambda \) was far more sensitive to the survival of large juveniles and subadults, which were drowning in shrimp trawls. This analysis supported the requirement for turtle excluder devices in US shrimp nets. The same logic is now used for species from orcas to orchids.

Elasticities show which vital rates most affect population growth
import numpy as np

A = np.array([[0.0, 1.5, 2.2],
              [0.4, 0.0, 0.0],
              [0.0, 0.6, 0.5]])
vals, W = np.linalg.eig(A); vals_l, V = np.linalg.eig(A.T)
i = np.argmax(vals.real); j = np.argmax(vals_l.real)
lam = vals[i].real
w = np.abs(W[:, i].real); v = np.abs(V[:, j].real)
S = np.outer(v, w) / (v @ w)          # sensitivities
E = S * A / lam                        # elasticities (sum to 1)
names = ["F1", "F2", "F3", "P1", "-", "-", "-", "P2", "P3"]
for (r, c), e in np.ndenumerate(E):
    if A[r, c] > 0:
        print(f"element A[{r},{c}] = {A[r, c]:.1f}   elasticity {e:.3f}")
print("sum of elasticities:", round(E.sum(), 3))
Output
element A[0,1] = 1.5   elasticity 0.145
element A[0,2] = 2.2   elasticity 0.190
element A[1,0] = 0.4   elasticity 0.335
element A[2,1] = 0.6   elasticity 0.190
element A[2,2] = 0.5   elasticity 0.140
sum of elasticities: 1.0

Life history trade-offs

Organisms have limited energy and time, so investing more in one function means investing less in another. These trade-offs shape life histories. A female can produce many small offspring or a few large ones; she can breed early and risk her own survival, or delay breeding and grow; she can breed once in a massive effort or spread reproduction over many seasons. Experiments confirm the costs: when ecologists enlarged clutches of collared flycatchers by adding eggs, parents raised more young that year but survived less well and produced fewer young later.

Breeding once and dying, as Pacific salmon, many annual plants and agave do, is called semelparity. Breeding repeatedly, as most birds, mammals and perennial plants do, is iteroparity. Semelparity is favored when adult survival between breeding attempts is low or when a huge single effort is far more productive than several small ones, as when salmon must make a costly migration to spawn. Interestingly, Atlantic salmon, unlike Pacific species, can survive to spawn again.

In the 1960s, Robert MacArthur and E. O. Wilson described a contrast between r-selected species, favored in unpredictable or newly opened habitats, which mature early and produce many small offspring, and K-selected species, favored in crowded, stable habitats, which mature late, produce few large offspring and invest heavily in each. The scheme proved too simple, and ecologists now usually describe a fast–slow continuum of life histories, with mice, annual weeds and many insects at the fast end and elephants, albatrosses, whales and bristlecone pines at the slow end. Position on the continuum predicts how a species responds to threats: slow species recover slowly from losses of adults, which is why long-lived sharks, sturgeon and rockfish are so vulnerable to overfishing.

The fast–slow continuum of life histories
TraitFast endSlow end
Age at first reproductionEarlyLate
Offspring per breeding eventManyFew
Size of offspringSmallLarge
Parental careLittleExtensive
LifespanShortLong
Typical survivorshipType IIIType I
ExamplesHouse mouse, dandelion, aphidGrizzly bear, bowhead whale, lake sturgeon

Worked problem

Will this population persist?

A lake sturgeon population has R₀ = 0.85 and a generation time of 30 years. Estimate r and the time for the population to halve.

Show solution
  1. r ≈ ln R₀ / T = ln 0.85 / 30 = −0.1625 / 30 ≈ −0.0054 per year.
  2. Halving time = ln 2 / |r| = 0.693 / 0.0054 ≈ 128 years.
  3. The decline is slow but steady, and recovery would also be slow even if R₀ rose above 1.

Answer: r ≈ −0.005 per year; the population halves in about 130 years. Long-lived, late-maturing species show slow declines that are easy to miss and slow to reverse.

Common mistakes

  • Mistakelₓ is the proportion of individuals that die at age x.

    Insteadlₓ is the proportion of the original cohort still alive at age x; qₓ is the mortality rate during age x.

  • MistakeR₀ is the growth rate per year.

    InsteadR₀ is the average lifetime female offspring per female, measured per generation; r is per unit time.

  • MistakeThe stable age distribution means the population has stopped growing.

    InsteadIt means the proportions in each class are constant; the population can still grow or shrink at rate λ.

  • MistakeProtecting eggs always helps a population the most.

    InsteadElasticity analysis often shows that survival of older juveniles or adults matters more, as with loggerhead turtles.

  • Mistaker- and K-selection are two distinct categories.

    InsteadLife histories lie on a continuum from fast to slow, and many species mix traits.

Summary and key terms

  • Life tables record survival (lₓ), mortality (qₓ) and fecundity (mₓ) by age.
  • R₀ = Σ lₓmₓ, T = Σ x lₓmₓ / R₀, and r ≈ ln R₀ / T.
  • Survivorship curves are idealized as Type I (late mortality), II (constant) and III (early mortality).
  • Leslie and stage matrices project populations; the dominant eigenvalue is λ and its eigenvector is the stable distribution.
  • Elasticity analysis identifies the vital rates with the greatest effect on λ and guides conservation.
  • Trade-offs shape life histories: number versus size of offspring, current versus future reproduction, semelparity versus iteroparity.
  • Life histories lie on a fast–slow continuum that predicts vulnerability to harvest.
life table
A table of survival, mortality and fecundity by age.
survivorship (lₓ)
The proportion of a cohort surviving to age x.
net reproductive rate (R₀)
Average lifetime female offspring per female.
generation time (T)
The average age of mothers when their offspring are born.
Leslie matrix
A matrix of age-specific fecundities and survival probabilities used to project a population.
stable age distribution
The constant proportions in each age class reached after many time steps.
elasticity
The proportional change in λ caused by a proportional change in a vital rate.
semelparity
Reproducing once in a lifetime and then dying.
iteroparity
Reproducing repeatedly over a lifetime.
trade-off
A situation in which investing more in one trait requires investing less in another.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. A cohort of 500 has 200 alive at age 1. What is l₁?

    Show answer

    200/500 = 0.4.

  2. If n₂ = 120 and n₃ = 90, what is q₂?

    Show answer

    (120 − 90)/120 = 0.25.

  3. A life table gives lₓmₓ values of 0, 0.6, 0.5 and 0.2 at ages 0–3. Calculate R₀.

    Show answer

    0 + 0.6 + 0.5 + 0.2 = 1.3.

  4. For the same table, calculate T.

    Show answer

    (1 × 0.6 + 2 × 0.5 + 3 × 0.2)/1.3 = 2.2/1.3 ≈ 1.69 years.

  5. Estimate r from R₀ = 1.3 and T = 1.69.

    Show answer

    ln 1.3 / 1.69 ≈ 0.155 per year.

  6. Which survivorship type fits an oak tree?

    Show answer

    Type III: acorns and seedlings die in vast numbers; survivors live long.

  7. What does the dominant eigenvalue of a Leslie matrix represent?

    Show answer

    The asymptotic growth factor λ per time step.

  8. Why did elasticity analysis of loggerhead turtles change policy?

    Show answer

    It showed survival of large juveniles mattered more than egg survival, supporting turtle excluder devices.

  9. Why are Pacific salmon semelparous?

    Show answer

    The costly migration lowers survival between breeding attempts, favoring one large reproductive effort.

  10. Why are slow life-history species vulnerable to overfishing?

    Show answer

    They mature late and reproduce slowly, so losses of adults are replaced only slowly.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz