Nothing
## ---- setup, include = FALSE--------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
library(traitstrap)
library(dplyr)
library(tidyr)
library(stringr)
library(purrr)
library(ggplot2)
# wes anderson colours
col_palettes <- list(
GrandBudapest1 = c("#FD6467", "#5B1A18", "#D67236")
)
theme_set(theme_minimal(base_size = 12))
## ----hex, echo=FALSE, out.width='15%', out.extra='style="float:right; padding:8px"'----
knitr::include_graphics("../man/figures/Traitstrap_hex.png")
## ----true-dist, echo=FALSE, out.width='90%'-----------------------------------
knitr::include_graphics("true-dist.png")
## ----comm-boot, echo=FALSE, out.width='90%'-----------------------------------
knitr::include_graphics("comm-boot.png")
## ----data-prank, echo=FALSE, eval=TRUE----------------------------------------
community <- community |>
mutate(Taxon = case_when(
Taxon == "equisetum scirpoides" ~ "enquistetum scirpoides",
Taxon == "micranthes hieracifolia" ~ "maitneranthes hieracifolia",
Taxon == "bistorta vivipara" ~ "bistorta vigdis",
Taxon == "stellaria humifusa" ~ "stelfordaria humifusa",
Taxon == "oxyria digyna" ~ "oxyria tanyna",
Taxon == "silene acaulis" ~ "silene acaudis",
TRUE ~ Taxon
))
trait <- trait |>
mutate(Taxon = case_when(
Taxon == "equisetum scirpoides" ~ "enquistetum scirpoides",
Taxon == "micranthes hieracifolia" ~ "maitneranthes hieracifolia",
Taxon == "bistorta vivipara" ~ "bistorta vigdis",
Taxon == "stellaria humifusa" ~ "stelfordaria humifusa",
Taxon == "oxyria digyna" ~ "oxyria tanyna",
Taxon == "silene acaulis" ~ "silene acaudis",
TRUE ~ Taxon
))
# shorten trait names
trait <- trait |>
mutate(Trait = recode(Trait, "Leaf_Thickness_Ave_mm" = "Thickness_mm"))
## ----comm-data, echo=FALSE, eval=TRUE-----------------------------------------
community
## ----trait-data, echo=FALSE, eval=TRUE----------------------------------------
trait
## ----trait-fill, echo=TRUE, eval=TRUE-----------------------------------------
trait_filling <- trait_fill(
# input data (mandatory)
comm = community,
traits = trait,
# specifies columns in your data (mandatory)
abundance_col = "Cover",
taxon_col = "Taxon",
trait_col = "Trait",
value_col = "Value",
# specifies sampling hierarchy
scale_hierarchy = c("Site", "PlotID"),
# min number of samples
min_n_in_sample = 9
)
trait_filling
## ----trait-fill2, echo=TRUE, eval=FALSE---------------------------------------
# trait_filling2 <- trait_fill(
# comm = community,
# traits = trait,
# abundance_col = "Cover",
#
# # defining taxonomic hierarchy
# taxon_col = c("Taxon", "Genus"),
# trait_col = "Trait",
# value_col = "Value",
# scale_hierarchy = c("Site", "PlotID"),
# min_n_in_sample = 3,
#
# # specifying experimental design
# treatment_col = "Treatment",
# treatment_level = "Site",
# )
## ----non-parap-boot, echo=TRUE, eval=TRUE-------------------------------------
# run nonparametric bootstrapping
np_bootstrapped_moments <- trait_np_bootstrap(
trait_filling,
nrep = 50
)
np_bootstrapped_moments
## ----summarize, echo=TRUE, eval=TRUE------------------------------------------
# summarizes bootstrapping output
sum_boot_moment <- trait_summarise_boot_moments(
np_bootstrapped_moments
)
sum_boot_moment
## ----fit-dist, echo=TRUE, eval=TRUE-------------------------------------------
# fit distributions
fitted_distributions <- trait_fit_distributions(
filled_traits = trait_filling,
distribution_type = "lognormal"
)
fitted_distributions
## ----fit-dist2, echo=TRUE, eval=FALSE-----------------------------------------
# # fit several types of distributions
# fitted_distributions <- trait_fit_distributions(
# filled_traits = trait_filling,
# distribution_type = c(Plant_Height_cm = "normal",
# Wet_Mass_g = "lognormal")
# )
#
# fitted_distributions
## ----para-boot, echo=TRUE, eval=TRUE------------------------------------------
# run parametric bootstrapping
p_bootstrapped_moments <- trait_parametric_bootstrap(
fitted_distributions = fitted_distributions,
nrep = 50
)
p_bootstrapped_moments
## ----raw-dist-np, echo=TRUE, eval=TRUE----------------------------------------
# run nonparametric bootstrapping
raw_dist_np <- trait_np_bootstrap(
filled_traits = trait_filling,
raw = TRUE
)
raw_dist_np
## ----plot-raw-dist-np, echo=TRUE, eval=TRUE, fig.width = 6--------------------
ggplot(raw_dist_np, aes(x = log(Value), fill = Site)) +
geom_density(alpha = 0.4) +
scale_fill_manual(values = col_palettes$GrandBudapest1) +
labs(x = "log(trait value)") +
facet_wrap(facets = vars(Trait), scales = "free")
## ----multivariate-prep, warning=FALSE-----------------------------------------
library(FD)
multivariate_traits <- trait_fill(
comm = community |>
# to make the example faster, we'll only use a subset of plots
filter(
Site == "1",
PlotID %in% c("A", "B")
),
traits = trait,
scale_hierarchy = c("Site", "PlotID"),
taxon_col = "Taxon",
value_col = "Value",
trait_col = "Trait",
abundance_col = "Cover",
complete_only = TRUE,
leaf_id = "ID"
)
## ----multivariate-bootstrap, warning=FALSE------------------------------------
boot_multi <- trait_multivariate_bootstrap(
filled_traits = multivariate_traits,
nrep = 5, # number of reps is set low for demo purposes
sample_size = 200,
id = "ID",
fun = function(x) {
dbFD(
x = x,
calc.FRic = FALSE,
calc.FDiv = FALSE,
calc.CWM = FALSE,
stand.x = FALSE,
scale.RaoQ = FALSE
)
}
)
# data wrangling
raoq_est <- boot_multi |>
mutate(result = map(result, as.data.frame)) |>
unnest(result)
## ----multivariate-plot, warning=FALSE, fig.width = 6--------------------------
ggplot(data = raoq_est, mapping = aes(x = RaoQ, fill = PlotID)) +
geom_density(alpha = 0.5) +
scale_fill_manual(values = col_palettes$GrandBudapest1) +
xlim(c(0, 6))
## ----multivariate-tpd, echo=TRUE, warning=FALSE, message=FALSE, fig.width = 6----
library(TPD)
boot_tpd <- trait_multivariate_bootstrap(multivariate_traits,
id = "ID",
nrep = 5, # Note that the number of reps is set low for demo purposes
fun = function(x) {
TPDs(
species = rep(1, 200),
traits = x
) |>
REND(TPDs = _)
}
)
# wrangling data
tpd <- boot_tpd |>
mutate(result = map(result, as.data.frame)) |>
unnest(result) |>
pivot_longer(
cols = species.FRichness:species.FDivergence,
values_to = "value",
names_to = "metric"
) |>
mutate(metric = str_remove(metric, "species\\."))
# and make plot
ggplot(data = tpd) +
geom_violin(
mapping = aes(y = value, x = PlotID, fill = PlotID),
alpha = 0.5,
draw_quantiles = c(0.025, 0.975)
) +
scale_fill_manual(values = col_palettes$GrandBudapest1) +
facet_wrap(facets = vars(metric), scales = "free")
## ----coverage-plot, echo=TRUE, eval=TRUE, fig.width = 6-----------------------
# show coverage plot
autoplot(trait_filling) +
scale_fill_manual(values = col_palettes$GrandBudapest1) +
theme(axis.text.x = element_text(size = 8, angle = 90, vjust = 0.5))
## ----missing-traits, echo=TRUE, eval=TRUE-------------------------------------
# list missing traits
trait_missing(
filled_trait = trait_filling,
comm = community
)
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.