## ----setup, include = FALSE----------------------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = NA_character_ ) options(dplyr.width = 100, width = 100) # see e-mail Kurt Hornik 2019-03-05T12:59 suppressWarnings(RNGversion("3.5.0")) set.seed(314) ## ------------------------------------------------------------------------------------------------- library(benthos) ## ----message=FALSE-------------------------------------------------------------------------------- library(dplyr) library(tidyr) library(readr) library(ggplot2) ## ------------------------------------------------------------------------------------------------- data(oosterschelde) ## ------------------------------------------------------------------------------------------------- oosterschelde ## ----eval=FALSE----------------------------------------------------------------------------------- # ?oosterschelde ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> filter(months(DATE) %in% c("August", "September")) ## ------------------------------------------------------------------------------------------------- oosterschelde |> mutate(COMPLIANT = is_accepted(taxon = TAXON)) |> select(OBJECTID, HABITAT, DATE, TAXON, COUNT, COMPLIANT) ## ------------------------------------------------------------------------------------------------- oosterschelde |> mutate(COMPLIANT = is_accepted(taxon = TAXON)) |> summarise( N_RECORDS = n(), N_COMPLIANT = sum(COMPLIANT), N_MISSING = N_RECORDS - N_COMPLIANT ) ## ------------------------------------------------------------------------------------------------- oosterschelde |> filter(!is_accepted(taxon = TAXON)) oosterschelde <- oosterschelde |> filter(is_accepted(taxon = TAXON)) ## ------------------------------------------------------------------------------------------------- is_accepted(taxon = "Petricola pholadiformis") as_accepted(taxon = "Petricola pholadiformis") is_accepted(taxon = "Petricolaria pholadiformis") ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> mutate(TAXON = as_accepted(TAXON)) ## ------------------------------------------------------------------------------------------------- oosterschelde |> filter(!is_accepted(taxon = TAXON)) |> nrow() ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> mutate( GENERIC = generic_name(TAXON), SPECIFIC = specific_name(TAXON) ) oosterschelde |> select(TAXON, GENERIC, SPECIFIC) ## ------------------------------------------------------------------------------------------------- is_binomen("Nephtys") is_binomen("Nephtys cirrosa") ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> mutate( IS_GENUS = is.na(GENERIC), GENERIC = ifelse(IS_GENUS, TAXON, GENERIC) ) ## ------------------------------------------------------------------------------------------------- oosterschelde |> filter(IS_GENUS) |> nrow() ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> group_by(ID, GENERIC) |> mutate(NEWCOUNT = genus_to_species(is_genus = IS_GENUS, count = COUNT)) |> ungroup() ## ------------------------------------------------------------------------------------------------- oosterschelde |> filter(GENERIC == "Corophium", ID == 130) |> arrange(TAXON) ## ------------------------------------------------------------------------------------------------- oosterschelde |> summarise(sum(COUNT), sum(NEWCOUNT)) ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> mutate(COUNT = NEWCOUNT) |> select(ID, HABITAT, AREA, DATE, TAXON, COUNT) |> filter(COUNT > 0) oosterschelde ## ------------------------------------------------------------------------------------------------- d <- oosterschelde |> group_by(AREA) |> summarise(n = n()) d ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> mutate(YEAR = DATE |> format("%Y")) ## ------------------------------------------------------------------------------------------------- n_pool_runs <- 10 pool_runs <- replicate( n = n_pool_runs, { oosterschelde |> group_by(HABITAT, YEAR) |> mutate( POOLID = pool(sample_id = ID, area = AREA, target_area = c(0.09, 0.11)) ) |> ungroup() |> select(POOLID) } ) ## ------------------------------------------------------------------------------------------------- names(pool_runs) <- paste0("POOLRUN", seq_len(n_pool_runs)) pool_runs <- pool_runs |> as_tibble() pool_runs ## ------------------------------------------------------------------------------------------------- oosterschelde_orig <- oosterschelde oosterschelde <- oosterschelde |> bind_cols(pool_runs) |> as_tibble() oosterschelde ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde |> pivot_longer(cols = starts_with("POOLRUN"), names_to = "POOLRUN", values_to = "POOLID") |> mutate(POOLRUN = as.integer(parse_number(POOLRUN))) |> filter(!is.na(POOLID)) |> select(POOLRUN, POOLID, HABITAT, AREA, YEAR, ID, TAXON, COUNT) oosterschelde ## ------------------------------------------------------------------------------------------------- d <- oosterschelde |> group_by(HABITAT, YEAR, POOLRUN, POOLID) |> distinct(ID, AREA) |> summarise(AREA = sum(AREA), .groups = "drop") d ## ------------------------------------------------------------------------------------------------- d <- d |> select(AREA) |> group_by(AREA) |> summarise(n = n()) |> arrange(AREA) d ## ----fig.retina=NULL, fig.width=5, fig.height=3, out.width=500, echo=FALSE------------------------ ggplot(data = d) + geom_vline(xintercept = c(0.09, 0.11), colour = "red", linewidth = 1, alpha = 0.5) + geom_linerange( mapping = aes(x = AREA, ymin = 0, ymax = n), colour = "seashell4", linewidth = 2 ) + scale_x_continuous(name = expression("area pooled sample (m"^2 * ")")) ## ------------------------------------------------------------------------------------------------- d <- oosterschelde |> group_by(HABITAT, YEAR, POOLRUN, POOLID) |> summarise(S = species_richness(taxon = TAXON, count = COUNT), .groups = "drop") d ## ------------------------------------------------------------------------------------------------- d <- d |> group_by(HABITAT, YEAR) |> summarise(S = mean(S), .groups = "drop") d ## ------------------------------------------------------------------------------------------------- d <- oosterschelde |> filter(HABITAT == "Polyhaline-Subtidal", YEAR == 2010, POOLRUN == 1, POOLID == 1) |> select(TAXON, COUNT) |> arrange(TAXON) d ## ------------------------------------------------------------------------------------------------- total_abundance(count = d$COUNT) ## ------------------------------------------------------------------------------------------------- abundance(taxon = d$TAXON, count = d$COUNT) |> as.matrix() ## ------------------------------------------------------------------------------------------------- species_richness(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- margalef(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- rygg(taxon = d$TAXON, count = d$COUNT) ## ----echo=FALSE, message=FALSE-------------------------------------------------------------------- x <- bind_rows(tibble(S = 1, N = c(1:9, 1:10 * 10)), tibble(S = 2, N = c(2:9, 1:10 * 10)), tibble(S = 3, N = c(3:9, 1:10 * 10)), tibble(S = 4, N = c(4:9, 1:10 * 10)), tibble(S = 5, N = c(5:9, 1:10 * 10)), tibble(S = 10, N = 1:10 * 10), tibble(S = 25, N = c(25, 3:10 * 10))) |> mutate( margalef = (S - 1) / log(N), SN_rygg = log(S) / log(log(N)), SN_adj = log(S) / log1p(log1p(N)), S = factor(S, ordered = TRUE) ) |> pivot_longer(cols = all_of(c("margalef", "SN_rygg", "SN_adj")), names_to = "index") x$value[!is.finite(x$value) | is.nan(x$value)] <- NA_real_ ## ----fig.width=7, fig.height=7, out.width=500, echo=FALSE, warning=FALSE-------------------------- ggplot(data = x, mapping = aes(x = N, y = value, group = S, colour = S)) + geom_path(size = 1, na.rm = TRUE) + geom_point(size = 3, na.rm = TRUE) + scale_x_continuous(breaks = c(1, 2, 3, 5, 10, 25, 50, 75, 100)) + coord_transform(x = "log10") + facet_grid(index ~ ., scales = "free_y") ## ------------------------------------------------------------------------------------------------- rygg(taxon = d$TAXON, count = d$COUNT, adjusted = TRUE) ## ------------------------------------------------------------------------------------------------- hurlbert(taxon = d$TAXON, count = d$COUNT, n = 100) ## ----echo=FALSE, fig.width=7, fig.height=4, out.width=500, echo=FALSE----------------------------- n <- seq_len(total_abundance(count = d$COUNT)) ESn <- sapply(X = n, FUN = \(n) hurlbert(taxon = d$TAXON, count = d$COUNT, n = n)) ggplot(data = tibble(n = n, ESn = ESn)) + geom_point(mapping = aes(x = n, y = ESn)) + scale_x_continuous(name = expression(italic(n))) + scale_y_continuous(name = expression(E(italic(S)[n]))) ## ------------------------------------------------------------------------------------------------- simpson(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- hpie(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- 1 - simpson(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- shannon(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- hill(taxon = d$TAXON, count = d$COUNT, a = 0) hill(taxon = d$TAXON, count = d$COUNT, a = 1) hill(taxon = d$TAXON, count = d$COUNT, a = 2) ## ----fig.retina=NULL, fig.width=6, fig.height=4, out.width=500, echo=FALSE, warning=FALSE, message=FALSE---- a <- seq(from = 0, to = 2, by = 0.1) N_a <- sapply(X = a, FUN = \(a) hill(taxon = d$TAXON, count = d$COUNT, a = a)) ggplot(data = tibble(a, N_a)) + geom_path(mapping = aes(x = a, y = N_a)) + geom_text(x = 0, y = 1, label = "<- rare species", hjust = 0, vjust = 1, colour = "blue") + geom_text(x = 2, y = 1, label = "common species ->", hjust = 1, vjust = 1, colour = "blue") + scale_x_continuous(name = expression(italic(a))) + scale_y_continuous(name = expression(italic(N[a])), limits = c(0, NA)) ## ------------------------------------------------------------------------------------------------- ambi(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- d |> mutate(HAS_GROUP = has_ambi(taxon = TAXON)) ## ------------------------------------------------------------------------------------------------- d |> mutate(HAS_GROUP = has_ambi(taxon = TAXON)) |> summarise(percentage = 100 * sum(COUNT[!HAS_GROUP]) / sum(COUNT)) |> as.numeric() ## ------------------------------------------------------------------------------------------------- iti(taxon = d$TAXON, count = d$COUNT) ## ------------------------------------------------------------------------------------------------- d |> mutate(HAS_GROUP = has_iti(taxon = TAXON)) ## ------------------------------------------------------------------------------------------------- d |> mutate(HAS_GROUP = has_iti(taxon = TAXON)) |> summarise(percentage = 100 * sum(COUNT[!HAS_GROUP]) / sum(COUNT)) |> as.numeric() ## ------------------------------------------------------------------------------------------------- oosterschelde |> group_by(HABITAT, YEAR, POOLRUN, POOLID) |> summarise( N = total_abundance(count = COUNT), S = species_richness(taxon = TAXON, count = COUNT), D = margalef(taxon = TAXON, count = COUNT), SN = rygg(taxon = TAXON, count = COUNT), SNa = rygg(taxon = TAXON, count = COUNT, adjusted = TRUE), H = shannon(taxon = TAXON, count = COUNT), .groups = "drop" ) ## ------------------------------------------------------------------------------------------------- oosterschelde <- oosterschelde_orig n_pool_runs <- 100 pool_runs <- replicate( n = n_pool_runs, { oosterschelde |> group_by(HABITAT, YEAR) |> mutate( POOLID = pool(sample_id = ID, area = AREA, target_area = c(0.09, 0.11)) ) |> ungroup() |> select(POOLID) } ) names(pool_runs) <- paste0("POOLRUN", 1:n_pool_runs) d <- pool_runs |> as_tibble() |> bind_cols(oosterschelde) |> pivot_longer(cols = starts_with("POOLRUN"), names_to = "POOLRUN", values_to = "POOLID") |> mutate(POOLRUN = as.integer(parse_number(POOLRUN))) |> filter(!is.na(POOLID)) |> select(POOLRUN, POOLID, HABITAT, AREA, YEAR, ID, TAXON, COUNT) |> group_by(HABITAT, YEAR, POOLRUN, POOLID) |> summarise(S = species_richness(taxon = TAXON, count = COUNT), .groups = "drop") |> group_by(HABITAT, YEAR, POOLRUN) |> summarise(S = mean(S), .groups = "drop_last") |> mutate(S_rm = cummean(S)) d ## ----fig.retina=NULL, fig.width=7, fig.height=4, out.width=650, echo=FALSE, warning=FALSE--------- ggplot(data = d) + geom_point(mapping = aes(x = POOLRUN, y = S), col = "blue") + geom_path(mapping = aes(x = POOLRUN, y = S_rm), col = "red") + facet_grid(HABITAT ~ YEAR)