## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----message = FALSE----------------------------------------------------------
{
library(dplyr)
library(ggplot2)
library(ggtext)
library(ggh4x)
library(nicheROVER)
library(nichetools)
library(patchwork)
library(purrr)
library(stringr)
library(tidyr)
}
## ----message = FALSE----------------------------------------------------------
df <- fish %>%
janitor::clean_names()
## ----message = FALSE----------------------------------------------------------
nsample <- 1000
## ----message = FALSE----------------------------------------------------------
fish_par <- df %>%
split(.$species) %>%
map(~ select(., d13c, d15n)) %>%
map(~ niw.post(nsample = nsample, X = .))
## ----message = FALSE----------------------------------------------------------
df_mu <- extract_mu(fish_par)
## -----------------------------------------------------------------------------
df_mu <- df_mu %>%
mutate(
element = case_when(
isotope == "d15n" ~ "N",
isotope == "d13c" ~ "C",
),
neutron = case_when(
isotope == "d15n" ~ 15,
isotope == "d13c" ~ 13,
)
)
## ----message = FALSE----------------------------------------------------------
df_sigma <- extract_sigma(fish_par)
## ----message = FALSE----------------------------------------------------------
df_sigma_cn <- extract_sigma(fish_par,
data_format = "long") %>%
filter(id != isotope)
## ----warning = FALSE----------------------------------------------------------
posterior_plots <- df_mu %>%
split(.$isotope) %>%
imap(
~ ggplot(data = ., aes(x = mu_est)) +
geom_density(aes(fill = sample_name), alpha = 0.5) +
scale_fill_viridis_d(begin = 0.25, end = 0.75,
option = "D", name = "Species") +
theme_bw() +
theme(panel.grid = element_blank(),
axis.title.x = element_markdown(),
axis.title.y = element_markdown(),
legend.position = "none",
legend.background = element_blank()
) +
labs(
x = paste("\u00b5\U03B4", "",
unique(.$neutron), "",
"",unique(.$element), "", sep = ""),
y = paste0("p(\u00b5 \U03B4","",
unique(.$neutron), "",
"",unique(.$element),"",
" | X)"), sep = "")
)
posterior_plots$d15n +
theme(legend.position = c(0.18, 0.82)) +
posterior_plots$d13c
## ----message = FALSE----------------------------------------------------------
df_sigma_cn <- df_sigma_cn %>%
mutate(
element_id = case_when(
id == "d15n" ~ "N",
id == "d13c" ~ "C",
),
neutron_id = case_when(
id == "d15n" ~ 15,
id == "d13c" ~ 13,
),
element_iso = case_when(
isotope == "d15n" ~ "N",
isotope == "d13c" ~ "C",
),
neutron_iso = case_when(
isotope == "d15n" ~ 15,
isotope == "d13c" ~ 13,
)
)
## ----message = FALSE----------------------------------------------------------
sigma_plots <- df_sigma_cn %>%
group_split(id, isotope) %>%
imap(
~ ggplot(data = ., aes(x = post_sample)) +
geom_density(aes(fill = sample_name), alpha = 0.5) +
scale_fill_viridis_d(begin = 0.25, end = 0.75,
option = "D", name = "Species") +
theme_bw() +
theme(panel.grid = element_blank(),
axis.title.x = element_markdown(),
axis.title.y = element_markdown(),
legend.position = "none"
) +
labs(
x = paste("\U03A3","\U03B4",
"", unique(.$neutron_id), "",
"",unique(.$element_id),""," ",
"\U03B4",
"", unique(.$neutron_iso), "",
"",unique(.$element_iso),"", sep = ""),
y = paste("p(", "\U03A3","\U03B4",
"", unique(.$neutron_id), "",
"",unique(.$element_id),""," ",
"\U03B4",
"", unique(.$neutron_iso), "",
"",unique(.$element_iso),"", " | X)", sep = ""),
)
)
sigma_plots[[1]] +
theme(legend.position = c(0.1, 0.82))
## -----------------------------------------------------------------------------
ellipse_df <- niche_ellipse(dat_mu = df_mu, dat_sigma = df_sigma,
set_seed = 4)
## -----------------------------------------------------------------------------
ellipse_plots <- ggplot() +
geom_polygon(data = ellipse_df,
mapping = aes(x = d13c, y = d15n,
group = interaction(sample_number, sample_name),
color = sample_name),
fill = NA,
linewidth = 0.5) +
scale_colour_viridis_d(begin = 0.25, end = 0.75,
option = "D", name = "species",
) +
scale_x_continuous(breaks = rev(seq(-20, -40, -2))) +
scale_y_continuous(breaks = seq(6, 16, 2)) +
theme_bw(base_size = 10) +
theme(axis.text = element_text(colour = "black"),
panel.grid = element_blank(),
legend.position = "none",
legend.title = element_text(hjust = 0.5),
legend.background = element_blank()) +
labs(x = expression(paste(delta ^ 13, "C")),
y = expression(paste(delta ^ 15, "N")))
## -----------------------------------------------------------------------------
iso_long <- df %>%
pivot_longer(cols = -species,
names_to = "isotope",
values_to = "value") %>%
mutate(
element = case_when(
isotope == "d15n" ~ "N",
isotope == "d13c" ~ "C",
),
neutron = case_when(
isotope == "d15n" ~ 15,
isotope == "d13c" ~ 13,
)
)
## ----warning=FALSE------------------------------------------------------------
iso_density <- iso_long %>%
group_split(isotope) %>%
imap(
~ ggplot(data = .) +
geom_density(aes(x = value,
fill = species),
alpha = 0.35,
linewidth = 0.8) +
scale_fill_viridis_d(begin = 0.25, end = 0.75,
option = "D", name = "Species") +
theme_bw(base_size = 10) +
theme(axis.text = element_text(colour = "black"),
panel.grid = element_blank(),
legend.position = c(0.15, 0.55),
legend.background = element_blank(),
axis.title.x = element_markdown(family = "sans")) +
labs(x = paste("\U03B4",
"", unique(.$neutron), "",unique(.$element),
sep = ""),
y = "Density")
)
d13c_density <- iso_density[[1]] +
scale_x_continuous(breaks = rev(seq(-20, -34, -2)),
limits = rev(c(-20, -34)))
d15n_density <- iso_density[[2]] +
scale_x_continuous(breaks = seq(5, 15, 2.5),
limits = c(5, 15)) +
theme(
legend.position = "none"
)
## -----------------------------------------------------------------------------
iso_biplot <- ggplot() +
geom_point(data = df, aes(x = d13c, y = d15n,
fill = species),
shape = 21, colour = "black",
stroke = 0.8,
size = 3, alpha = 0.70) +
scale_fill_viridis_d(begin = 0.25, end = 0.75,
option = "D", name = "species") +
scale_x_continuous(breaks = rev(seq(-20, -39, -1))) +
scale_y_continuous(breaks = seq(5, 17, 1)) +
theme_bw(base_size = 10) +
theme(axis.text = element_text(colour = "black"),
panel.grid = element_blank(),
legend.position = "none",
legend.background = element_blank()) +
labs(x = expression(paste(delta ^ 13, "C")),
y = expression(paste(delta ^ 15, "N")))
## -----------------------------------------------------------------------------
d13c_density + ellipse_plots + iso_biplot + d15n_density +
plot_annotation(tag_levels = "a",
tag_suffix = ")")
## -----------------------------------------------------------------------------
over_stat <- overlap(fish_par, nreps = nsample, nprob = 1000,
alpha = 0.95)
## -----------------------------------------------------------------------------
over_stat_df <- extract_overlap(data = over_stat)
## ----message = FALSE----------------------------------------------------------
over_sum <- over_stat_df %>%
group_by(sample_name_a, sample_name_b) %>%
summarise(
median_niche_overlap = round(median(niche_overlap_perc), digits = 2),
qual_2.5 = round(quantile(niche_overlap_perc,
probs = 0.025, na.rm = TRUE), digits = 2),
qual_97.5 = round(quantile(niche_overlap_perc,
probs = 0.975, na.rm = TRUE), digits = 2)
) %>%
ungroup() %>%
pivot_longer(cols = -c(sample_name_a, sample_name_b, median_niche_overlap),
names_to = "percentage",
values_to = "niche_overlap_qual") %>%
mutate(
percentage = as.numeric(str_remove(percentage, "qual_"))
)
## ----warning = FALSE----------------------------------------------------------
ggplot(data = over_stat_df, aes(x = sample_name_a,
y = niche_overlap_perc,
fill = sample_name_b)) +
geom_violin() +
stat_summary(fun.y = median, geom = "point",
size = 3,
position = position_dodge(width = 0.9)) +
geom_vline(xintercept = seq(1.5, 3.5, 1),
linetype = 2) +
scale_fill_viridis_d(begin = 0.25, end = 0.75,
option = "D", name = "Species",
alpha = 0.35) +
theme_bw() +
theme(
panel.grid = element_blank(),
axis.text = element_text(colour = "black"),
legend.background = element_blank(),
strip.background = element_blank()
) +
labs(x = paste("Overlap Probability (%)", "\u2013",
"Niche Region Size: 95%"),
y = "p(Percent Overlap | X)")
## -----------------------------------------------------------------------------
niche_size <- extract_niche_size(fish_par)
## -----------------------------------------------------------------------------
ggplot(data = niche_size,
aes(x = sample_name, y = niche_size)) +
geom_violin(
width = 0.2) +
stat_summary(fun.y = median, geom = "point",
size = 3,
position = position_dodge(width = 0.9)) +
theme_bw(base_size = 15) +
theme(panel.grid = element_blank(),
axis.text = element_text(colour = "black")) +
labs(x = "Species",
y = "Niche Size")