Week 2 note: population dynamics

Daijiang Li

Reading:

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

Equilibria

\(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).

Equilibria:

\(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

This gives us a good idea of how age or life stage can influence reproductive output and survival.

\(l(x)\) and \(b(x)\) are the basis of all our life-table calculations. If we know \(l(x)\) and \(b(x)\), we can calculate the intrinsic growth rate \(r\). To do that, we need to calculate two more number first: the net reproductive rate \(R_0\) and the generation time \(G\).

\(R_0\) is the net reproductive rate, which corresponds to the average number of female offspring that would be born to each female member of a population going from birth to death following to life table.

\[R_0 = \sum^k_{x=0}l(x)b(x)\]

\[ R_{0} = 0 + 1.6 + 1.2 + 0.1 + 0 = 2.9 \]

\(R_0 > 1\)?

\(R_0 = 1\)?

\(R_0 < 1\)?

\(R_0\) is very similar to \(\lambda\) in terms of description. But, \(r \neq ln(R_0)\) because \(R_0\) measures increase of population as a function of generation time.

\(G\) is the generation time, which is quantified as the average age of parents of all offspring produced in a single cohort. It can be calculated as

\[ G = \frac{\Sigma_{x=0}^{k} l(x)b(x)x}{\Sigma_{x=0}^{k} l(x)b(x)} \]

G = ? in Table @ref(tab:lifeTable).

From \(R_0\) and \(G\), we can compute \(r\) and \(\lambda\)

\[ r \approx \frac{ln(R_0)}{G} \]

Calculate \(r\) for the example in Table @ref(tab:lifeTable). What is the unit of \(r\) here?

\[ \lambda = e^{r} \]

So how do we model these structured populations? We could break the populations down into stages, and use the models described above for each life stage. Here is an example for a stage-structured population consisting of juveniles (\(J\)), teenagers (\(T\)), and adults (\(A\)). Here, we can track the dynamics of each stage independently, as below. What’s wrong with this? It doesn’t explicitly consider the inherent connections between the different stages. So it tracks population growth, but not the transitions between classes.

\[ J_{t+1} = \lambda_{J} * J_t \]

\[ T_{t+1} = \lambda_{T} * T_t \]

\[ A_{t+1} = \lambda_{A} * A_t \]

Then, \[ N_{t} = J_{t} + T_{t} + A_{t} \]

We can account for population flow explictly by having some survival term which tracks the transition of juveniles to teenagers, and teenagers to adults, but what else does this fail to account for? The contribution of different stage classes is not to it’s own class, but to the next stage class, right? How do we incorporate this? We could set up a system of equations, or we could use matrix modeling, which essentially sets up a system of equations, but in a nice way.

Matrix modeling

Elements of the square matrix correspond to the production of (row) by (column). These are transitions between lifestages. This matrix is called a Leslie matrix.

Here, we have fecundity \(F_{i}\), and stage transition rates (\(P_{i,j}\)). It is important to note that fecundity is different from birth rates discussed earlier. Here, fecundity captures both survival and birth rate.

So we can use the transition matrix to simulate stage-structured population dynamics. How we do this is by using matrix multiplication, as follows. We have a 1 column matrix containing the initial population sizes for all life stages.

\[\begin{equation*} \mathbf{n}^{0}=% \begin{bmatrix} n_{J} \\ n_{T} \\ n_{A} \\ \end{bmatrix} \end{equation*}\]

We can simply multiply this one column matrix by the transition matrix,

\[\begin{equation*} \begin{bmatrix} n_{J, t+1} \\ n_{T, t+1} \\ n_{A, t+1} \\ \end{bmatrix} = \mathbf{M} * \mathbf{N} = \begin{bmatrix} F_{J} & F_{T} & F_{A} \\ P_{J,T} & 0 & 0 \\ 0 & P_{T,A} & P_{A,A} \\ \end{bmatrix} * \begin{bmatrix} n_{J, t} \\ n_{T, t} \\ n_{A, t} \\ \end{bmatrix} \end{equation*}\]

where \(\mathbf{N}\) is the population size matrix and \(\mathbf{M}\) is the transition matrix in Table \(\ref{tab:transition}\), to yield the resulting population size at time \(t+1\).

\[\begin{equation} \begin{bmatrix} F_{J} * n_{J,t} \ \ + \ \ F_{T} * n_{T,t} \ \ + \ \ F_{A} * n_{A,t} \\ P_{J,T} * n_{J,t} \ \ + \ \ 0 * n_{T,t} \ \ + \ \ 0 * n_{A,t} \\ 0 * n_{J,t} \ \ + \ \ P_{T,A} * n_{T,t} \ \ + \ \ P_{A,A} * n_{A,t} \\ \end{bmatrix} \end{equation}\]

Example:

This tracks a three-stage population, in which individuals go through juvenile (\(J\)), teen (\(T\)), and adult (\(A\)) stages.

Here, juveniles transition to teenagers with rate 0.2, and teenagers to adults at rate 0.3. Meanwhile, all stages contribute to the population of juveniles at different per capita rates, with juveniles producing 0.3 new juveniles for every 1 juvenile at time \(t\), teenagers producing 0.5 juveniles for every teenager at time \(t\), and adults producing 2 juveniles for every adult at time \(t\).

Let’s simulate the model 1 timestep forward, beginning with the abundance matrix

\[\begin{equation*} \mathbf{N}_{t}= \begin{bmatrix} n_{J, t} = 20 \\ n_{T, t} = 10 \\ n_{A, t} = 0 \\ \end{bmatrix} \end{equation*}\]

\[\begin{equation} \mathbf{M} * \mathbf{N}_{t} = \begin{bmatrix} (0.3 * 20 \ + \ (0.5 * 10) \ + \ (2 * 0) \\ (0.2 * 20) \ + \ (0 * 10) \ + \ (0 * 0) \\ (0 * 20) \ + \ (0.3 * 10) \ + \ (0 * 0) \\ \end{bmatrix} = \begin{bmatrix} n_{J, t+1} = 11 \\ n_{T, t+1} = 4 \\ n_{A, t+1} = 3 \\ \end{bmatrix} \end{equation}\]

See this Leslie matrix calculator to see how the Leslie matrix can translate to different population dynamics dependent on the initial distribution of individuals in different age classes.