QAIC: Tools for model selection when distance sampling data are...

View source: R/QAIC.R

QAICR Documentation

Tools for model selection when distance sampling data are overdispersed


Overdispersion causes AIC to select overly-complex models, so analysts should specify the number/order of adjustment terms manually when fitting distance sampling models to data from camera traps, rather than allowing automated selection using AIC. Howe et al (2019) described a two-step method for selecting among models of the detection function in the face of overdispersion.


QAIC(object, ..., chat = NULL, k = 2)

chi2_select(object, ...)



a fitted detection function object


additional fitted model objects.


a value of \hat{c} to be used in QAIC calculation


penalty per parameter to be used; default 2


In step 1, and overdispersion factor (\hat{c}) is computed either (1) for each key function family, from the most complex model in each family, as the chi-square goodness of fit test statistic divided by its degrees of freedom (\hat{c}_1), or (2) for all models in the candidate set, from the raw data (\hat{c}_1). In camera trap surveys of solitary animals, \hat{c}_1 would be the mean number of distance observations recorded during a single pass by an animal in front of a trap. In surveys of social animals employing human observers, \hat{c}_1 would be the mean number of detected animals per detected group, and in camera trap surveys of social animals \hat{c}_1 the mean number of distance observations recorded during an encounter between a group of animals and a CT. In step two, the chi-square goodness of fit statistic divided by its degrees of freedom is calculated for the QAIC-minimizing model within each key function, and the model with the lowest value is selected for estimation.

The QAIC() function should only be used select among models with the same key function (step 1). QAIC() uses \hat{c}_1 by default, computing it from the model with the most parameters. Alternatively, \hat{c}_1 can be calculated from the raw data and included in the call to QAIC(). Users must identify the QAIC-minimizing model within key functions from the resulting data.frame, and provide these models as arguments in ch2_select(). chi2_select() then computes and reports the chi-square goodness of fit statistic divided by its degrees of freedom for each of those models. The model with the lowest value is recommended for estimation.


a data.frame with one row per model supplied, in the same order as given


David L Miller, based on code from Eric Rexstad and explanation from Eric Howe.


Howe, E. J., Buckland, S. T., Després-Einspenner, M.-L., & Kühl, H. S. (2019). Model selection with overdispersed distance sampling data. Methods in Ecology and Evolution, 10(1), 38–47. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1111/2041-210X.13082")}


## Not run: 

# fit hazard-rate key models
w3.hr0 <- ds(wren_cuecount, transect="point", key="hr", adjustment=NULL,
w3.hr1 <- ds(wren_cuecount, transect="point", key="hr", adjustment="cos",
             order=2, truncation=92.5)
w3.hr2 <- ds(wren_cuecount, transect="point", key="hr", adjustment="cos",
             order=c(2, 4), truncation=92.5)

# fit unform key models
w3.u1 <- ds(wren_cuecount, transect="point", key="unif", adjustment="cos",
            order=1, truncation=92.5)
w3.u2 <- ds(wren_cuecount, transect="point", key="unif", adjustment="cos",
            order=c(1,2), monotonicity="none",  truncation=92.5)
w3.u3 <- ds(wren_cuecount, transect="point", key="unif", adjustment="cos",
            order=c(1,2,3), monotonicity="none", truncation=92.5)

# fit half-normal key functions
w3.hn0 <- ds(wren_cuecount, transect="point", key="hn", adjustment=NULL,
w3.hn1 <- ds(wren_cuecount, transect="point", key="hn", adjustment="herm",
             order=2, truncation=92.5)

# stage 1: calculate QAIC per model set
QAIC(w3.hr0, w3.hr1, w3.hr2)  # no adjustments smallest
QAIC(w3.u1, w3.u2, w3.u3)     # 2 adjustment terms (by 0.07)
QAIC(w3.hn0, w3.hn1)  # no adjustments smallest

# stage 2: select using chi^2/degrees of freedom between sets
chi2_select(w3.hr0, w3.u2, w3.hn0)

# example using a pre-calculated chat
chat <- attr(QAIC(w3.hr0, w3.hr1, w3.hr2), "chat")
QAIC(w3.hr0, chat=chat)

## End(Not run)

Distance documentation built on July 26, 2023, 5:47 p.m.