Chapter 8 Beta diversity

beta_q0n <- genome_counts_filt %>%
  column_to_rownames(., "genome") %>%
  filter(rowSums(. != 0, na.rm = TRUE) > 0) %>%
  select_if(~!all(. == 0)) %>%
  hillpair(., q = 0)

beta_q1n <- genome_counts_filt %>%
  column_to_rownames(., "genome") %>%
  filter(rowSums(. != 0, na.rm = TRUE) > 0) %>%
  select_if(~!all(. == 0)) %>%
  hillpair(., q = 1)

beta_q1p <- genome_counts_filt %>%
  column_to_rownames(., "genome") %>%
  filter(rowSums(. != 0, na.rm = TRUE) > 0) %>%
  select_if(~!all(. == 0)) %>%
  hillpair(., q = 1, tree = genome_tree)

beta_q1f <- genome_counts_filt %>%
  filter(genome %in% labels(dist)[[1]]) %>%
  column_to_rownames(., "genome") %>%
  filter(rowSums(. != 0, na.rm = TRUE) > 0) %>%
  select_if(~!all(. == 0)) %>%
  hillpair(., q = 1, dist = dist)

8.1 Richness

beta_q0n$S %>%
  vegan::metaMDS(., trymax = 500, k = 2, trace=0) %>%
  vegan::scores() %>%
  as_tibble(., rownames = "sample") %>%
  dplyr::left_join(sample_metadata, by = join_by(sample == sample)) %>%
  mutate(Bd_status=factor(Bd_status,levels=c("Bd_positive", "Bd_negative")))%>%
  group_by(Bd_status) %>%
  mutate(x_cen = mean(NMDS1, na.rm = TRUE)) %>%
  mutate(y_cen = mean(NMDS2, na.rm = TRUE)) %>%
  ungroup() %>% 
  ggplot(aes(x = NMDS1, y = NMDS2, color = Bd_status)) +
    geom_point(size = 3, alpha = 0.9) +
    geom_segment(aes(x = x_cen, y = y_cen, xend = NMDS1, yend = NMDS2), alpha = 0.5, show.legend = FALSE) +
    theme_classic() +
    theme(
      axis.text.x = element_text(size = 12),
      axis.text.y = element_text(size = 12),
      axis.title = element_text(size = 12, face = "bold"),
      axis.text = element_text(face = "bold", size = 12),
      panel.background = element_blank(),
      axis.line = element_line(size = 0.5, linetype = "solid", colour = "black"),
      legend.text = element_text(size = 12),
      legend.title = element_text(size = 14),
      legend.position = "right", legend.box = "vertical"
    ) +
  labs(color='Bd status')

beta_q0n_mat <- as.matrix(beta_q0n$S)
beta_q0n_filtered <- beta_q0n_mat[rownames(beta_q0n_mat) %in% sample_metadata$sample,
                        colnames(beta_q0n_mat) %in% sample_metadata$sample]
beta_q0n_dis <- as.dist(beta_q0n_filtered)

sample_metadata_ordered <- sample_metadata %>% 
  arrange(match(sample,labels(beta_q0n_dis))) %>% 
  column_to_rownames(., "sample")

all(sample_metadata_ordered$sample == labels(beta_q0n_dis))
[1] TRUE
betadisper(beta_q0n_dis, sample_metadata_ordered$Bd_status) %>% permutest(., pairwise = TRUE) 

Permutation test for homogeneity of multivariate dispersions
Permutation: free
Number of permutations: 999

Response: Distances
          Df   Sum Sq    Mean Sq      F N.Perm Pr(>F)
Groups     1 0.000347 0.00034692 0.2568    999   0.61
Residuals 37 0.049992 0.00135112                     

Pairwise comparisons:
(Observed p-value below diagonal, permuted p-value above diagonal)
            Bd_negative Bd_positive
Bd_negative                   0.608
Bd_positive     0.61536            
adonis2(beta_q0n_dis ~ Bd_status+region+sex, 
        data = sample_metadata_ordered, 
        permutations = 999, by="margin") %>%
        broom::tidy() %>%
        tt()
term df SumOfSqs R2 statistic p.value
Bd_status 1 0.3829697 0.02583199 1.042168 0.362
region 1 1.2485628 0.08421778 3.397691 0.001
sex 1 0.3330269 0.02246326 0.906260 0.562
Residual 35 12.8615873 0.86753690 NA NA
Total 38 14.8254065 1.00000000 NA NA

8.2 Neutral

