Announcements
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?
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.
Nt+1=Nt+Births+Immigration−Deaths−Emigration
Nt+1=Nt+Births+Immigration−Deaths−Emigration
For a closed population (no movement of individuals into or out of the patch), this reduces to
Nt+1=Nt+Births−Deaths
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 Nt+1 is based on the population size at the current time Nt times the finite rate of increase of the population (λ).
Nt+1=Nt+rdNt=(1+rd)Nt=λNt
This means that each individual produces rd (discrete growth factor) offspring per timestep (generation), which then go on to produce rd 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).
A discrete model makes sense when this assumption matches the species' biology. That is, 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.
dNdt=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 instantaneous rate of increase. When r<0, the population decreases towards 0. When r>0 the population increases exponentially (essentially geometrically, but in continuous time).
dNdt=rN
This equation can be simplified back to discrete time, and we see the population size at time t is:
Nt=N0ert
Where N0 is the initial population size, r is the instantaneous rate of increase, and t is the number of time steps.
This can also be used to project the expected population growth over time, where t can be any number greater than 1.
Nt+1=λNt
dNdt=rN
Nt=N(0)ert
Nt+1=λNt
dNdt=rN
Nt=N(0)ert
r=ln(λ)
λ<1, r<0: population decrease to 0
λ=1, r=0: population unchanging
λ>1, r>0: population increase to infinity
r=ln(λ)
λ<1, r<0: population decrease to 0
λ=1, r=0: population unchanging
λ>1, r>0: population increase to infinity
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.
“No population can increase in size forever.”
Number of atoms in the universe (finite mass) is around 1080. Exponential growth potential of E. coli: beginning with 1 cell, 6 days for population > 1080 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.
In the discrete model, we see that the population still grows at rate λ, but overall population size is discounted by a scaling term which relates the population size ( Nt ) to an upper threshold. This threshold is the carrying capacity ( K ), which is the maximum sustainable population size, given potentially limiting resource such as resources, space, etc.
Nt+1=Nt+(ln(λ)×Nt×(1−NtK))
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 ( λ or r), as large growth rates can lead to complex dynamics, including damped oscillations, limit cycles, and chaos.
dNdt=rN[1−NK];r,K>0
dNdt=rN[1−NK];r,K>0
λ<1, r<0: population decrease to 0
λ=1, r=0: population does not change
λ>1, r>0: population increase to carrying capacity
On top of the assumptions of the exponential growth,
Constant carrying capacity
Linear density dependence (population size limits population growth, with each additional individual reducing growth rate equally)
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 ( λ or r), as large growth rates can lead to complex dynamics, including damped oscillations, limit cycles, and chaos.
N = K, 0 < r < 3.5 (stable)
N = 0, 0 < r < 3.5 (unstable)
N = K, r < 0 (unstable)
N = 0, r < 0 (stable)
b or d is non-linear, resulting in a population growth rate r which depends on Nt.
Allee effect is the positive correlation between population size Nt and population growth rate r.
Allee effects are important when population sizes become small, as the density dependence can cause a situation where population growth rate actually drops below 0 ( r<0).
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).
Originally designed for insurance companies, this is a way to track demographic rates through time, partitioning things by the age of the organism.
Table: 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).
Life table gives us a good idea of how age or life stage can influence reproductive output and survival.
l(x) (survival rate) and b(x) (fecundity rate) 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 R0 and the generation time G.
R0 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.
R0=k∑x=0l(x)b(x)
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 |
R0=k∑x=0l(x)b(x)
R0=0+1.6+1.2+0.1+0=2.9
R0>1? R0=1? R0<1?
R0 is very similar to λ in terms of description. But, r≠ln(R0) because R0 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=Σkx=0l(x)b(x)xΣkx=0l(x)b(x)
G = ? in the table below?
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 |
From R0 and G, we can compute r and λ
r≈ln(R0)G
Calculate r for the example in the table above:
λ=er
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.
Jt+1=λJ∗Jt
Tt+1=λT∗Tt
At+1=λA∗At
Then, Nt=Jt+Tt+At
We can account for population flow explictly by having some survival term which tracks the transition of juveniles to teenagers, and teenagers to adults. 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.
A Leslie matrix describing the survival and fecundity relationships between life stages (J, T, and A)
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 Fi, and stage transition rates ( Pi,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.
where N is the population size matrix at time t and M is the Leslie matrix, to yield the resulting population size at time t+1.
Announcements
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |