Introduction

This analysis investigates the skin microbiome of Pd-exposed bats, focusing on differences in bacterial taxa between Pd-positive and Pd-negative groups. It identifies protective and pathogenic taxa with the potential for probiotic development.

Loading Libraries

knitr::opts_chunk$set(warning = FALSE, message = FALSE) 
library(dplyr)
library(ggplot2)
library(tidyr)
library(tidyverse)
library(reshape2)

Loading the Dataset

library(readr)
bat_data <- read.csv("META-DATA-FINAL.csv")
head(bat_data)
##            Paper     Bat.Species Field.Site Country              Taxa
## 1 Li et al. 2022 Mu. Leucogaster   New Cave   China  f_Miceococcaceae
## 2 Li et al. 2022 Mu. Leucogaster   New Cave   China       Citrobacter
## 3 Li et al. 2022 Mu. Leucogaster   New Cave   China f_Pasteurellaceae
## 4 Li et al. 2022 Mu. Leucogaster   New Cave   China        Brackiella
## 5 Li et al. 2022 Mu. Leucogaster   New Cave   China   Corynebacterium
## 6 Li et al. 2022 Mu. Leucogaster   New Cave   China    Staphylococcus
##   Relative.Abundance Pd.Positive.or.Negative
## 1              0.016                NEGATIVE
## 2              0.000                NEGATIVE
## 3              0.000                NEGATIVE
## 4              0.029                NEGATIVE
## 5              0.000                NEGATIVE
## 6              0.001                NEGATIVE
#Explanation: The data contains information on bacterial taxa, their relative abundances, and Pd status for each sample. This initial inspection ensures the dataset is loaded correctly.

Exploring the Dataset

str(bat_data)
## 'data.frame':    1470 obs. of  7 variables:
##  $ Paper                  : chr  "Li et al. 2022" "Li et al. 2022" "Li et al. 2022" "Li et al. 2022" ...
##  $ Bat.Species            : chr  "Mu. Leucogaster" "Mu. Leucogaster" "Mu. Leucogaster" "Mu. Leucogaster" ...
##  $ Field.Site             : chr  "New Cave" "New Cave" "New Cave" "New Cave" ...
##  $ Country                : chr  "China" "China" "China" "China" ...
##  $ Taxa                   : chr  "f_Miceococcaceae" "Citrobacter" "f_Pasteurellaceae" "Brackiella" ...
##  $ Relative.Abundance     : num  0.016 0 0 0.029 0 0.001 0 0 0.077 0.068 ...
##  $ Pd.Positive.or.Negative: chr  "NEGATIVE" "NEGATIVE" "NEGATIVE" "NEGATIVE" ...
summary(bat_data)
##     Paper           Bat.Species         Field.Site          Country         
##  Length:1470        Length:1470        Length:1470        Length:1470       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##      Taxa           Relative.Abundance  Pd.Positive.or.Negative
##  Length:1470        Min.   :0.0000000   Length:1470            
##  Class :character   1st Qu.:0.0000290   Class :character       
##  Mode  :character   Median :0.0000468   Mode  :character       
##                     Mean   :0.0219266                          
##                     3rd Qu.:0.0090000                          
##                     Max.   :0.8200000
unique(bat_data$Pd.Positive.or.Negative)
## [1] "NEGATIVE" "POSITIVE"
unique(bat_data$Bat.Species)
## [1] "Mu. Leucogaster"  "R. Pusillus"      "R. Ferrumequinum" "M. Petax"        
## [5] "E. fuscus"
unique(bat_data$Taxa)
##  [1] "f_Miceococcaceae"               "Citrobacter"                   
##  [3] "f_Pasteurellaceae"              "Brackiella"                    
##  [5] "Corynebacterium"                "Staphylococcus"                
##  [7] "Mycobacterium"                  "Kaistobacter"                  
##  [9] "Pseudomonas"                    "Sphingobacterium"              
## [11] "f_Brucellaceae"                 "Flavobacterium"                
## [13] "Myroides"                       "f_Intrasporangiaceae"          
## [15] "Arthobacter"                    "Salinibacterium"               
## [17] "Gluconacetobacter"              "Brevilbacterium"               
## [19] "Yersinia"                       "Rhodococcus"                   
## [21] "Pseudarthrobacter"              "Clostridium sensu stricto 1"   
## [23] "Hafnia-Obesumbacterium"         "Klebsiella"                    
## [25] "Pseudoarthrobacter"             "Mycoplasma"                    
## [27] "Actinobacillus"                 "Bacillus"                      
## [29] "Delftia"                        "Caulobacteraceae Family"       
## [31] "Phyllobacterium"                "Bordetella"                    
## [33] "Sediminibacterium"              "Stenotrophomonas"              
## [35] "Ralstonia"                      "Sphingomonas"                  
## [37] "Bosea"                          "Bradyrhizobium"                
## [39] "Bacillaceae Family"             "Arthrobacter"                  
## [41] "Micrococcus"                    "Lactococcus"                   
## [43] "Enterococcus"                   "Rhizobiaceae Family"           
## [45] "Labrys"                         "Afipia"                        
## [47] "Phreatobacter"                  "Methylobacterium-Methylorubrum"
## [49] "Enhydrobacter"                  "Acinetobacter"                 
## [51] "Paracoccus"                     "Reyranella"                    
## [53] "Xanthobacteracae Family"        "Aquabacterium"                 
## [55] "Lachnospiraceae Family"         "Lactobacillales Order"         
## [57] "Microvirga"                     "Conexibacter"                  
## [59] "Quadrisphaera"                  "JG30-KF_CM45 Family"           
## [61] "Modestobacter"                  "Solirubrobacter"               
## [63] "Marmoricola"                    "Xanthomonadaceae Family"       
## [65] "Microbacteriaceae Family"       "Sporosarcina"                  
## [67] "Streptomyces"                   "Brachybacterium"               
## [69] "Curvibacter"                    "Nosocomiicoccus"               
## [71] "Aminobacter"                    "Micrococcaceae Family"         
## [73] "Kocuria"                        "Qipengyuania"                  
## [75] "Jeotgalicoccus"                 "Taonella Family"               
## [77] "Knoellia"                       "Burkholderiaceae"              
## [79] "Cloacibacterium"                "Romboutsia"                    
## [81] "Escherichia-Shigella"           "Turicibacter"                  
## [83] "Chryseobacterium"               "Williamsia"                    
## [85] "Brevundimonas"                  "Luteimonas"                    
## [87] "Curtobacterium"                 "Achromobacter"                 
## [89] "Proteiniphilum"                 "Jonesia"                       
## [91] "Carnobacterium"                 "Blastococcus"                  
## [93] "Pseudonocardia"                 "Crossiella"                    
## [95] "G7-14 Family"                   "Candidatus Nitrocosmicus"      
## [97] "Rubrobacter"                    "Burkerholderiaceae"
#Explanation: These steps help understand the dataset's variables, identify potential issues (e.g., missing data), and prepare for further analysis.

