Learn R Programming

secr (version 3.0.1)

sim.popn details: Specifying a Dynamic Population

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 <code>sim.popn</code> details argument

Component Description Default
phi per capita survival rate \(\phi\) 0.7
survmodel probability model for number of survivors "binomial"
lambda finite rate of increase \(\lambda = 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 \(\phi 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 \(\phi\) (survmodel = "discrete").

Population growth and recruitment

Per capita recruitment (\(\gamma\)) is the difference between lambda and phi (\(\gamma = \lambda - \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, \gamma\))
"poisson" Poisson number of recruits (B ~ pois(\(\gamma 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

Run this code

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')

Run the code above in your browser using DataLab