Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5,
dev = "svglite",
fig.ext = "svg"
)
## ----transparent, include = FALSE---------------------------------------------
transparent <- if (requireNamespace("ggplot2", quietly = TRUE)) {
ggplot2::theme(
panel.background = ggplot2::element_rect(fill = "transparent", colour = NA),
plot.background = ggplot2::element_rect(fill = "transparent", colour = NA)
)
} else {
NULL
}
## ----simulate-----------------------------------------------------------------
library(spacc)
set.seed(42)
n_sites <- 80
n_species <- 40
coords <- data.frame(
x = runif(n_sites, 0, 100),
y = runif(n_sites, 0, 100)
)
# Species with varying range sizes (some endemic, some widespread)
species <- matrix(0L, n_sites, n_species)
for (sp in seq_len(n_species)) {
cx <- runif(1, 10, 90)
cy <- runif(1, 10, 90)
# First 10 species are narrow-ranged (endemics)
spread <- if (sp <= 10) 0.005 else 0.001
prob <- exp(-spread * ((coords$x - cx)^2 + (coords$y - cy)^2))
species[, sp] <- rbinom(n_sites, 1, prob)
}
colnames(species) <- paste0("sp", seq_len(n_species))
## ----range-sizes--------------------------------------------------------------
range_size <- colSums(species)
tapply(range_size, c(rep("endemic", 10), rep("widespread", 30)), mean)
## ----endemism-----------------------------------------------------------------
end <- spaccEndemism(species, coords, n_seeds = 20, progress = FALSE, seed = 1)
end
## ----endemism-summary---------------------------------------------------------
es <- summary(end)
head(es[, c("sites", "mean_richness", "mean_endemism", "endemism_proportion")], 4)
## ----plot-endemism, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "Total richness and endemic richness as area expands."----
plot(end) + transparent
## ----sfar---------------------------------------------------------------------
sac <- spacc(species, coords, n_seeds = 20, progress = FALSE, seed = 1)
set.seed(123)
patches <- kmeans(coords, centers = 5)$cluster
sfar_fit <- sfar(sac, patches)
sfar_fit
## ----sfar-coef----------------------------------------------------------------
round(sfar_fit$coef, 3)
## ----plot-sfar, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "SFAR fit: observed richness and the area-plus-fragmentation prediction."----
plot(sfar_fit) + transparent
## ----sesars-------------------------------------------------------------------
set.seed(7)
effort <- rpois(n_sites, 10) + 1
sesars_fit <- sesars(sac, effort)
sesars_fit
## ----sesars-coef--------------------------------------------------------------
round(sesars_fit$coef, 3)
sesars_fit$r_squared
## ----plot-sesars, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "SESARS fit with the area-plus-effort prediction overlaid on observed richness."----
plot(sesars_fit) + transparent
## ----metrics------------------------------------------------------------------
met <- spaccMetrics(species, coords,
metrics = c("slope_10", "half_richness", "auc"),
progress = FALSE)
summary(met)
## ----metrics-df---------------------------------------------------------------
head(met$metrics[, c("site_id", "x", "y", "slope_10", "half_richness", "auc")], 4)
## ----plot-metrics, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "Spatial heatmap of the initial accumulation slope per site."----
plot(met, metric = "slope_10", type = "heatmap") + transparent
## ----metrics-sf, eval = requireNamespace("sf", quietly = TRUE)----------------
met_sf <- as_sf(met, crs = 32631)
class(met_sf)
## ----mem----------------------------------------------------------------------
mem <- spatialEigenvectors(coords)
mem
## ----mem-summary--------------------------------------------------------------
head(summary(mem), 5)
## ----plot-mem, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "First spatial eigenvectors mapped over the landscape."----
plot(mem, type = "map", n_vectors = 4) + transparent
## ----partition----------------------------------------------------------------
slope <- met$metrics$slope_10
part <- spatialPartition(slope, mem)
part
## ----plot-partition, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "Variance in per-site slope split into spatial and non-spatial components."----
plot(part) + transparent
## ----wavefront----------------------------------------------------------------
wf <- wavefront(species, coords, n_seeds = 20, n_steps = 40,
progress = FALSE, seed = 1)
wf
## ----plot-wavefront, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "Species captured against expanding radius from seed points."----
plot(wf) + transparent
## ----subsample----------------------------------------------------------------
keep <- subsample(coords, method = "grid", cell_size = 20, seed = 1)
length(keep)
sac_full <- spacc(species, coords, n_seeds = 20, progress = FALSE, seed = 1)
sac_thin <- spacc(species[keep, ], coords[keep, ], n_seeds = 20,
progress = FALSE, seed = 1)
combined <- c(full = sac_full, thinned = sac_thin)
## ----plot-subsample, eval = requireNamespace("ggplot2", quietly = TRUE), fig.cap = "Accumulation curve before and after grid thinning."----
plot(combined) + transparent
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.