Identifying Taxa Differences by Pd Status

# Summarize mean abundance by Pd status
taxa_summary <- bat_data %>%
  group_by(Taxa, Pd.Positive.or.Negative) %>%
  summarise(mean_abundance = mean(Relative.Abundance, na.rm = TRUE)) %>%
  pivot_wider(names_from = Pd.Positive.or.Negative, values_from = mean_abundance)

# Filter for taxa present in both Pd-positive and Pd-negative groups
filtered_taxa <- taxa_summary %>%
  filter(!is.na(POSITIVE) & !is.na(NEGATIVE) & POSITIVE > 0 & NEGATIVE > 0)

# Add log-fold change column
filtered_taxa <- filtered_taxa %>%
  mutate(logFC = log2(POSITIVE + 1) - log2(NEGATIVE + 1))

#Explanation: This analysis focuses only on taxa present in both Pd-positive and Pd-negative groups, preventing skewed results caused by absent taxa or artificially assigned zeros. The logFC column captures fold-change differences, highlighting taxa more abundant in one group versus the other.

Why Use Log-Fold Changes?

Log-fold changes (logFC) highlight proportional differences in taxa abundance between groups (Pd-positive vs. Pd-negative bats). A positive logFC indicates higher abundance in Pd-positive bats (potentially pathogenic taxa), while a negative logFC indicates higher abundance in Pd-negative bats (potentially protective taxa). LogFC is used because it: handles large ranges in abundances effectively, reduces noise from low-abundance taxa, enhances interpretability (e.g., logFC of 1 = 2x increase), and provides a balanced scale for visualization. Note that a pseudocount is added to avoid undefined values for zero abundances.

Identifying Taxa of Interest

# Filter for potentially protective taxa (logFC < 0)
protective_taxa <- filtered_taxa %>%
  filter(logFC < 0) %>%  # Negative log fold-change
  arrange(logFC)

# Filter for potentially pathogenic taxa (logFC > 0)
pathogenic_taxa <- filtered_taxa %>%
  filter(logFC > 0) %>%  # Positive log fold-change
  arrange(desc(logFC))

Visualizing Potentially Protective Taxa

library(stringr)
library(ggplot2)

protective_taxa$Taxa <- str_wrap(protective_taxa$Taxa, width = 15)