beta_q1n$S %>%
  vegan::metaMDS(., trymax = 500, k = 2, trace=0) %>%
  vegan::scores() %>%
  as_tibble(., rownames = "sample") %>%
  dplyr::left_join(sample_metadata, by = join_by(sample == sample)) %>%
  mutate(Bd_status=factor(Bd_status,levels=c("Bd_positive", "Bd_negative")))%>%
  group_by(Bd_status) %>%
  mutate(x_cen = mean(NMDS1, na.rm = TRUE)) %>%
  mutate(y_cen = mean(NMDS2, na.rm = TRUE)) %>%
  ungroup() %>% 
  ggplot(aes(x = NMDS1, y = NMDS2, color = Bd_status)) +
    geom_point(size = 3, alpha = 0.9) +
    geom_segment(aes(x = x_cen, y = y_cen, xend = NMDS1, yend = NMDS2), alpha = 0.5, show.legend = FALSE) +
    theme_classic() +
    theme(
      axis.text.x = element_text(size = 12),
      axis.text.y = element_text(size = 12),
      axis.title = element_text(size = 12, face = "bold"),
      axis.text = element_text(face = "bold", size = 12),
      panel.background = element_blank(),
      axis.line = element_line(size = 0.5, linetype = "solid", colour = "black"),
      legend.text = element_text(size = 12),
      legend.title = element_text(size = 14),
      legend.position = "right", legend.box = "vertical"
    ) +
  labs(color='Bd status')

beta_q1n_mat <- as.matrix(beta_q1n$S)
beta_q1n_filtered <- beta_q1n_mat[rownames(beta_q1n_mat) %in% sample_metadata$sample,
                        colnames(beta_q1n_mat) %in% sample_metadata$sample]
beta_q1n_dis <- as.dist(beta_q1n_filtered)

sample_metadata_ordered <- sample_metadata %>% 
  arrange(match(sample,labels(beta_q1n_dis))) %>% 
  column_to_rownames(., "sample")

all(sample_metadata_ordered$sample == labels(beta_q1n_dis))
[1] TRUE
betadisper(beta_q1n_dis, sample_metadata_ordered$Bd_status) %>% permutest(., pairwise = TRUE) 

Permutation test for homogeneity of multivariate dispersions
Permutation: free
Number of permutations: 999

Response: Distances
          Df  Sum Sq  Mean Sq      F N.Perm Pr(>F)
Groups     1 0.01088 0.010878 0.1925    999  0.662
Residuals 37 2.09067 0.056505                     

Pairwise comparisons:
(Observed p-value below diagonal, permuted p-value above diagonal)
            Bd_negative Bd_positive
Bd_negative                    0.66
Bd_positive     0.66339            
adonis2(beta_q1n_dis ~ Bd_status+region+sex, 
        data = sample_metadata_ordered, 
        permutations = 999, by="margin") %>%
        broom::tidy() %>%
        tt()
term df SumOfSqs R2 statistic p.value
Bd_status 1 0.2720914 0.02279371 0.9408119 0.459
region 1 1.2731225 0.10665235 4.4020830 0.001
sex 1 0.1900787 0.01592332 0.6572362 0.788
Residual 35 10.1223185 0.84796953 NA NA
Total 38 11.9371252 1.00000000 NA NA

8.3 Phylogenetic

beta_q1p$S %>%
  vegan::metaMDS(., trymax = 500, k = 2, trace=0) %>%
  vegan::scores() %>%
  as_tibble(., rownames = "sample") %>%
  dplyr::left_join(sample_metadata, by = join_by(sample == sample)) %>%
  mutate(Bd_status=factor(Bd_status,levels=c("Bd_positive", "Bd_negative")))%>%
  group_by(Bd_status) %>%
  mutate(x_cen = mean(NMDS1, na.rm = TRUE)) %>%
  mutate(y_cen = mean(NMDS2, na.rm = TRUE)) %>%
  ungroup() %>% 
  ggplot(aes(x = NMDS1, y = NMDS2, color = Bd_status)) +
    geom_point(size = 3, alpha = 0.9) +
    geom_segment(aes(x = x_cen, y = y_cen, xend = NMDS1, yend = NMDS2), alpha = 0.5, show.legend = FALSE) +
    theme_classic() +
    theme(
      axis.text.x = element_text(size = 12),
      axis.text.y = element_text(size = 12),
      axis.title = element_text(size = 12, face = "bold"),
      axis.text = element_text(face = "bold", size = 12),
      panel.background = element_blank(),
      axis.line = element_line(size = 0.5, linetype = "solid", colour = "black"),
      legend.text = element_text(size = 12),
      legend.title = element_text(size = 14),
      legend.position = "right", legend.box = "vertical"
    ) +
  labs(color='Bd status')

beta_q1p_mat <- as.matrix(beta_q1p$S)
beta_q1p_filtered <- beta_q1p_mat[rownames(beta_q1p_mat) %in% sample_metadata$sample,
                        colnames(beta_q1p_mat) %in% sample_metadata$sample]
beta_q1p_dis <- as.dist(beta_q1p_filtered)

