## ----------------------------------------------------------------------------- data("aravo", package = "ade4") str(aravo) ## ----------------------------------------------------------------------------- # Site-species matrix stored in aravo$spe mat = as.matrix(aravo$spe) mat[1:5, 1:5] ## ----------------------------------------------------------------------------- library(funrar) dat = matrix_to_stack(mat, "value", "site", "species") head(dat) # The reverse function is provided and gives the same original matrix identical( as.numeric(stack_to_matrix(dat, "site", "species", "value")), as.numeric(mat) ) # Removal of empty rows dat = dat[which(dat$value > 0), ] ## ----------------------------------------------------------------------------- tra = aravo$traits[, c("Height", "SLA", "N_mass")] head(tra) dist_mat = compute_dist_matrix(tra) dist_mat[1:5, 1:5] ## ----distinctivenessComputation----------------------------------------------- # Compute distinctiveness for each species on each site di = distinctiveness(pres_matrix = mat, # The site x species matrix dist_matrix = dist_mat) # Functional Distance matrix di[1:5, 1:5] ## ----computeDi---------------------------------------------------------------- # Species should be character dat$species = as.character(dat$species) # Compute distinctiveness for each species on each site di_df = distinctiveness_stack( com_df = dat, # The site x species table sp_col = "species", # Name of the species column com = "site", # Name of the community column abund = NULL, # Relative abundances column (facultative) dist_matrix = dist_mat # Functional Distance matrix ) head(di_df) ## ----abundDi------------------------------------------------------------------ di_df = distinctiveness_stack(dat, "species", "site", "value", dist_mat) head(di_df) ## ----scarcityComp------------------------------------------------------------- si = scarcity(pres_matrix = mat) si[1:5, 1:5] ## ----rel-abund-comp----------------------------------------------------------- # Compute relative abundances site_abundances = aggregate(value ~ site, data = dat, FUN = sum) colnames(site_abundances)[2] = "total_abundance" dat = merge(dat, site_abundances, by = "site") dat$rel_abund = dat[["value"]] / dat[["total_abundance"]] head(dat) ## ----siComp------------------------------------------------------------------- si_df = scarcity_stack(dat, "species", "site", "rel_abund") head(si_df) ## ----uniqComp----------------------------------------------------------------- ui = uniqueness(mat, dist_mat) head(ui) ## ----uiComp------------------------------------------------------------------- ui_df = uniqueness_stack(dat, "species", dist_mat) head(ui_df) dim(ui_df[!duplicated(ui_df$species), ]) ## ----------------------------------------------------------------------------- ri = restrictedness(mat) head(ri) ## ----------------------------------------------------------------------------- # Species should be character dat$site = as.character(dat$site) ri_df = restrictedness_stack(dat, "species", "site") head(ri_df) ## ----------------------------------------------------------------------------- all_ind = funrar(mat, dist_mat, rel_abund = TRUE) str(all_ind) identical(all_ind$Ui, ui) identical(all_ind$Di, di) identical(all_ind$Ri, ri) identical(all_ind$Si, si) ## ----------------------------------------------------------------------------- library(ggplot2) # Heatmap with distinctiveness values ggplot(di_df, aes(species, site)) + geom_tile(aes(fill = Di), colour = "white") + scale_fill_gradient(low = "white", high = "steelblue") # Density of distinctiveness values quant = quantile(di_df$Di, probs = seq(0, 1, 0.10)) labels_quant = paste(names(quant)[-length(quant)], names(quant)[-1], sep = "-") di_density = data.frame(density(di_df$Di)[c("x", "y")]) di_density = subset(di_density, x >= quant[[1]] & x <= quant[[length(quant)]]) di_density$quant = cut(di_density$x, breaks = quant) quant = quantile(di_df$Di, probs = seq(0, 1, 0.10)) labels_quant = paste(names(quant)[-length(quant)], names(quant)[-1], sep = "-") di_dens = ggplot(data = di_density, aes(x = x, y = y)) + geom_area(aes(fill = quant)) + scale_fill_brewer(palette = "RdYlBu", labels = labels_quant, name = "Quantile") + geom_line(size = 1) + xlab("Distinctiveness values") + ylab("Frequency") + ggtitle("Density of distinctiveness values") + theme_classic() di_dens # Density of scarcity values quant = quantile(si_df$Si, probs = seq(0, 1, 0.10)) labels_quant = paste(names(quant)[-length(quant)], names(quant)[-1], sep = "-") si_density = data.frame(density(si_df$Si)[c("x", "y")]) si_density = subset(si_density, x >= quant[[1]] & x <= quant[[length(quant)]]) si_density$quant = cut(si_density$x, breaks = quant) quant = quantile(si_df$Si, probs = seq(0, 1, 0.10)) labels_quant = paste(names(quant)[-length(quant)], names(quant)[-1], sep = "-") si_dens = ggplot(data = si_density, aes(x = x, y = y)) + geom_area(aes(fill = quant)) + scale_fill_brewer(palette = "RdYlBu", labels = labels_quant, name = "Quantile") + geom_line(size = 1) + xlab("Scarcity values") + ylab("Frequency") + ggtitle("Density of scarcity values") + theme_classic() si_dens # Regional rarity: restrictedness versus uniqueness colnames(ri_df)[colnames(ri_df) == "sp"] = "species" ri_ui <- merge(ri_df, ui_df, by = "species") ggplot(ri_ui, aes(Ri, Ui)) + geom_point() + theme_classic()