ggplot(protective_taxa, aes(x = reorder(Taxa, logFC), y = logFC)) +
  geom_bar(stat = "identity", fill = "#3498db", color = "black") +
  geom_text(aes(label = round(logFC, 2)), hjust = -0.3, size = 3, fontface = "bold", color = "black") +
  coord_flip() +
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 9, hjust = 1, color = "gray20"),
    axis.text.x = element_text(size = 10, color = "gray20"),
    axis.title.x = element_text(size = 14, face = "bold", color = "#333333"),
    axis.title.y = element_text(size = 14, face = "bold", color = "#333333"),
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5, color = "#333333"),
    plot.margin = margin(t = 10, r = 10, b = 10, l = 80, unit = "pt"),
    panel.grid.major.x = element_line(color = "gray80", linetype = "dotted"),
    panel.grid.major.y = element_blank(),
    legend.position = "none"
  ) +
  labs(
    title = "Potentially Protective Taxa",
    x = "Bacterial Taxa",
    y = "Log Fold-Change"
  )

#Explanation: This plot highlights taxa that are more abundant in Pd-negative bats and may be candidates for probiotic development.

Visualizing Potentially Pathogenic Taxa

library(stringr)
library(ggplot2)

pathogenic_taxa$Taxa <- str_wrap(pathogenic_taxa$Taxa, width = 15)

ggplot(pathogenic_taxa, aes(x = reorder(Taxa, logFC), y = logFC)) +
  geom_bar(stat = "identity", fill = "#e74c3c", color = "black", width = 0.7) +
  geom_text(aes(label = round(logFC, 2)), 
            color = "black",
            size = 4, fontface = "bold",
            hjust = ifelse(pathogenic_taxa$logFC > 0, -0.2, 1.2),
            vjust = 0.5,
            nudge_y = ifelse(pathogenic_taxa$logFC > 0, 0.1, -0.1)) +
  coord_flip() +
  scale_y_continuous(
    expand = expansion(mult = c(0.1, 0.2))
  ) +
  theme_minimal(base_family = "Arial") +
  theme(
    axis.text.y = element_text(size = 10, hjust = 1, color = "gray20"),
    axis.text.x = element_text(size = 12, color = "gray20"),
    axis.title.x = element_text(size = 14, face = "bold", color = "#333333"),
    axis.title.y = element_text(size = 14, face = "bold", color = "#333333"),
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5, color = "#333333"),
    plot.margin = margin(t = 20, r = 20, b = 20, l = 90, unit = "pt"),
    panel.grid.major.x = element_line(color = "gray80", linetype = "dotted"),
    panel.grid.major.y = element_blank(),
    legend.position = "none"
  ) +
  labs(
    title = "Potentially Pathogenic Taxa",
    x = "Bacterial Taxa",
    y = "Log Fold-Change"
  )

#Explanation: This plot identifies taxa that may thrive in Pd-positive environments or contribute to disease susceptibility.

Table for Probiotic Candidates

library(kableExtra)

# Select top probiotic candidates
probiotic_candidates <- protective_taxa %>%
  arrange(logFC) %>%
  head(10)

probiotic_candidates$Taxa <- stringr::str_wrap(probiotic_candidates$Taxa, width = 20)

