`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.

`sim.popn`

details argumentComponent | 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 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").

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

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.

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

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.