Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5,
dev = "svglite",
fig.ext = "svg"
)
## ----data---------------------------------------------------------------------
library(spacc)
set.seed(1)
S_true <- 120
rel <- exp(rnorm(S_true, mean = 0, sd = 1.5))
rel <- rel / sum(rel)
n_sites <- 80
species <- t(sapply(seq_len(n_sites),
function(i) rmultinom(1, size = 25, prob = rel)))
species <- species[, colSums(species) > 0, drop = FALSE] # detected species
colnames(species) <- paste0("sp", seq_len(ncol(species)))
## ----data-summary-------------------------------------------------------------
S_obs <- ncol(species)
ab <- colSums(species)
data.frame(S_true = S_true, S_obs = S_obs,
f1 = sum(ab == 1), f2 = sum(ab == 2),
f3 = sum(ab == 3), f4 = sum(ab == 4))
## ----chao1--------------------------------------------------------------------
chao1(species)
spacc::ace(species)
## ----chao2--------------------------------------------------------------------
chao2(species)
jackknife(species, order = 1)
jackknife(species, order = 2)
## ----bootstrap----------------------------------------------------------------
bootstrap_richness(species, n_boot = 100)
## ----comparison---------------------------------------------------------------
estimators <- list(
chao1(species), chao2(species), spacc::ace(species),
jackknife(species, order = 1), jackknife(species, order = 2),
bootstrap_richness(species, n_boot = 100)
)
tab <- do.call(rbind, lapply(estimators, as.data.frame))
tab$gap_to_truth <- S_true - tab$estimate
tab
## ----ichao--------------------------------------------------------------------
r_ichao1 <- iChao1(species)
r_ichao2 <- iChao2(species)
r_ichao1
r_ichao2
## ----ichao-compare------------------------------------------------------------
ich <- rbind(
as.data.frame(chao1(species)), as.data.frame(r_ichao1),
as.data.frame(chao2(species)), as.data.frame(r_ichao2)
)
ich$gap_to_truth <- S_true - ich$estimate
ich
## ----convergence--------------------------------------------------------------
effort <- c(10, 20, 30, 40, 50, 60, 70, 80)
conv <- do.call(rbind, lapply(effort, function(k) {
reps <- t(vapply(1:30, function(r) {
e <- chao1(species[sample(nrow(species), k), , drop = FALSE])
c(e$S_obs, e$estimate, e$se)
}, numeric(3)))
data.frame(sites = k, S_obs = mean(reps[, 1]),
estimate = mean(reps[, 2]), se = mean(reps[, 3]))
}))
round(conv, 1)
## ----convergence-plot, eval = requireNamespace("ggplot2", quietly = TRUE)-----
library(ggplot2)
ggplot(conv, aes(sites)) +
geom_ribbon(aes(ymin = estimate - se, ymax = estimate + se),
fill = "#4CAF50", alpha = 0.2) +
geom_line(aes(y = estimate), color = "#4CAF50", linewidth = 1) +
geom_line(aes(y = S_obs), color = "#78909C", linewidth = 1) +
geom_hline(yintercept = S_true, linetype = "dashed") +
labs(x = "Sampling units", y = "Richness",
title = "Chao1 estimate (green) and observed count (grey) vs effort") +
theme(panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent"))
## ----ace-threshold------------------------------------------------------------
do.call(rbind, lapply(c(5, 10, 15, 20), function(th) {
e <- spacc::ace(species, threshold = th)
data.frame(threshold = th, estimate = round(e$estimate, 1),
se = round(e$se, 1))
}))
## ----boot-nboot---------------------------------------------------------------
set.seed(7)
do.call(rbind, lapply(c(50, 100, 500), function(nb) {
e <- bootstrap_richness(species, n_boot = nb)
data.frame(n_boot = nb, estimate = round(e$estimate, 1),
se = round(e$se, 2))
}))
## ----inext, eval = requireNamespace("iNEXT", quietly = TRUE)------------------
cr <- iNEXT::ChaoRichness(as.numeric(colSums(species)), datatype = "abundance")
sp_c1 <- chao1(species)
data.frame(
source = c("spacc::chao1", "iNEXT::ChaoRichness", "truth"),
estimate = round(c(sp_c1$estimate, cr[["Estimator"]], S_true), 2),
se = round(c(sp_c1$se, cr[["Est_s.e."]], NA), 2)
)
## ----completeness-------------------------------------------------------------
cp <- completenessProfile(species)
cp
## ----completeness-plot, eval = requireNamespace("ggplot2", quietly = TRUE)----
plot(cp) +
theme(panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent"))
## ----guidance-table-----------------------------------------------------------
data.frame(
data_type = c("abundance", "abundance", "abundance",
"incidence", "incidence", "incidence"),
estimator = c("chao1", "ace", "iChao1",
"chao2", "jackknife", "iChao2"),
use_when = c("counts reliable, f2 > 0",
"many rare species, heterogeneous",
"f3, f4 > 0, sample incomplete",
"presence/absence, m >= 20",
"incidence, simple bias correction",
"Q3, Q4 > 0, sample incomplete"),
unreliable_when = c("f2 = 0", "C_ace <= 0 (all singletons)", "f4 = 0",
"Q2 = 0 or m < 10", "few units", "Q4 = 0")
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.