| ct_select_model | R Documentation |
Implements a two-step model selection procedure for distance sampling detection functions following the approach of Howe et al (2019).
ct_select_model(models, chat = NULL, k = 2)
models |
A list of fitted detection function models (objects returned by
|
chat |
Optional numeric value of overdispersion ( |
k |
Numeric. The penalty term used in QAIC (default is |
Step 1:
Within each key function family (e.g., half-normal, hazard-rate), models are compared
using the quasi-Akaike Information Criterion (QAIC). Overdispersion (\hat{c})
is estimated if not provided. The best model per key function family is identified as
the one with the lowest QAIC.
Step 2:
The best models from each key function family are compared using overall goodness-of-fit
statistics based on chi-squared divided by degrees of freedom (\chi^2 / df).
The model with the lowest \chi^2 / df is selected as the final detection function model.
A named list with the following elements:
QAIC: A tibble summarizing QAIC results for each model within key function families.
Best QAIC models: A subset of models, one per key function, that minimize QAIC.
Chiq2: A tibble comparing the best models by chi-squared goodness-of-fit criteria.
Final model: The selected detection function model with the lowest chi-squared/df.
Howe, E. J., Buckland, S. T., Després-Einspenner, M., & 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")}
ct_QAIC(), ct_chi2_select()
library(Distance)
library(dplyr)
data("duiker")
duiker_data <- duikers$DaytimeDistances %>%
dplyr::slice_sample(prop = .3) # sample 30% of rows
truncation <- list(left = 2, right = 15) # Keep only distance between 2-15 m
# fit hazard-rate key models
w3_hr0 <- ds(duiker_data, transect = "point", key = "hr", adjustment = NULL,
truncation = truncation)
w3_hr1 <- ds(duiker_data, transect = "point", key = "hr", adjustment = "cos",
order = 2, truncation = truncation)
w3_hr2 <- ds(duiker_data, transect = "point", key = "hr", adjustment = "cos",
order = c(2, 4), truncation = truncation)
# fit half-normal key models
w3_hn0 <- ds(duiker_data, transect = "point", key = "hn", adjustment = NULL,
truncation = truncation)
w3_hn1 <- ds(duiker_data, transect = "point", key = "hn", adjustment = "cos",
order = 2, truncation = truncation)
w3_hn2 <- ds(duiker_data, transect = "point", key = "hn", adjustment = "cos",
order = c(2, 4), truncation = truncation)
# fit uniform key models
w3_u0 <- ds(duiker_data, transect = "point", key = "unif", adjustment = NULL,
truncation = truncation)
w3_u1 <- ds(duiker_data, transect = "point", key = "unif", adjustment = "cos",
order = 2, truncation = truncation)
w3_u2 <- ds(duiker_data, transect = "point", key = "unif", adjustment = "cos",
order = c(2, 4), truncation = truncation)
# Create model list
model_list <- list(w3_hn0, w3_hn1, w3_hn2,
w3_hr0, w3_hr1, w3_hr2,
w3_u0, w3_u1, w3_u2)
# Compute model QAICs
ct_QAIC(list(w3_hr0, w3_hr1, w3_hr2)) # All key functions must be the same
ct_QAIC(list(w3_hn0, w3_hn1, w3_hn2)) # All key functions must be the same
# Compute Chi-squared Goodness-of-fit
ct_chi2_select(list(w3_hn0, w3_hr0, w3_u0)) # All key functions must be different
ct_chi2_select(list(w3_hn2, w3_hr1, w3_u0)) # All key functions must be different
# Two-step model selection
ct_select_model(model_list)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.