Specifying a Dynamic Population

Share:

Description

sim.popn can simulate a multi-session population with known between-session survival, recruitment and movement probabilities. The parameter settings to achieve this are passed to sim.popn in its ‘details’ argument. Components of ‘details’ that are relevant to turnover are described below; see sim.popn for others.

Multi-session populations are generated in sim.popn whenever its argument ‘nsessions’ is greater than 1. If details$lambda remains NULL (the default) then the population for each successive session is generated de novo from the given density model (model2D, D etc.). If a value is specified for details$lambda then only the first population is generated de novo; remaining populations are generated iteratively with probabilistic mortality, recruitment and movement as described here.

Turnover components of sim.popn details argument

Component Description Default
phi per capita survival rate φ 0.7
survmodel probability model for number of survivors "binomial"
lambda finite rate of increase λ = N_{t+1} / N_t none
recrmodel probability model for number of recruits "poisson"
sigma.m spatial scale of movement kernel 0
wrap logical: should toroidal wrapping be applied? TRUE

Survival

Survival is usually thought of as a Bernoulli process (outcome 0 or 1 for each individual) so the number of survivors S is a binomial variable (survmodel = "binomial"). Another approach is to fix the proportion surviving, but this can be done exactly only when φ N is an integer. A (slightly ad hoc) solution is to randomly choose between the two nearest integers with probability designed in the long term (over many sessions) to give the required φ (survmodel = "discrete").

Population growth and recruitment

Per capita recruitment (γ) is the difference between lambda and phi (γ = λ - φ), which must be non-negative (phi > lambda causes an error). The number of recruits B is a random variable whose probability distribution is controlled by details$recrmodel:

Value Probability model
"constantN" Exact replacement of animals that die (B = N_t - S)
"binomial" Binomial number of recruits (B ~ bin(N_t, γ)
"poisson" Poisson number of recruits (B ~ pois(γ N_t))
"discrete" Minimum-variance number of recruits (see Survival)

In the case of binomial recruitment there is a maximum of one recruit per existing individual, so lambda <= (phi+1).

Movement

Individuals may shift their home range centre between sessions. Movement probability is governed by a circular bivariate normal kernel with scale sigma.m. If movement takes an animal across the boundary of the arena then by default it is toroidally wrapped i.e. re-joins the population on the opposing edge. No movement is applied when sigma.m = 0.

See Also

sim.popn

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
par (mfrow = c(2,3), mar = c(1,1,1,1))

## birth and death only
grid <- make.grid(nx = 7, ny = 4, detector = 'proximity', spacing = 10)
pop <- sim.popn (Nbuffer = 100, core = grid, nsessions = 6,    
    details = list(lambda = 0.8, phi = 0.6, sigma.m = 0))
sapply(pop, nrow)  ## how many individuals?
plot(pop)

## movement only
pop2 <- sim.popn (Nbuffer = 100, core = grid, nsessions = 6,    
    details = list(lambda = 1, phi = 1, sigma.m = 10, wrap = TRUE))
pop3 <- sim.popn (Nbuffer = 100, core = grid, nsessions = 6,    
    details = list(lambda = 1, phi = 1, sigma.m = 10, wrap = FALSE))
sapply(pop2, nrow)  ## how many individuals?
plot(pop2)

## show effect of toroidal wrapping --
tracks <- function (pop, ...) {
    rn <- unlist(lapply(pop, rownames))
    plot(pop[[1]], pch = 16)
    for (i in unique(rn))
       lines(t(sapply(pop, '[', i, 1:2)), ...)
}
par (mfrow=c(1,2))
tracks(pop2, type = 'o')
tracks(pop3, type = 'o')

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.