sample_metadata_ordered <- sample_metadata %>% 
  arrange(match(sample,labels(beta_q1p_dis))) %>% 
  column_to_rownames(., "sample")

all(sample_metadata_ordered$sample == labels(beta_q1p_dis))
[1] TRUE
betadisper(beta_q1p_dis, sample_metadata_ordered$Bd_status) %>% permutest(., pairwise = TRUE) 

Permutation test for homogeneity of multivariate dispersions
Permutation: free
Number of permutations: 999

Response: Distances
          Df  Sum Sq  Mean Sq      F N.Perm Pr(>F)
Groups     1 0.01925 0.019254 0.5297    999  0.487
Residuals 37 1.34478 0.036345                     

Pairwise comparisons:
(Observed p-value below diagonal, permuted p-value above diagonal)
            Bd_negative Bd_positive
Bd_negative                   0.502
Bd_positive     0.47129            
adonis2(beta_q1p_dis ~ Bd_status+region+sex, 
        data = sample_metadata_ordered, 
        permutations = 999, by="margin") %>%
        broom::tidy() %>%
        tt()
term df SumOfSqs R2 statistic p.value
Bd_status 1 0.17324888 0.038445404 1.5323163 0.149
region 1 0.29210497 0.064820583 2.5835503 0.026
sex 1 0.04159565 0.009230429 0.3678967 0.900
Residual 35 3.95721881 0.878140603 NA NA
Total 38 4.50636128 1.000000000 NA NA

8.4 Functional

beta_q1f$S %>%
  vegan::metaMDS(., trymax = 500, k = 2, trace=0) %>%
  vegan::scores() %>%
  as_tibble(., rownames = "sample") %>%
  dplyr::left_join(sample_metadata, by = join_by(sample == sample)) %>%
  mutate(Bd_status=factor(Bd_status,levels=c("Bd_positive", "Bd_negative")))%>%
  group_by(Bd_status) %>%
  mutate(x_cen = mean(NMDS1, na.rm = TRUE)) %>%
  mutate(y_cen = mean(NMDS2, na.rm = TRUE)) %>%
  ungroup() %>% 
  ggplot(aes(x = NMDS1, y = NMDS2, color = Bd_status)) +
    geom_point(size = 3, alpha = 0.9) +
    geom_segment(aes(x = x_cen, y = y_cen, xend = NMDS1, yend = NMDS2), alpha = 0.5, show.legend = FALSE) +
    theme_classic() +
    theme(
      axis.text.x = element_text(size = 12),
      axis.text.y = element_text(size = 12),
      axis.title = element_text(size = 12, face = "bold"),
      axis.text = element_text(face = "bold", size = 12),
      panel.background = element_blank(),
      axis.line = element_line(size = 0.5, linetype = "solid", colour = "black"),
      legend.text = element_text(size = 12),
      legend.title = element_text(size = 14),
      legend.position = "right", legend.box = "vertical"
    ) +
  labs(color='Bd status')

beta_q1f_mat <- as.matrix(beta_q1f$S)
beta_q1f_filtered <- beta_q1f_mat[rownames(beta_q1f_mat) %in% sample_metadata$sample,
                        colnames(beta_q1f_mat) %in% sample_metadata$sample]
beta_q1f_dis <- as.dist(beta_q1f_filtered)

sample_metadata_ordered <- sample_metadata %>% 
  arrange(match(sample,labels(beta_q1f_dis))) %>% 
  column_to_rownames(., "sample")

all(sample_metadata_ordered$sample == labels(beta_q1f_dis))
[1] TRUE
betadisper(beta_q1f_dis, sample_metadata_ordered$Bd_status) %>% permutest(., pairwise = TRUE) 

Permutation test for homogeneity of multivariate dispersions
Permutation: free
Number of permutations: 999

Response: Distances
          Df  Sum Sq  Mean Sq      F N.Perm Pr(>F)
Groups     1 0.10182 0.101818 2.5757    999  0.102
Residuals 37 1.46259 0.039529                     

Pairwise comparisons:
(Observed p-value below diagonal, permuted p-value above diagonal)
            Bd_negative Bd_positive
Bd_negative                   0.106
Bd_positive     0.11702            
adonis2(beta_q1f_dis ~ Bd_status+region+sex, 
        data = sample_metadata_ordered, 
        permutations = 999, by="margin") %>%
        broom::tidy() %>%
        tt()
term df SumOfSqs R2 statistic p.value
Bd_status 1 0.09393142 0.01659706 0.7559309 0.450
region 1 0.88568078 0.15649389 7.1276838 0.007
sex 1 0.09744403 0.01721771 0.7841992 0.424
Residual 35 4.34907446 0.76845246 NA NA
Total 38 5.65952309 1.00000000 NA NA