Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Jaccard, P. (1908). “Nouvellesrecherches sur la distribution florale.” Bull. Soc. V and. Sci. Nat., (44):223-270.

Significance tests

For each beta diversity method, both overall significance and pairwise significance can be calculated using a Permutational Multivariate Analysis of Variance (PERMANOVA), a non-parametric multivariate statistical test. The R-squared value represents the percentage of variance explained by the examined groups. E.g. if R = 0.23 then 23% of the total diversity is explained by groupwise differences. PERMANOVA is based on groupwise differences, thus cannot be applied to continuous data.

5a. Choosing a variable to analyse

...

To compare the overall differences between groups within your chosen variable, a PERMANOVA test can be performed and similarly a pairwise Permutational Multivariate Analysis of Variance (PERMANOVA) test can be performed to compare differences between each group.

The R-squared value represents the percentage of variance explained by the examined groups. E.g. if R = 0.23 then 23% of the total diversity is explained by groupwise differences. PERMANOVA is based on groupwise differences, thus cannot be applied to continuous data.

PERMANOVA:

Code Block
# Need to remove rows (from ASV abundance table) with all 0 counts first
asvmatrix <- ampvisdata$abund
asvmatrix <- asvmatrix[rowSums(asvmatrix) > 0, ]
# Also need to transpose (samples need to be as rows, asv's as columns)
asvmatrix <- t(asvmatrix)
# Then generate pairwise distance matrix
sampdist <- vegdist(asvmatrix, method="bray")
# Subset samples table by samples in ampvis2 object (in case some were filtered out)
samples_table_filt <- samples_table[samples_table$ID %in% ampvisdata$metadata$ID, ]
# Use adonis function (vegan package: "Permutational Multivariate Analysis of Variance Using Distance Matrices") to run PERMANOVA on distances
pathotype.adonis <- adonis2(sampdist ~ get(group), data = samples_table_filt)
# Output the r squared and p values as variables
r2 <- pathotype.adonis$R2[1]
pval <- pathotype.adonis$`Pr(>F)`[1]

PERMANOVA R squared =

Code Block
round(r2, 2)

PERMANOVA significance (p) =

Code Block
pval

Pairwise PERMANOVA:

Calculate the pairwise PERMANOVA. This is a bit complex, as each group within the variable has to be compared to each other group in a variety of ways. Code comments (#) explain what each line of code does.

Code Block
# The combn function creates every combination of provided elements
# Below it takes all group names and combines them pairwise (2)
# Creates a matrix where each column = a combination
comb_pair <- data.frame(combn(unique(samples_table_filt[[group]]),2))
# Convert scores to relative abundance
# Use sweep function to divide ("/") each column (2) by its total (colSums)
comm <- sweep(ampvisdata$abund,2,colSums(ampvisdata$abund),"/")
# Using adonis function (vegan package: "Permutational Multivariate Analysis of Variance Using Distance Matrices")
tabstat_adonis <- c()
# Loop through each pair (i.e. column in 'comb_pair')
for (i in 1:ncol(comb_pair)) {
  # Pull out pair data
  # From samples table
  samples_table_SB_pair <- samples_table_filt[samples_table_filt[[group]] %in% comb_pair[[i]], ]
  # From ASV matrix
  asvmatrix_pair <- comm[samples_table_SB_pair$ID]
  # Transpose
  asvmatrix_pair <- asvmatrix_pair[rowSums(asvmatrix_pair) > 0, ]
  # Also need to transpose (samples need to be as rows, asv's as columns)
  asvmatrix_pair <- t(asvmatrix_pair)
  # Then generate pairwise distance matrix
  sampdist_pair <- vegdist(asvmatrix_pair, method="bray")
  # Use anosim (vegan): Analysis of Similarities
  x2 <- adonis2(sampdist_pair ~ get(group), data = samples_table_SB_pair)
  # Pull out just r squared and p value
  r2_adonis <- x2$R2[1]
  pval_adonis <- x2$`Pr(>F)`[1]
  # Combine into data frame
  tabstat_adonis <- cbind(tabstat_adonis, c(r2_adonis, pval_adonis))
  # Name vector with group combinations
  colnames(tabstat_adonis)[i] <- paste(comb_pair[[i]], collapse=' Vs ')
}
row.names(tabstat_adonis) <- c("R squared", "p")

Now output these results as a table.

Code Block
tabstat_adonis <- t(tabstat_adonis)
tabstat_adonis <- data.frame(tabstat_adonis)
tabstat_adonis

You can export this table as a csv file:

Code Block
write_csv(tabstat_adonis, paste0("beta_div_pairwise_PERMANOVA", group, "_", index, "_samples_.csv"))