## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----message=FALSE------------------------------------------------------------ { library(bayestestR) library(dplyr) library(ggplot2) library(ggdist) library(ggtext) library(nichetools) library(purrr) library(SIBER) library(tidyr) library(viridis) } ## ----------------------------------------------------------------------------- glimpse(demo.siber.data.2) ## ----------------------------------------------------------------------------- demo.siber.data.2 <- demo.siber.data.2 %>% mutate( group = factor(group), community = factor(community), group_id = as.numeric(group) %>% as.character(), community_id = as.numeric(community) %>% as.character() ) %>% rename( group_name = group, community_name = community, group = group_id, community = community_id ) glimpse(demo.siber.data.2) ## ----------------------------------------------------------------------------- # ---- create name with group and community data frame ---- cg_names <- demo.siber.data.2 %>% distinct(group, community, group_name, community_name) %>% arrange(community, group) # ---- create community names data frame ---- c_names <- demo.siber.data.2 %>% distinct(community, community_name) %>% arrange(community) ## ----------------------------------------------------------------------------- ggplot(data = demo.siber.data.2, aes(x = iso1, y = iso2, colour = group_name)) + geom_point() + facet_wrap(~ community_name) + scale_colour_viridis_d(option = "A", begin = 0.25, end = 0.85, name = "Groups", alpha = 0.75) + theme_bw( base_size = 15 ) + theme( strip.background = element_blank(), panel.grid = element_blank(), axis.title = element_markdown(), legend.position = "inside", legend.position.inside = c(0.65, 0.75) ) + labs( x = paste0("\U03B4","", 13, "", "C", " (‰)"), y = paste0("\U03B4","", 15, "", "N", " (‰)") ) ## ----------------------------------------------------------------------------- demo_siber_data <- demo.siber.data.2 %>% dplyr::select(iso1, iso2, group, community) %>% arrange(community, group) %>% as.data.frame() ## ----------------------------------------------------------------------------- siber_example <- createSiberObject(demo_siber_data) ## ----------------------------------------------------------------------------- # options for running jags parms <- list() parms$n.iter <- 2 * 10^4 # number of iterations to run the model for parms$n.burnin <- 1 * 10^3 # discard the first set of values parms$n.thin <- 10 # thin the posterior by this many parms$n.chains <- 2 # run this many chains ## ----------------------------------------------------------------------------- # fit the ellipses which uses an Inverse Wishart prior on the # covariance matrix Sigma, and a vague normal prior on the # means. priors <- list() priors$R <- 1 * diag(2) priors$k <- 2 priors$tau.mu <- 1.0E-3 ## ----message=FALSE, results='hide'-------------------------------------------- ellipses_posterior <- siberMVN(siber_example, parms, priors) ## ----message = FALSE---------------------------------------------------------- df_mu <- extract_mu(ellipses_posterior, pkg = "SIBER", data_format = "wide", community_df = cg_names) ## ----------------------------------------------------------------------------- ggplot() + geom_point(data = df_mu, aes(x = d13c, y = d15n, colour = group_name)) + geom_point(data = demo.siber.data.2, aes(x = iso1, y = iso2, colour = group_name)) + facet_wrap( ~ community_name) + scale_colour_viridis_d(option = "A", begin = 0.25, end = 0.85, name = "Groups", alpha = 0.75) + theme_bw( base_size = 15 ) + theme( strip.background = element_blank(), panel.grid = element_blank(), axis.title = element_markdown(), legend.position = "inside", legend.position.inside = c(0.65, 0.75) ) + labs( x = paste0("\U03B4","", 13, "", "C", " (‰)"), y = paste0("\U03B4","", 15, "", "N", " (‰)") ) ## ----message=FALSE------------------------------------------------------------ df_mu_long <- extract_mu(ellipses_posterior, pkg = "SIBER", community_df = cg_names) ## ----------------------------------------------------------------------------- df_sigma <- extract_sigma(ellipses_posterior, pkg = "SIBER") ## ----message = FALSE---------------------------------------------------------- df_el <- niche_ellipse(dat_mu = df_mu_long, dat_sigma = df_sigma, set_seed = 4, n = 20) %>% separate_wider_delim(sample_name, cols_remove = FALSE, delim = ".", names = c("community", "group")) %>% left_join(cg_names) ## ----------------------------------------------------------------------------- ggplot(data = df_el, aes(x = d13c, y = d15n, group = interaction(sample_number, sample_name), colour = group_name)) + geom_polygon(linewidth = 0.5, fill = NA) + facet_wrap( ~ community_name) + scale_colour_viridis_d(option = "A", begin = 0.25, end = 0.85, name = "Groups", alpha = 0.75) + theme_bw( base_size = 15 ) + theme( strip.background = element_blank(), panel.grid = element_blank(), legend.position = "inside", axis.title = element_markdown(), legend.background = element_blank(), legend.position.inside = c(0.65, 0.75) ) + labs( x = paste0("\U03B4","", 13, "", "C", " (‰)"), y = paste0("\U03B4","", 15, "", "N", " (‰)") ) ## ----------------------------------------------------------------------------- sea_b <- siberEllipses(corrected.posteriors = ellipses_posterior) ## ----------------------------------------------------------------------------- seb_convert <- extract_niche_size(data = sea_b, pkg = "SIBER", community_df = cg_names) ## ----------------------------------------------------------------------------- group_ml <- groupMetricsML(siber_example) ## ----------------------------------------------------------------------------- group_convert <- extract_group_metrics(data = group_ml, community_df = cg_names) ## ----------------------------------------------------------------------------- sea_c <- group_convert %>% filter(metric == "SEAc") ## ----------------------------------------------------------------------------- ggplot() + geom_violin(data = seb_convert, aes(x = community_name, y = sea, fill = group_name)) + scale_fill_viridis_d(option = "A", begin = 0.25, end = 0.85, name = "Groups", alpha = 0.75) + geom_point(data = sea_c, aes(x = community_name, y = est, group = group_name, ), size = 2.5, fill = "white", shape = 21, position = position_dodge(width = 0.9)) + theme_bw( base_size = 15 ) + theme( strip.background = element_blank(), panel.grid = element_blank(), legend.position = "inside", legend.background = element_blank(), legend.position.inside = c(0.85, 0.8) ) + labs( x = "Communities", y = expression(paste("Niche Size p(", "‰"^2, "| x)")) ) ## ----------------------------------------------------------------------------- cg_names_within_com <- cg_names %>% create_comparisons(comparison = "within") ## ----------------------------------------------------------------------------- ml_within_overlap <- cg_names_within_com %>% map(~ maxLikOverlap(.x$cg_1, .x$cg_2, siber_example, p.interval = 0.95, n = 100)) ## ----------------------------------------------------------------------------- ml_95_within_com <- extract_similarities(ml_within_overlap, type = "ml", community_df = cg_names) ## ----------------------------------------------------------------------------- bayes95_overlap <- cg_names_within_com %>% map(~ bayesianOverlap(.x$cg_1, .x$cg_2, ellipses_posterior, draws = 100, p.interval = 0.95, n = 100) ) ## ----------------------------------------------------------------------------- bays_95_overlap <- extract_similarities(bayes95_overlap, type = "bay", community_df = cg_names) ## ----------------------------------------------------------------------------- viridis_colors_s <- viridis(4, begin = 0.25, end = 0.85, option = "A", alpha = 0.75 ) ## ----------------------------------------------------------------------------- ggplot() + stat_pointinterval(data = bays_95_overlap, aes(x = group_1, y = prop_overlap, point_fill = group_2), interval_colour = "grey60", point_size = 3, shape = 21, position = position_dodge(0.4)) + geom_point(data = ml_95_within_com, aes(x = group_1, y = prop_overlap, group = group_2), shape = 21, fill = "white", size = 2, alpha = 0.5, position = position_dodge(0.4)) + scale_fill_manual(name = "Group", aesthetics = "point_fill", values = viridis_colors_s) + theme_bw( base_size = 15 ) + theme( panel.grid = element_blank(), strip.background = element_blank(), legend.position = "inside", legend.position.inside = c(0.15, 0.80), ) + labs( x = "Group", y = expression(paste("p(", "‰", "|X)")) ) ## ----------------------------------------------------------------------------- community_ml <- communityMetricsML(siber_example) ## ----------------------------------------------------------------------------- layman_ml <- extract_layman(community_ml, type = "ml", community_df = c_names) ## ----------------------------------------------------------------------------- mu_post <- extractPosteriorMeans(siber_example, ellipses_posterior) ## ----------------------------------------------------------------------------- layman_b <- bayesianLayman(mu.post = mu_post) ## ----------------------------------------------------------------------------- layman_be <- extract_layman(layman_b, community_df = c_names) ## ----------------------------------------------------------------------------- viridis_colors <- viridis(2, begin = 0.25, end = 0.85, option = "G", alpha = 0.75 ) ## ----------------------------------------------------------------------------- ggplot() + stat_pointinterval( data = layman_be, aes(x = labels, y = post_est, point_fill = community_name), point_size = 2.5, interval_colour = "grey60", position = position_dodge(0.4), shape = 21 ) + geom_point(data = layman_ml, aes(x = labels, y = estimate, group = community_name), shape = 21, fill = "white", alpha = 0.5, position = position_dodge(0.4)) + scale_fill_manual(name = "Community", aesthetics = "point_fill", values = viridis_colors) + theme_bw( base_size = 15 ) + theme( panel.grid = element_blank(), axis.text = element_markdown(), legend.position = "inside", legend.position.inside = c(0.88, 0.85), ) + labs( x = "Community Metrics", y = expression(paste("p(", "‰", "|X)")) )