Learn R Programming

secr (version 3.2.1)

turnover: 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"
superN optional superpopulation size for multinomial recruitment model see below
movemodel ``static", ``uncorrelated", ``normal", ``exponential" or ``t2D" ``static"
move.a first parameter of movement kernel (replacing sigma.m) 0
move.b second parameter of movement kernel 1

edgemethod treatment of animals that cross the boundary ``wrap" sigma.m deprecated in 3.2.1; use move.a 0 wrap deprecated in 3.1.6; use edgemethod TRUE i.e. edgemethod = ``wrap"

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 (\(f\)) is the difference between lambda and phi (\(f = \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, f\))
"poisson" Poisson number of recruits (B ~ pois(\(f N_t\)))
"discrete" Minimum-variance number of recruits (see Survival)
"multinomial" The POPAN model, conditioning on superpopulation size (e.g., Schwarz and Arnason 1996))

In the case of binomial recruitment there is a maximum of one recruit per existing individual, so lambda <= (phi+1). Multinomial recruitment requires a value for the superpopulation size. This may be provided as the details component "superN". If not specified directly, a value is inferred by projecting a trial initial (simulated) population using the specified phi and lambda.

Movement

Individuals may shift their home range centre between sessions. Movement probability is governed by a circular kernel specified by `movemodel' and the parameter values `move.a' and `move.b' (optional). By default there is no movement between sessions (movemodel = "static"). Other options are

``uncorrelated" individuals are randomly assigned a new, independent location within the buffered area
``normal" bivariate normal (Gaussian) kernel with parameter move.a (previously called sigma.m)
``exponential" negative exponential (Laplace) kernel with parameter move.a
``t2D" 2-dimensional t-distribution with scale parameter move.a and shape parameter move.b (2Dt of Clark et al. 1999).

The package openCR >=1.4.0 provides functions for constructing and plotting these kernels and summarising their properties (make.kernel; plot and summary methods for kernel objects).

In secr <3.2.1 sigma.m was also used to indicate two special cases; these continue to work but may be discontinued in the future:

sigma.m = 0 corresponds to movemodel = `static'

sigma.m < 0 corresponds to movemodel = `uncorrelated'

If movement takes an animal across the boundary of the arena (buffered area) in sim.popn the component "edgemethod" comes into play. By default, locations are toroidally wrapped i.e. the animal re-joins the population on the opposing edge. Other options are ``clip'' (discard), ``stop'' (stop just inside the boundary), ``reflect'' (bounce off edges to the limit of the dispersal) and ``none" (allow centres outside the buffered area).

References

Clark, J. S, Silman, M., Kern, R., Macklin, E. and HilleRisLambers, J. (1999) Seed dispersal near and far: patterns across temperate and tropical forests. Ecology 80, 1475--1494.

Nathan , R., Klein, E., Robledo-Arnuncio, J. J. and Revilla, E. (2012) Dispersal kernels: a review. In: J Clobert et al. Dispersal Ecology and Evolution. Oxford University Press. Pp 187--210.

See Also

sim.popn

Examples

Run this code
# NOT RUN {
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))
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, movemodel = 'normal', 
    move.a = 10, edgemethod = "wrap"))
pop3 <- sim.popn (Nbuffer = 100, core = grid, nsessions = 6,    
    details = list(lambda = 1, phi = 1, movemodel = 'normal', 
    move.a = 10, edgemethod = "clip"))
pop4 <- sim.popn (Nbuffer = 100, core = grid, nsessions = 10,    
    details = list(lambda = 1, phi = 1, movemodel = 'normal', 
    move.a = 10, edgemethod = "stop"))
sapply(pop2, nrow)  ## how many individuals?
plot(pop2)

## show effect of edgemethod --
## first session blue, last session red
cols <- c('blue',rep('white',4),'red')
par (mfrow=c(1,2))
plot(pop2, collapse = TRUE, seqcol = cols)
plot(pop3, collapse = TRUE, seqcol = cols)

# }

Run the code above in your browser using DataLab