Learn R Programming

secr (version 5.2.4)

chat: Overdispersion of Activity Centres

Description

Stochastic variation in the intensity surface may cause the number of detected individuals \(n\) to be overdispersed relative to a Poisson distribution (Efford and Fletcher 2025). This can cause the sampling variance of density estimates to be understated.

Use chat.nj to compute Fletcher's \(\hat c\) estimate of overdispersion for use as a variance inflation factor. The method requires replicate samples of the intensity surface, such as from multiple independent subgrids. Replicates may be provided as sessions or clusters of detectors within a session (see cluster and trap.builder).

adjustVarD adjusts the SE and confidence limits of density estimates using the given \(\hat c\). The implementation is limited to simple detection models (see Warnings).

See Cooch and White (2022) for an introduction to measurement of overdispersion in capture--recapture due to non-independence in the detection process. The focus here is on overdispersion of the number detected \(n\) relative to the Poisson (or binomial) distribution of \(n\) expected when the distribution of activity centres is an inhomogeneous or homogeneous Poisson (or binomial) point process (IHPP).

Usage

chat.nj(object, bycluster = FALSE, ...)

adjustVarD(object, chatmin = 1, alpha = 0.05, chat = NULL)

Value

For chat.nj, usually a list comprising --

expected

expected number at each cluster or session

observed

observed number at each cluster or session

stats

vector of summary statistics: mean(expected), var(expected), mean(observed), var(observed), sbar, nu (=df), cX2 = X2/nu

chat

\(\hat c\) (Fletcher or Wedderburn depending on `type')

If `verbose = FALSE' then only the numeric value of \(\hat c\) is returned (a vector of 2 values if `type = "both"').

For adjustVarD, a dataframe with one row for each session, based on predict.secr or derived.secr, with extra column `c-hat'.

Arguments

object

fitted secr model or dataframe (see Warnings for restrictions)

bycluster

logical; if TRUE then j refers to clusters within a single-session capthist rather than sessions

...

other arguments passed to Fletcher.chat, e.g., verbose = FALSE

chatmin

minimum value of Fletcher's \(\hat c\)

alpha

alpha level for confidence intervals

chat

numeric chat (optional)

Warning

The variance inflation factor given by chat.nk was shown by Efford and Fletcher (2025) to be inadequate and should not be used. For replicate spatial samples, chat.nj is a better alternative.

adjustVarD previously computed Fletcher's `chat' using chat.nk; that is no longer recommended.

Details

chat.nj uses expected.n to compute the expected values.

No adjustment is made by adjustVarD when \(\hat c\) is less than the minimum. Set 'chatmin' to zero to override.

adjustVarD also accepts a single dataframe as the argument `object'; the dataframe should have row `D' and columns `link', `estimate', `SE.estimate' as in the output from predict.secr.

References

Bischof, R., P. Dupont, C. Milleret, J. Chipperfield, and J. A. Royle. 2020. Consequences of ignoring group association in spatial capture--recapture analysis. Wildlife Biology wlb.00649. tools:::Rd_expr_doi("10.2981/wlb.00649")

Cooch, E. and White, G. (eds) (2022) Program MARK: A Gentle Introduction. 22nd edition. Most recent edition available online at www.phidot.org/software/mark/docs/book/.

Efford, M. G. and D. Fletcher. 2025. Effect of spatial overdispersion on confidence intervals for population density estimated by spatial capture-recapture. bioRxiv https://doi.org/10.1101/2024.03.12.584742

Fletcher, D. (2012) Estimating overdispersion when fitting a generalized linear model to sparse data. Biometrika 99, 230--237.

Wedderburn, R. W. M. (1974) Quasi-likelihood functions, generalized linear models, and the Gauss-Newton method. Biometrika 61, 439--47.

See Also

secr, make.mask, Detection functions, Fletcher.chat, cluster

Examples

Run this code

if (FALSE) {

## Clustered design
mini <- make.grid(nx = 3, ny = 3, spacing = 50, detector = "proximity")

tempgrids2 <- trap.builder (
    cluster = mini , method = "all",
    frame = expand.grid(x = seq(200, 1800, 400), y = seq(200, 1800, 400)), 
    plt = TRUE)
tempmask2 <- make.mask(tempgrids2, buffer = 100, spacing = 20)
pop1 <- sim.popn(D = 2, core = tempmask2, model2D = 'rLGCP', 
                 details = list(var = 0.5, scale = 100))
capt <- sim.capthist(tempgrids2, popn = pop1, noccasions = 5,
    detectpar = list(g0 = 0.2, sigma = 25))

fit <- secr.fit(capt, mask = tempmask2, trace = FALSE)

chat.nj(fit, bycluster = TRUE)

}

Run the code above in your browser using DataLab