probiotic_candidates %>%
  mutate(logFC = round(logFC, 3),
         POSITIVE = round(POSITIVE, 3), 
         NEGATIVE = round(NEGATIVE, 3)) %>%
  kable(
    caption = "Top 6 Probiotic Candidates: Protective Taxa with Higher Abundance in Pd-Negative Bats",
    col.names = c("Taxa", "Mean Abundance (Pd-Positive)", "Mean Abundance (Pd-Negative)", "Log Fold-Change"),
    align = "lccc",
    format = "html"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive", "bordered"),
    full_width = FALSE,
    position = "center"
  ) %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(4, color = "red", bold = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#ADD8E6") %>%
  row_spec(1:nrow(probiotic_candidates), color = "black")
Top 6 Probiotic Candidates: Protective Taxa with Higher Abundance in Pd-Negative Bats
Taxa Mean Abundance (Pd-Positive) Mean Abundance (Pd-Negative) Log Fold-Change
f_Miceococcaceae 0.057 0.020 -0.052
f_Intrasporangiaceae 0.022 0.007 -0.020
f_Brucellaceae 0.021 0.010 -0.015
Brackiella 0.033 0.023 -0.014
Citrobacter 0.008 0.002 -0.009
Salinibacterium 0.008 0.003 -0.007

Table for Pathogenic Candidates

library(kableExtra)
library(stringr)

pathogenic_candidates <- pathogenic_taxa %>%
  arrange(desc(logFC)) %>%
  head(10)

pathogenic_candidates$Taxa <- str_wrap(pathogenic_candidates$Taxa, width = 20)

pathogenic_candidates %>%
  mutate(logFC = round(logFC, 3),
         POSITIVE = round(POSITIVE, 3), 
         NEGATIVE = round(NEGATIVE, 3)) %>%
  kable(
    caption = "Top 10 Pathogenic Bacteria: Taxa with Higher Abundance in Pd-Positive Bats",
    col.names = c("Taxa", "Mean Abundance (Pd-Positive)", "Mean Abundance (Pd-Negative)", "Log Fold-Change"),
    align = "lccc",
    format = "html"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive", "bordered"),
    full_width = FALSE,
    position = "center"
  ) %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(4, color = "blue", bold = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#F08080") %>%
  row_spec(1:nrow(pathogenic_candidates), color = "black")
Top 10 Pathogenic Bacteria: Taxa with Higher Abundance in Pd-Positive Bats
Taxa Mean Abundance (Pd-Positive) Mean Abundance (Pd-Negative) Log Fold-Change
Staphylococcus 0.025 0.219 0.251
Pseudomonas 0.087 0.252 0.204
Flavobacterium 0.018 0.089 0.097
Rhodococcus 0.000 0.062 0.086
Actinobacillus 0.000 0.057 0.079
Klebsiella 0.002 0.050 0.068
Clostridium sensu stricto 1 0.013 0.042 0.041
Sphingobacterium 0.011 0.025 0.020
Bacillus 0.016 0.030 0.019
Arthobacter 0.023 0.034 0.016

Heatmap of Abundance Differences

library(stringr)

heatmap_data <- bat_data %>%
  group_by(Taxa, Pd.Positive.or.Negative) %>%
  summarise(mean_abundance = mean(Relative.Abundance, na.rm = TRUE)) %>%
  pivot_wider(names_from = Pd.Positive.or.Negative, values_from = mean_abundance) %>%
  filter(!is.na(POSITIVE) & !is.na(NEGATIVE) & POSITIVE > 0 & NEGATIVE > 0) %>%
  pivot_longer(cols = c(POSITIVE, NEGATIVE), names_to = "Pd_Status", values_to = "Mean_Abundance")

heatmap_data$Taxa <- str_wrap(heatmap_data$Taxa, width = 15)

ggplot(heatmap_data, aes(x = Pd_Status, y = Taxa, fill = Mean_Abundance)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(
    low = "blue", mid = "white", high = "#228B22",
    midpoint = median(heatmap_data$Mean_Abundance, na.rm = TRUE), 
    name = "Mean Abundance"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    axis.text.y = element_text(size = 8),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    plot.title = element_text(hjust = 0.5, size = 14),
    plot.margin = margin(t = 10, r = 10, b = 10, l = 20, unit = "pt")
  ) +
  labs(
    title = "Heatmap of Taxa Abundance by Pd Status"
  )

Overall Abundance Comparison

library(dplyr)
library(tidyr)
library(ggplot2)
library(stringr)

overall_abundance <- bat_data %>%
  group_by(Taxa, Pd.Positive.or.Negative) %>%
  summarise(total_abundance = sum(Relative.Abundance, na.rm = TRUE), .groups = "drop") %>%
  pivot_wider(names_from = Pd.Positive.or.Negative, values_from = total_abundance) %>%
  filter(!is.na(POSITIVE) & !is.na(NEGATIVE) & POSITIVE > 0 & NEGATIVE > 0) %>%
  pivot_longer(cols = c(POSITIVE, NEGATIVE), names_to = "Pd_Status", values_to = "Total_Abundance") 

overall_abundance$Taxa <- str_wrap(overall_abundance$Taxa, width = 15)

ggplot(overall_abundance, aes(x = reorder(Taxa, Total_Abundance), y = Total_Abundance, fill = Pd_Status)) +
  geom_bar(stat = "identity", position = "dodge") +
  coord_flip() +
  scale_fill_manual(
    values = c("NEGATIVE" = "#3498db", "POSITIVE" = "#e74c3c"),
    name = "Pd Status"
  ) +
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 6), 
    axis.text.x = element_text(size = 10),
    axis.title.x = element_text(size = 12),
    axis.title.y = element_text(size = 12),
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
    legend.position = "top",
    plot.margin = margin(t = 10, r = 10, b = 10, l = 70, unit = "pt")
  ) +
  labs(
    title = "Overall Relative Abundance of Bacterial Taxa",
    x = "Bacterial Taxa",
    y = "Total Relative Abundance"
  )

Overall Abundance of Selected Bacteria

library(dplyr)
library(tidyr)
library(ggplot2)
library(stringr)

# List of selected taxa to include in the plot
selected_taxa <- c("f_Miceococcaceae", "f_Intrasporangiaceae", "f_Brucellaceae", "Staphylococcus", "Pseudomonas", "Flavobacterium", "Rhodococcus", "Actinobacillus", "Clostridium sensu stricto 1")

overall_abundance <- bat_data %>%
  group_by(Taxa, Pd.Positive.or.Negative) %>%
  summarise(total_abundance = sum(Relative.Abundance, na.rm = TRUE), .groups = "drop") %>%
  pivot_wider(names_from = Pd.Positive.or.Negative, values_from = total_abundance) %>%
  filter(!is.na(POSITIVE) & !is.na(NEGATIVE) & POSITIVE > 0 & NEGATIVE > 0) %>%
  pivot_longer(cols = c(POSITIVE, NEGATIVE), names_to = "Pd_Status", values_to = "Total_Abundance") %>%
  filter(Taxa %in% selected_taxa)

overall_abundance$Taxa <- str_wrap(overall_abundance$Taxa, width = 15)

ggplot(overall_abundance, aes(x = reorder(Taxa, Total_Abundance), y = Total_Abundance, fill = Pd_Status)) +
  geom_bar(stat = "identity", position = "dodge") +
  coord_flip() +
  scale_fill_manual(
    values = c("NEGATIVE" = "#3498db", "POSITIVE" = "#e74c3c"),
    name = "Pd Status"
  ) +
  theme_minimal() +
  theme(
    axis.text.y = element_text(size = 10), 
    axis.text.x = element_text(size = 10),
    axis.title.x = element_text(size = 12),
    axis.title.y = element_text(size = 12),
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
    legend.position = "top",
    plot.margin = margin(t = 10, r = 10, b = 10, l = 70, unit = "pt")
  ) +
  labs(
    title = "Overall Relative Abundance of Selected Taxa",
    x = "Bacterial Taxa",
    y = "Total Relative Abundance"
  )

Testing for Significance

# Load necessary libraries
library(dplyr)
library(kableExtra)
library(ggplot2)

# Perform Wilcoxon test for each taxon
p_value_results <- bat_data %>%
  group_by(Taxa) %>%
  summarise(
    Positive_Mean_Abundance = mean(Relative.Abundance[Pd.Positive.or.Negative == "POSITIVE"], na.rm = TRUE),
    Negative_Mean_Abundance = mean(Relative.Abundance[Pd.Positive.or.Negative == "NEGATIVE"], na.rm = TRUE),
    P_Value = tryCatch(
      wilcox.test(
        Relative.Abundance[Pd.Positive.or.Negative == "POSITIVE"],
        Relative.Abundance[Pd.Positive.or.Negative == "NEGATIVE"],
        exact = FALSE  # Handle ties with asymptotic calculation
      )$p.value,
      error = function(e) NA  # Handle errors for insufficient data
    ),
    .groups = "drop"
  ) %>%
  mutate(
    Adjusted_P_Value = p.adjust(P_Value, method = "BH"),  # Adjust for multiple comparisons
    Significance = case_when(
      Adjusted_P_Value < 0.01 ~ "*** (Highly Significant)",
      Adjusted_P_Value < 0.05 ~ "** (Significant)",
      Adjusted_P_Value < 0.10 ~ "* (Marginally Significant)",
      TRUE ~ "Not Significant"
    )
  )

# Table of results
p_value_results %>%
  arrange(Adjusted_P_Value) %>%  # Order by adjusted p-values
  mutate(
    Positive_Mean_Abundance = round(Positive_Mean_Abundance, 3),
    Negative_Mean_Abundance = round(Negative_Mean_Abundance, 3),
    P_Value = formatC(P_Value, format = "e", digits = 2),
    Adjusted_P_Value = formatC(Adjusted_P_Value, format = "e", digits = 2)
  ) %>%
  kable(
    caption = "Statistical Significance Levels of Bacterial Taxa Between Pd-Positive and Pd-Negative Bats",
    col.names = c("Taxa", "Positive Mean Abundance", "Negative Mean Abundance", 
                  "P-Value", "Adjusted P-Value", "Significance"),
    align = "lcccccc",
    format = "html"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  ) %>%
  row_spec(0, bold = TRUE, background = "#DDEBF7") %>%  # Style the header row
  column_spec(1, bold = TRUE) %>%  # Bold taxa names
  column_spec(4, color = "blue", bold = TRUE) %>%  # Highlight P-Values
  column_spec(6, color = "red", bold = TRUE)  # Highlight significance levels
Statistical Significance Levels of Bacterial Taxa Between Pd-Positive and Pd-Negative Bats
Taxa Positive Mean Abundance Negative Mean Abundance P-Value Adjusted P-Value Significance
Rhodococcus 0.062 0.000 1.21e-03 1.39e-02 ** (Significant)
Staphylococcus 0.219 0.025 9.84e-04 1.39e-02 ** (Significant)
Pseudomonas 0.252 0.087 1.85e-03 1.42e-02 ** (Significant)
Actinobacillus 0.057 0.000 9.08e-03 5.22e-02
  • (Marginally Significant)
Clostridium sensu stricto 1 0.042 0.013 1.44e-02 6.65e-02
  • (Marginally Significant)
Flavobacterium 0.089 0.018 2.59e-02 9.94e-02
  • (Marginally Significant)
Mycobacterium 0.010 0.000 5.93e-02 1.95e-01 Not Significant
Corynebacterium 0.000 0.010 7.22e-02 2.08e-01 Not Significant
Arthobacter 0.034 0.023 1.35e-01 3.10e-01 Not Significant
Klebsiella 0.050 0.002 1.29e-01 3.10e-01 Not Significant
Kaistobacter 0.007 0.003 4.01e-01 8.38e-01 Not Significant
Bacillus 0.030 0.016 5.15e-01 9.13e-01 Not Significant
Citrobacter 0.002 0.008 5.37e-01 9.13e-01 Not Significant
f_Miceococcaceae 0.020 0.057 5.56e-01 9.13e-01 Not Significant
f_Intrasporangiaceae 0.007 0.022 6.36e-01 9.14e-01 Not Significant
f_Pasteurellaceae 0.000 0.016 6.00e-01 9.14e-01 Not Significant
Brackiella 0.023 0.033 7.23e-01 9.24e-01 Not Significant
Gluconacetobacter 0.010 0.009 7.22e-01 9.24e-01 Not Significant
Salinibacterium 0.003 0.008 8.12e-01 9.82e-01 Not Significant
Brevilbacterium 0.008 0.003 1.00e+00 1.00e+00 Not Significant
Myroides 0.021 0.019 1.00e+00 1.00e+00 Not Significant
Sphingobacterium 0.025 0.011 1.00e+00 1.00e+00 Not Significant
f_Brucellaceae 0.010 0.021 9.05e-01 1.00e+00 Not Significant
Achromobacter NaN 0.013 NA NA Not Significant
Acinetobacter NaN 0.001 NA NA Not Significant
Afipia NaN 0.002 NA NA Not Significant
Aminobacter NaN 0.000 NA NA Not Significant
Aquabacterium NaN 0.004 NA NA Not Significant
Arthrobacter NaN 0.000 NA NA Not Significant
Bacillaceae Family NaN 0.061 NA NA Not Significant
Blastococcus NaN 0.001 NA NA Not Significant
Bordetella NaN 0.057 NA NA Not Significant
Bosea NaN 0.038 NA NA Not Significant
Brachybacterium NaN 0.000 NA NA Not Significant
Bradyrhizobium NaN 0.034 NA NA Not Significant
Brevundimonas NaN 0.000 NA NA Not Significant
Burkerholderiaceae NaN 0.000 NA NA Not Significant
Burkholderiaceae NaN 0.000 NA NA Not Significant
Candidatus Nitrocosmicus NaN 0.002 NA NA Not Significant
Carnobacterium NaN 0.001 NA NA Not Significant
Caulobacteraceae Family NaN 0.071 NA NA Not Significant
Chryseobacterium NaN 0.001 NA NA Not Significant
Cloacibacterium NaN 0.000 NA NA Not Significant
Conexibacter NaN 0.000 NA NA Not Significant
Crossiella NaN 0.000 NA NA Not Significant
Curtobacterium NaN 0.005 NA NA Not Significant
Curvibacter NaN 0.000 NA NA Not Significant
Delftia NaN 0.230 NA NA Not Significant
Enhydrobacter NaN 0.002 NA NA Not Significant
Enterococcus NaN 0.007 NA NA Not Significant
Escherichia-Shigella NaN 0.001 NA NA Not Significant
G7-14 Family NaN 0.000 NA NA Not Significant
Hafnia-Obesumbacterium 0.293 NaN NA NA Not Significant
JG30-KF_CM45 Family NaN 0.000 NA NA Not Significant
Jeotgalicoccus NaN 0.000 NA NA Not Significant
Jonesia NaN 0.014 NA NA Not Significant
Knoellia NaN 0.000 NA NA Not Significant
Kocuria NaN 0.000 NA NA Not Significant
Labrys NaN 0.000 NA NA Not Significant
Lachnospiraceae Family NaN 0.001 NA NA Not Significant
Lactobacillales Order NaN 0.001 NA NA Not Significant
Lactococcus NaN 0.000 NA NA Not Significant
Luteimonas NaN 0.000 NA NA Not Significant
Marmoricola NaN 0.000 NA NA Not Significant
Methylobacterium-Methylorubrum NaN 0.002 NA NA Not Significant
Microbacteriaceae Family NaN 0.000 NA NA Not Significant
Micrococcaceae Family NaN 0.000 NA NA Not Significant
Micrococcus NaN 0.000 NA NA Not Significant
Microvirga NaN 0.000 NA NA Not Significant
Modestobacter NaN 0.000 NA NA Not Significant
Mycoplasma 0.073 NaN NA NA Not Significant
Nosocomiicoccus NaN 0.002 NA NA Not Significant
Paracoccus NaN 0.001 NA NA Not Significant
Phreatobacter NaN 0.001 NA NA Not Significant
Phyllobacterium NaN 0.071 NA NA Not Significant
Proteiniphilum NaN 0.014 NA NA Not Significant
Pseudarthrobacter 0.180 NaN NA NA Not Significant
Pseudoarthrobacter 0.065 NaN NA NA Not Significant
Pseudonocardia NaN 0.001 NA NA Not Significant
Qipengyuania NaN 0.000 NA NA Not Significant
Quadrisphaera NaN 0.000 NA NA Not Significant
Ralstonia NaN 0.065 NA NA Not Significant
Reyranella NaN 0.001 NA NA Not Significant
Rhizobiaceae Family NaN 0.000 NA NA Not Significant
Romboutsia NaN 0.002 NA NA Not Significant
Rubrobacter NaN 0.003 NA NA Not Significant
Sediminibacterium NaN 0.048 NA NA Not Significant
Solirubrobacter NaN 0.000 NA NA Not Significant
Sphingomonas NaN 0.045 NA NA Not Significant
Sporosarcina NaN 0.000 NA NA Not Significant
Stenotrophomonas NaN 0.039 NA NA Not Significant
Streptomyces NaN 0.000 NA NA Not Significant
Taonella Family NaN 0.001 NA NA Not Significant
Turicibacter NaN 0.001 NA NA Not Significant
Williamsia NaN 0.000 NA NA Not Significant
Xanthobacteracae Family NaN 0.002 NA NA Not Significant
Xanthomonadaceae Family NaN 0.000 NA NA Not Significant
Yersinia 0.130 NaN NA NA Not Significant
# Bar plot of significant taxa
significant_taxa <- p_value_results %>%
  filter(Significance != "Not Significant")

ggplot(significant_taxa, aes(x = reorder(Taxa, Adjusted_P_Value), y = -log10(Adjusted_P_Value), fill = Significance)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  theme_minimal() +
  labs(
    title = "Significant Bacterial Taxa",
    x = "Taxa",
    y = "-log10(Adjusted P-Value)",
    fill = "Significance Level"
  ) +
  scale_fill_manual(values = c(
    "*** (Highly Significant)" = "red", 
    "** (Significant)" = "palegreen3", 
    "* (Marginally Significant)" = "palegoldenrod"
  ))

Explanation of Statistical Analysis

The goal of this analysis was to identify bacterial taxa with significant differences in abundance between Pd-positive and Pd-negative bats. The following steps were used:

  1. Wilcoxon Rank-Sum Test:
    • A non-parametric test was performed for each taxon to compare abundances between Pd-positive and Pd-negative bats.
    • This test is robust to non-normal data and uses asymptotic p-values to handle ties.
  2. Mean Abundance:
    • The average abundance of each taxon was calculated for Pd-positive and Pd-negative bats to indicate which group had higher levels.
  3. P-Value Adjustment:
    • P-values from the Wilcoxon tests were adjusted using the Benjamini-Hochberg method to account for multiple comparisons and reduce false positives.
  4. Significance Levels:
    • Taxa were categorized based on adjusted p-values:
      • (***) \(p < 0.01\) (Highly Significant)
      • (**) \(0.01 \leq p < 0.05\) (Significant)
      • (*) \(0.05 \leq p < 0.10\) (Marginally Significant)
      • Not Significant: \(p \geq 0.10\)
  5. Visualization:
    • A bar plot was created to highlight significant taxa (\(p < 0.10\)) with color-coded significance levels.
  6. Interpretation:
    • Taxa with smaller adjusted p-values are considered more likely to exhibit meaningful differences in abundance between Pd-positive and Pd-negative bats.
    • Mean abundances provide biological context, indicating whether a taxon is enriched in Pd-positive or Pd-negative groups.

Dataset Summary

This meta-analysis synthesizes data from diverse sources to explore the role of skin microbiomes in Pd-exposed bats. Below are the key details of the dataset:

  1. Sources:
    • Data were collected from 3 published studies.
    • These studies spanned 2 countries, including:
      • China, Canada.
  2. Bat Species:
    • The analysis included 5 bat species, such as:
      • Mu. Leucogaster, R. Pusillus, R. Ferrumequinum, M. Petax, E. fuscus.
  3. Taxa:
    • A total of 98 unique bacterial taxa were analyzed.
    • Taxa include key genera like Pseudomonas, Corynebacterium, and Staphylococcus.
  4. Pd Status:
    • Samples were divided into:
      • 111 Pd-positive samples.
      • 1359 Pd-negative samples.
  5. Relative Abundance:
    • Taxa relative abundances ranged from 0 to 0.82.
  6. Log-Fold Change:
    • Log-fold changes for taxa ranged from (most protective) to - (most pathogenic).

Summary Statistics Table

Summary of the Meta-Analysis Dataset
Metric Value
Number of Studies 3.00
Number of Countries 2.00
Number of Bat Species 5.00
Number of Unique Taxa 98.00
Pd-Positive Samples 111.00
Pd-Negative Samples 1359.00
Min Relative Abundance 0.00
Max Relative Abundance 0.82
Min Log-Fold Change Inf
Max Log-Fold Change -Inf

Map of Meta-Analysis Distribution

Summary of Findings

The meta-analysis reveals significant differences in the skin microbiomes of Pd-positive and Pd-negative bats. These findings highlight bacterial taxa potentially contributing to disease susceptibility and suggest promising directions for probiotic development, even though no statistically significant protective taxa were identified.

Pathogenic Taxa

Taxa with significantly higher abundances in Pd-positive bats were identified as potentially pathogenic or opportunistic. These taxa may exacerbate disease susceptibility in Pd-positive bats:

  • Staphylococcus (p < 0.05): A genus often associated with opportunistic infections and biofilm formation, significantly enriched in Pd-positive bats.
  • Pseudomonas (p < 0.05): Known for its versatility and association with fungal infections, this taxon was highly enriched in Pd-positive bats.
  • Rhodococcus (p < 0.05): A genus associated with adaptability and environmental resilience, significantly more abundant in Pd-positive bats.
  • Clostridium sensu stricto 1 (0.05 ≤ p < 0.10): Marginally significant, but still more abundant in Pd-positive bats.
  • Flavobacterium (0.05 ≤ p < 0.10): Marginally significant and more abundant in Pd-positive bats.

Protective Taxa

No bacterial taxa were statistically significantly more abundant in Pd-negative bats. However, exploratory analysis using log-fold changes identified potential candidates for further investigation:

  • f_Micrococcaceae and f_Intrasporangiaceae exhibited trends of higher abundance in Pd-negative bats, as indicated by their positive log-fold changes. While these trends were not statistically significant, these taxa are known for producing bioactive compounds and stabilizing microbial communities, suggesting potential as probiotic candidates.

Overall Patterns

  1. Microbiome Composition:
    • Pd-positive bats were dominated by taxa that are opportunistic and potentially pathogenic.
    • Pd-negative bats did not show statistically significant enrichment of protective taxa.
  2. Key Metrics:
    • Statistically significant taxa (p < 0.05) were exclusively enriched in Pd-positive bats.
    • Log-fold change analysis provided additional insights into potential protective taxa, even though these taxa were not statistically validated.

Probiotic Candidates

While no statistically significant protective taxa were identified, log-fold change analysis highlighted taxa enriched in Pd-negative bats that warrant further investigation as potential probiotics:

  • f_Micrococcaceae: Known for its role in microbial defense, this taxon exhibited a trend of higher abundance in Pd-negative bats.
  • f_Intrasporangiaceae: A family within Actinobacteria with bioactive and antifungal properties, identified as another candidate for probiotic development.

Future Directions

  • Functional Validation: Investigating the mechanisms through which protective taxa confer resistance.

  • Probiotic Development: Testing the efficacy of identified protective taxa in experimental settings.

  • Conservation Applications: Using microbiome-based interventions to enhance the resilience of bat populations to white-nose syndrome.

Call to Action: These findings underscore the potential of microbiome-targeted strategies in wildlife conservation, paving the way for innovative solutions to combat fungal diseases in bats.

Conclusion

This meta-analysis underscores the role of skin microbiomes in disease susceptibility among Pd-exposed bats. The findings emphasize the dominance of pathogenic taxa in Pd-positive bats and suggest exploratory directions for probiotic development, focusing on taxa with trends of enrichment in Pd-negative bats. Future studies should further validate these findings through functional assays and experimental trials.