Week 2 note: population dynamics

Daijiang Li


Gotelli, Nicholas J. A primer of ecology. Sunderland, MA: Sinauer Associates, 2001. Chapters 1-2.

What controls the dynamics of species populations through time? That is, what controls the rate at which populations increase/decrease? Why don’t species exhaust their resources and crash? We’ll start with a simple base model, and then build up to examine more realistic population demographics.

A generalized model of population dynamics

\[ N_{t+1} = N_{t} + Births + Immigration - Deaths - Emigration \]

In the case of a closed population (no movement of individuals into or out of the patch), this reduces to

\[ N_{t+1} = N_{t} + Births - Deaths \]

Exponential growth

Discrete model

The simplest model of population dynamics is based on an exponential increase in population size given a positive growth rate. That is, the population at the next time point (\(N_{t+1}\)) is based on the population size at the current time (\(N_t\)) times the growth rate of the population (\(\lambda\)).

\[ N_{t+1} = \lambda \times N_t \]

This means that each individual produces \(R\) offspring per timestep (generation), which then go on to produce \(R\) offspring. The issue with this model is that there is nothing to stop it, so the time series of the population size quickly becomes exponential (as we’ll see in the coding demonstration).

Continuous model

A discrete model makes sense when this assumption matches the species biology. That is, if the species reproduces once per year, or if generation time can be bounded within some time window, then a discrete model might capture the relevant dynamics well. Let’s consider a system where we want that time window to be incredibly small.

\[ \frac{dN}{dt} = rN \]

where \(r\) is equal to \(b\) - \(d\) (births - deaths), where \(b\) and \(d\) are per capita measures (births or deaths per individual per unit time). This \(r\) is the . When \(r < 0\), the population decreases towards 0. When \(r > 0\) the population increases exponentially (essentially geometrically, but in continuous time). This equation can be simplified back to discrete time, and we see the population size at time \(t\) (\(N_t\)) is

\[ N_{t} = N(0)e^{rt} \]

Where \(N(0)\) is the initial population size, \(r\) is the instantaneous rate of increase, and \(t\) is the number of time steps. This looks quite similar to the discrete time case, except the growth rate is slightly different. This can also be used to project the expected population growth over time, where \(t\) can be any number greater than 1.

\[ r = ln(\lambda) \]

\(\lambda < 1\), \(r < 0\): population decrease to 0

\(\lambda = 1\), \(r = 0\): population unchanging

\(\lambda > 1\), \(r > 0\): population increase to infinity


\(N = 0, r > 0\) (unstable)

\(N = 0, r < 0\) (stable)

Assumptions of the exponential model:

  • No immigration or emigration
  • Constant \(r\) (b-d); which means unlimited resources
  • No age, size, or genetic structure (all individuals are functionally equivalent)
  • Continuous growth without time lags

Exponential growth model forms the cornerstone of population density. Even though no population can increase exponentially forever, all populations have the potential for exponential growth.

Logistic growth

“No population can increase in size forever.”

Number of atoms in the universe (finite mass) is around \(10^{80}\). Exponential growth potential of E. coli: beginning with 1 cell, 6 days for population >\(10^{80}\) cells.

It may be more realistic to assume that populations intrinsically limit themselves. That is, competition for space, resources, and mates, produces an upper limit to the population size (but not the growth rate). One way to think about this is that you can have a garden in which the number of individual plants is limited by available space or light, but the growth rates of each of the individual plants could be independent of these effects.

Discrete model

In the discrete model, we see that the population still grows at rate \(\lambda\), but overall population size is discounted by a scaling term which relates the population size (\(N_t\)) to an upper threshold. This threshold is the , which is the maximum sustainable population size, given potentially limiting resource such as resources, space, etc.

\[ N_{t+1} = N_{t} + (ln(\lambda) \times N_{t} \times (1 - \frac{N_t}{K})) \]

Continuous model

In the continuous model, time step size goes to 0 in the limit (i.e., the time steps are really tiny). When the population size exceeds \(K\) (for either discrete or continuous models) population growth becomes negative, leading to a tendency for the system to go to \(K\). However, this is sensitive to population growth rate (\(\lambda\) or \(r\)), as large growth rates can lead to complex dynamics, including damped oscillations, limit cycles, and chaos.

\[ \frac{dN}{dt} = rN \left[1- \frac{N}{K}\right]; r, K > 0\]

Note: in this model, \(r\) and \(K\) must be greater than 0.

\(\lambda < 1\), \(r < 0\): population decrease to 0

\(\lambda = 1\), \(r = 0\): population does not change

\(\lambda > 1\), \(r > 0\): population increase to carrying capacity (\(K\))

Assumptions of the logistic model:

  • Constant carrying capacity
  • Linear density dependence (population size limits population growth, with each additional individual reducing growth rate equally).


\(N = K, 0 < r < 3.5\) (stable)

\(N = 0, 0 < r < 3.5\) (unstable)

\(N = K, r < 0\) (unstable)

\(N = 0, r < 0\) (stable)

\(K\) can vary temporally. What happens when this is the case?

If \(r\) is low, the population doesn’t really track changes in \(K\), but if the potential response can be high (i.e., if \(r\) is large), the population will cycle around \(K\), slightly out of phase. \(N\) will be shifted to the right of the \(K\) wave. Why is this?

Allee effect: \(b\) or \(d\) is non-linear, resulting in a population growth rate \(r\) which depends on \(N_{t}\). Allee effects are important when population sizes become small, as the negative density dependence can cause a situation where population growth rate actually drops below 0 (\(r < 0\)).

Structured populations

The above models assume that all individuals are functionally equivalent. That is, individuals contribute to overall reproductive output and population growth regardless of age, body size, sex, etc. But this is not really true for most natural populations. Most of the time, very young individuals won’t reproduce, as they are not reproductively mature. This creates a situation where two populations containing the same number of individuals may have strikingly different dynamics, as the distribution of individuals’ ages influences population growth rates. This occurs either through differences in birth rates (as noted above), or as a result of different death rates (e.g., young and old individuals have higher mortality risk than middle-aged).

Life table

Originally designed for insurance companies, this is a way to track demographic rates through time, partitioning things by the age of the organism.

Life table of a hypothetic population.

age (x) S(x) b(x) l(x)=S(x)/S(0) g(x)=l(x+1)/l(x) l(x)b(x) l(x)b(x)x
0 500 0 1.0 0.80 0.0 0.0
1 400 2 0.8 0.50 1.6 1.6
2 200 3 0.4 0.25 1.2 2.4
3 50 1 0.1 0.00 0.1 0.3
4 0 0 0.0 NA 0.0 0.0

The term \(S(x)\) refers to the number of individuals from a particular cohort that are still alive at age \(x\) (cohort survival).

The term \(b(x)\) represents the per-capital birth rate for females of age \(x\). This is the number of female offspring generated from one female individual of age \(x\). For example \(b(6) = 3\) would indicate that a female of age 6 will give birth to an average of 3 female offspring. \(b(x)\) also is referred to as fecundity schedule.

The term \(l(x)\) represents the probability that an individual survives from age 0 (birth) to the beginning of age \(x\). This is called survival rate or survival schedule. \(l(x)=S(x)/S(0)\)

The term \(g(x)\) is the probability that an individual of age \(x\) survives to age \(x+1\) (survival probability).

Survivorship curves