vignettes/articles/HMP_2012_WMS_gingival.Rmd
HMP_2012_WMS_gingival.Rmd
library(MicrobiomeBenchmarkDataAnalyses)
library(MicrobiomeBenchmarkData)
library(dplyr)
library(purrr)
library(phyloseq)
library(mia)
library(benchdamic)
library(ggplot2)
library(ggpubr)
edgeR didn’t run in this dataset A pseudocount of 1 was added, otherwiser there were problems with infinite values when calculating log2 fold change
Import data:
dat_name <- 'HMP_2012_WMS_gingival'
conditions_col <- 'body_subsite'
conditions <- c(condB = 'subgingival_plaque', condA = 'supragingival_plaque')
tse <- getBenchmarkData(dat_name, dryrun = FALSE)[[1]]
tse
#> class: TreeSummarizedExperiment
#> dim: 235 16
#> metadata(0):
#> assays(1): counts
#> rownames(235): Parabacteroides_merdae Bacteroides_ovatus ...
#> Corynebacterium_kroppenstedtii Actinomyces_cardiffensis
#> rowData names(8): kingdom phylum ... species taxon_annotation
#> colnames(16): SRS013949 SRS013950 ... SRS063215 SRS065310
#> colData names(24): dataset subject_id ... curator BMI
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
#> rowLinks: a LinkDataFrame (235 rows)
#> rowTree: 1 phylo tree(s) (10430 leaves)
#> colLinks: NULL
#> colTree: NULL
Filter low-abundant features:
tse_subset <- filterTaxa(tse, min_ab = 1, min_per = 0.2)
assay(tse_subset) <- assay(tse_subset) + 1
tse_subset
#> class: TreeSummarizedExperiment
#> dim: 189 16
#> metadata(0):
#> assays(1): counts
#> rownames(189): Streptococcus_parasanguinis Veillonella_dispar ...
#> Prevotella_baroniae Propionibacterium_acidifaciens
#> rowData names(8): kingdom phylum ... species taxon_annotation
#> colnames(16): SRS013949 SRS013950 ... SRS063215 SRS065310
#> colData names(24): dataset subject_id ... curator BMI
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
#> rowLinks: a LinkDataFrame (189 rows)
#> rowTree: 1 phylo tree(s) (10430 leaves)
#> colLinks: NULL
#> colTree: NULL
Counts per body subsite:
col_data <- as_tibble(colData(tse_subset))
count(col_data, body_subsite)
#> # A tibble: 2 × 2
#> body_subsite n
#> <chr> <int>
#> 1 subgingival_plaque 7
#> 2 supragingival_plaque 9
Number of subjects:
row_data <- as.data.frame(rowData(tse_subset))
prior_info <- row_data[, c('genus', 'taxon_annotation')]
prior_info$taxon_name <- rownames(row_data)
prior_info$new_names <- paste0(prior_info$taxon_name, '|', prior_info$genus)
prior_info <-
dplyr::relocate(prior_info, taxon_name, new_names, genus, taxon_annotation)
head(prior_info)
#> taxon_name
#> Streptococcus_parasanguinis Streptococcus_parasanguinis
#> Veillonella_dispar Veillonella_dispar
#> Veillonella_atypica Veillonella_atypica
#> Veillonella_parvula Veillonella_parvula
#> Haemophilus_parainfluenzae Haemophilus_parainfluenzae
#> Dialister_invisus Dialister_invisus
#> new_names
#> Streptococcus_parasanguinis Streptococcus_parasanguinis|Streptococcus
#> Veillonella_dispar Veillonella_dispar|Veillonella
#> Veillonella_atypica Veillonella_atypica|Veillonella
#> Veillonella_parvula Veillonella_parvula|Veillonella
#> Haemophilus_parainfluenzae Haemophilus_parainfluenzae|Haemophilus
#> Dialister_invisus Dialister_invisus|Dialister
#> genus taxon_annotation
#> Streptococcus_parasanguinis Streptococcus facultative_anaerobic
#> Veillonella_dispar Veillonella anaerobic
#> Veillonella_atypica Veillonella anaerobic
#> Veillonella_parvula Veillonella anaerobic
#> Haemophilus_parainfluenzae Haemophilus facultative_anaerobic
#> Dialister_invisus Dialister anaerobic
ps <- convertToPhyloseq(tse_subset)
sample_data(ps)[[conditions_col]] <-
factor(sample_data(ps)[[conditions_col]], levels = conditions)
ps
#> phyloseq-class experiment-level object
#> otu_table() OTU Table: [ 189 taxa and 16 samples ]
#> sample_data() Sample Data: [ 16 samples by 24 sample variables ]
#> tax_table() Taxonomy Table: [ 189 taxa by 7 taxonomic ranks ]
#> phy_tree() Phylogenetic Tree: [ 189 tips and 188 internal nodes ]
Set normalization, weights, and DA method options:
ps <- runNormalizations(set_norm_list(), ps, verbose = FALSE)
zw <- weights_ZINB(ps, design = conditions_col)
DA_methods <- set_DA_methods_list(conditions_col, conditions)
for (i in seq_along(DA_methods)) {
if (grepl("Seurat", names(DA_methods)[i])) {
names(DA_methods[[i]]$contrast) <- NULL
} else {
next
}
}
## edgeR keeps causing problems (segmentation fault C stack overflow)
DA_methods <- DA_methods[grep("edgeR",names(DA_methods), invert = TRUE)]
names(DA_methods)
#> [1] "DESeq2.poscounts" "DESeq2.poscounts.w" "Limma-Voom.TMM"
#> [4] "Limma-Voom.TMM.w" "metagenomeSeq.CSS" "ALDEx2-Wilcox"
#> [7] "MAST" "Seurat-Wilcox" "ANCOM-BC"
#> [10] "Wilcox.TSS" "Wilcox.CLR" "ZINQ.TSS"
#> [13] "ZINQ.CLR" "LEfSe.TSS" "LEfSe.CLR"
Run DA analysis:
tim <- system.time({
DA_output <- imap(DA_methods, ~ {
message("Running method ", .y, " - ", Sys.time())
tryCatch(
error = function(e) NULL,
runDA(list(.x), ps, weights = zw, verbose = FALSE)
)
}) |>
list_flatten(name_spec = "{outer}") |>
discard(is.null)
DA_output <- map2(DA_output, names(DA_output), ~ {
.x$name <- .y
.x
})
})
# DA_output$MAST <- NULL
# DA_output$`Seurat-Wilcox` <- NULL
tim
#> user system elapsed
#> 28.955 0.118 29.047
Define threshold variables:
direction <- get_direction_cols(DA_output, conditions_col, conditions)
adjThr<- rep(0.1, length(DA_output))
names(adjThr) <- names(DA_output)
esThr <- rep(0, length(DA_output))
names(esThr) <- names(DA_output)
esThr[grep("lefse.TSS", names(esThr))] <- 2
esThr[grep("lefse.CLR", names(esThr))] <-
median(DA_output$LEfSe.CLR$statInfo$abs_score)
slotV <- ifelse(grepl("lefse", names(DA_output)), "statInfo", "pValMat")
colNameV <- ifelse(grepl("lefse", names(DA_output)), "LDA_scores", "adjP")
typeV <- ifelse(grepl("lefse", names(DA_output)), "logfc", "pvalue")
Run enrichment:
enrichment <- createEnrichment(
object = DA_output,
priorKnowledge = prior_info,
enrichmentCol = "taxon_annotation",
namesCol = "new_names",
slot = slotV, colName = colNameV, type = typeV,
direction = direction,
threshold_pvalue = adjThr,
threshold_logfc = esThr,
top = NULL, # No top feature selected
alternative = "greater",
verbose = FALSE
)
Extract summary of the enrichment analysis:
enrichmentSummary <- purrr::map(enrichment, ~ {
.x$summaries |>
purrr::map(function(x) {
x |>
tibble::rownames_to_column(var = "direction") |>
tidyr::pivot_longer(
names_to = "annotation", values_to = "n",
cols = 2
)
}) |>
dplyr::bind_rows()
}) |>
dplyr::bind_rows(.id = "method") |>
dplyr::mutate(
sig = dplyr::case_when(
pvalue < 0.05 & pvalue > 0.01 ~ "*",
pvalue < 0.01 & pvalue > 0.001 ~ "**",
pvalue < 0.001 ~ "***",
TRUE ~ ""
)
) |>
dplyr::mutate(
direction = dplyr::case_when(
direction == "DOWN Abundant" ~ "Subgingival",
direction == "UP Abundant" ~ "Supragingival",
TRUE ~ direction
)
)
head(enrichmentSummary)
#> # A tibble: 6 × 6
#> method direction pvalue annotation n sig
#> <chr> <chr> <dbl> <chr> <int> <chr>
#> 1 DESeq2.poscounts Subgingival 1 aerobic 0 ""
#> 2 DESeq2.poscounts Subgingival 0.000000388 anaerobic 39 "***"
#> 3 DESeq2.poscounts Subgingival 1.00 facultative_anaerobic 3 ""
#> 4 DESeq2.poscounts Supragingival 0.00207 aerobic 10 "**"
#> 5 DESeq2.poscounts Supragingival 1.00 anaerobic 9 ""
#> 6 DESeq2.poscounts Supragingival 0.0000465 facultative_anaerobic 22 "***"
nn <- unique(enrichmentSummary$annotation)
nn <- nn[!is.na(nn)]
colorPalette <- palette.colors(palette = "Okabe-Ito")[2:(length(nn) + 1)]
enPlot <- enrichmentSummary |>
dplyr::left_join(getMethodClass(), by = "method") |>
mutate(
direction = factor(direction, levels = c("Supragingival", "Subgingival")),
annotation = factor(annotation, levels = nn)
) |>
mutate(
annotation = case_when(
annotation == "aerobic" ~ "Aerobic",
annotation == "anaerobic" ~ "Anaerobic",
annotation == "facultative_anaerobic" ~ "Facultative anaerobic",
TRUE ~ annotation
)
) |>
ggplot(aes(method, n)) +
geom_col(
aes(fill = annotation),
position = position_dodge2(width = 0.9)
) +
geom_text(
aes(label = sig, color = annotation),
position = position_dodge2(width = 0.9)
) +
facet_grid(
direction ~ method_class, scales = "free_x", space = "free"
) +
scale_fill_manual(values = colorPalette, name = "Annotation") +
scale_color_manual(values = colorPalette, name = "Annotation") +
labs(
x = "DA method", y = "Number of DAFs"
) +
theme_bw() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "bottom",
strip.background = element_rect(fill = "white")
)
Calculate TP - FP ratio (no threshold):
positives <- map(1:length(DA_output), .f = function(i) {
positives <- createPositives(
object = DA_output[i],
priorKnowledge = prior_info,
enrichmentCol = "taxon_annotation", namesCol = "new_names",
slot = slotV[i], colName = colNameV[i], type = typeV[i],
direction = direction[i],
threshold_pvalue = 1,
threshold_logfc = 0,
top = seq.int(from = 0, to = 50, by = 5),
alternative = "greater",
verbose = FALSE,
TP = list(c("DOWN Abundant", "anaerobic"), c("UP Abundant", "aerobic")),
FP = list(c("DOWN Abundant", "aerobic"), c("UP Abundant", "anaerobic"))
) |>
dplyr::left_join(getMethodClass(), by = 'method')
}) |> bind_rows() |>
mutate(diff = jitter(TP - FP, amount = 1.5, factor = 2))
Positives plot:
# positives <- positives |>
# mutate(diff = jitter(TP - FP, amount = 1.5, factor = 2)) |>
# mutate(
# base_method = case_when(
# grepl("lefse", base_method) ~ sub("lefse", "LEfSe", base_method),
# grepl("wilcox", base_method) ~ sub("wilcox", "Wilcox", base_method),
# TRUE ~ base_method
# ),
# method = case_when(
# grepl("lefse", method) ~ sub("lefse", "LEfSe", method),
# grepl("wilcox", method) ~ sub("wilcox", "Wilcox", method),
# TRUE ~ method
# )
# )
vec <- positives$color
names(vec) <- positives$base_method
posPlot <- positives |>
ggplot(aes(top, diff)) +
geom_line(
aes(
group = method, color = base_method, linetype = norm,
),
) +
geom_point(
aes(
color = base_method, shape = norm
),
) +
facet_wrap(~method_class, nrow = 1) +
labs(
x = "Top DAFs", y = "TP - FP"
) +
scale_shape(name = "Normalization") +
scale_linetype(name = "Normalization") +
scale_color_manual(values = vec, name = "Base DA method") +
theme_bw() +
theme(
legend.position = "bottom",
strip.background = element_rect(fill = "white")
)
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.2 (2024-10-31)
#> os Ubuntu 24.04.1 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language en
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Etc/UTC
#> date 2025-01-17
#> pandoc 3.6 @ /usr/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> abind 1.4-8 2024-09-12 [1] RSPM (R 4.4.0)
#> ade4 1.7-22 2023-02-06 [1] RSPM (R 4.4.0)
#> ALDEx2 1.38.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> ANCOMBC 2.8.1 2025-01-09 [1] Bioconductor 3.20 (R 4.4.2)
#> annotate 1.84.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> AnnotationDbi 1.68.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> ape 5.8-1 2024-12-16 [1] RSPM (R 4.4.0)
#> aplot 0.2.4 2024-12-17 [1] RSPM (R 4.4.0)
#> backports 1.5.0 2024-05-23 [1] RSPM (R 4.4.0)
#> base64enc 0.1-3 2015-07-28 [1] RSPM (R 4.4.0)
#> beachmat 2.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> beeswarm 0.4.0 2021-06-01 [1] RSPM (R 4.4.0)
#> benchdamic * 1.12.2 2025-01-02 [1] Bioconductor 3.20 (R 4.4.2)
#> biglm 0.9-3 2024-06-12 [1] RSPM (R 4.4.0)
#> Biobase * 2.66.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> BiocFileCache 2.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> BiocGenerics * 0.52.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> BiocNeighbors 2.0.1 2024-11-28 [1] Bioconductor 3.20 (R 4.4.2)
#> BiocParallel 1.40.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> BiocSingular 1.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> biomformat 1.34.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> Biostrings * 2.74.1 2024-12-16 [1] Bioconductor 3.20 (R 4.4.2)
#> bit 4.5.0.1 2024-12-03 [1] RSPM (R 4.4.0)
#> bit64 4.5.2 2024-09-22 [1] RSPM (R 4.4.0)
#> bitops 1.0-9 2024-10-03 [1] RSPM (R 4.4.0)
#> blob 1.2.4 2023-03-17 [1] RSPM (R 4.4.0)
#> bluster 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> boot 1.3-31 2024-08-28 [2] CRAN (R 4.4.2)
#> brio 1.1.5 2024-04-24 [1] RSPM (R 4.4.0)
#> broom 1.0.7 2024-09-26 [1] RSPM (R 4.4.0)
#> bslib 0.8.0 2024-07-29 [1] RSPM (R 4.4.0)
#> cachem 1.1.0 2024-05-16 [1] RSPM (R 4.4.0)
#> car 3.1-3 2024-09-27 [1] RSPM (R 4.4.0)
#> carData 3.0-5 2022-01-06 [1] RSPM (R 4.4.0)
#> caTools 1.18.3 2024-09-04 [1] RSPM (R 4.4.0)
#> cellranger 1.1.0 2016-07-27 [1] RSPM (R 4.4.0)
#> checkmate 2.3.2 2024-07-29 [1] RSPM (R 4.4.0)
#> class 7.3-22 2023-05-03 [2] CRAN (R 4.4.2)
#> cli 3.6.3 2024-06-21 [1] RSPM (R 4.4.0)
#> clue 0.3-66 2024-11-13 [1] RSPM (R 4.4.0)
#> cluster 2.1.8 2024-12-11 [2] RSPM (R 4.4.0)
#> coda 0.19-4.1 2024-01-31 [1] RSPM (R 4.4.0)
#> codetools 0.2-20 2024-03-31 [2] CRAN (R 4.4.2)
#> coin 1.4-3 2023-09-27 [1] RSPM (R 4.4.0)
#> colorspace 2.1-1 2024-07-26 [1] RSPM (R 4.4.0)
#> CompQuadForm 1.4.3 2017-04-12 [1] RSPM (R 4.4.0)
#> corncob 0.4.1 2024-01-10 [1] RSPM (R 4.4.0)
#> corpcor 1.6.10 2021-09-16 [1] RSPM (R 4.4.0)
#> cowplot 1.1.3 2024-01-22 [1] RSPM (R 4.4.0)
#> crayon 1.5.3 2024-06-20 [1] RSPM (R 4.4.0)
#> curl 6.1.0 2025-01-06 [1] RSPM (R 4.4.0)
#> CVXR 1.0-15 2024-11-07 [1] RSPM (R 4.4.0)
#> data.table 1.16.4 2024-12-06 [1] RSPM (R 4.4.0)
#> DBI 1.2.3 2024-06-02 [1] RSPM (R 4.4.0)
#> dbplyr 2.5.0 2024-03-19 [1] RSPM (R 4.4.0)
#> dearseq 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> DECIPHER 3.2.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> decontam 1.26.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> DelayedArray 0.32.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> DelayedMatrixStats 1.28.1 2025-01-09 [1] Bioconductor 3.20 (R 4.4.2)
#> deldir 2.0-4 2024-02-28 [1] RSPM (R 4.4.0)
#> DEoptimR 1.1-3-1 2024-11-23 [1] RSPM (R 4.4.0)
#> desc 1.4.3 2023-12-10 [1] RSPM (R 4.4.0)
#> DescTools 0.99.58 2024-11-08 [1] RSPM (R 4.4.0)
#> DESeq2 1.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> digest 0.6.37 2024-08-19 [1] RSPM (R 4.4.0)
#> directlabels 2024.1.21 2024-01-24 [1] RSPM (R 4.4.0)
#> DirichletMultinomial 1.48.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> doParallel 1.0.17 2022-02-07 [1] RSPM (R 4.4.0)
#> doRNG * 1.8.6.1 2025-01-13 [1] RSPM (R 4.4.0)
#> dotCall64 1.2 2024-10-04 [1] RSPM (R 4.4.0)
#> dplyr * 1.1.4 2023-11-17 [1] RSPM (R 4.4.0)
#> e1071 1.7-16 2024-09-16 [1] RSPM (R 4.4.0)
#> edgeR 4.4.1 2024-12-02 [1] Bioconductor 3.20 (R 4.4.2)
#> ellipse 0.5.0 2023-07-20 [1] RSPM (R 4.4.0)
#> emmeans 1.10.6 2024-12-12 [1] RSPM (R 4.4.0)
#> energy 1.7-12 2024-08-24 [1] RSPM (R 4.4.0)
#> estimability 1.5.1 2024-05-12 [1] RSPM (R 4.4.0)
#> evaluate 1.0.3 2025-01-10 [1] RSPM (R 4.4.0)
#> Exact 3.3 2024-07-21 [1] RSPM (R 4.4.0)
#> expm 1.0-0 2024-08-19 [1] RSPM (R 4.4.0)
#> farver 2.1.2 2024-05-13 [1] RSPM (R 4.4.0)
#> fastDummies 1.7.4 2024-08-16 [1] RSPM (R 4.4.0)
#> fastmap 1.2.0 2024-05-15 [1] RSPM (R 4.4.0)
#> fBasics 4041.97 2024-08-19 [1] RSPM (R 4.4.0)
#> filelock 1.0.3 2023-12-11 [1] RSPM (R 4.4.0)
#> fillpattern 1.0.2 2024-06-24 [1] RSPM (R 4.4.0)
#> fitdistrplus 1.2-2 2025-01-07 [1] RSPM (R 4.4.0)
#> forcats 1.0.0 2023-01-29 [1] RSPM (R 4.4.0)
#> foreach * 1.5.2 2022-02-02 [1] RSPM (R 4.4.0)
#> foreign 0.8-87 2024-06-26 [2] CRAN (R 4.4.2)
#> Formula 1.2-5 2023-02-24 [1] RSPM (R 4.4.0)
#> formula.tools 1.7.1 2018-03-01 [1] RSPM (R 4.4.0)
#> fs 1.6.5 2024-10-30 [1] RSPM (R 4.4.0)
#> future 1.34.0 2024-07-29 [1] RSPM (R 4.4.0)
#> future.apply 1.11.3 2024-10-27 [1] RSPM (R 4.4.0)
#> genefilter 1.88.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> generics 0.1.3 2022-07-05 [1] RSPM (R 4.4.0)
#> GenomeInfoDb * 1.42.1 2024-11-28 [1] Bioconductor 3.20 (R 4.4.2)
#> GenomeInfoDbData 1.2.13 2025-01-17 [1] Bioconductor
#> GenomicRanges * 1.58.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> getopt 1.20.4 2023-10-01 [1] RSPM (R 4.4.0)
#> ggbeeswarm 0.7.2 2023-04-29 [1] RSPM (R 4.4.0)
#> ggdendro 0.2.0 2024-02-23 [1] RSPM (R 4.4.0)
#> ggfun 0.1.8 2024-12-03 [1] RSPM (R 4.4.0)
#> ggnewscale 0.5.0 2024-07-19 [1] RSPM (R 4.4.0)
#> ggplot2 * 3.5.1 2024-04-23 [1] RSPM (R 4.4.0)
#> ggplotify 0.1.2 2023-08-09 [1] RSPM (R 4.4.0)
#> ggpubr * 0.6.0 2023-02-10 [1] RSPM (R 4.4.0)
#> ggrepel 0.9.6 2024-09-07 [1] RSPM (R 4.4.0)
#> ggridges 0.5.6 2024-01-23 [1] RSPM (R 4.4.0)
#> ggsignif 0.6.4 2022-10-13 [1] RSPM (R 4.4.0)
#> ggtext 0.1.2 2022-09-16 [1] RSPM (R 4.4.0)
#> ggtree 3.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> gld 2.6.6 2022-10-23 [1] RSPM (R 4.4.0)
#> glmnet 4.1-8 2023-08-22 [1] RSPM (R 4.4.0)
#> globals 0.16.3 2024-03-08 [1] RSPM (R 4.4.0)
#> glue 1.8.0 2024-09-30 [1] RSPM (R 4.4.0)
#> gmp 0.7-5 2024-08-23 [1] RSPM (R 4.4.0)
#> goftest 1.2-3 2021-10-07 [1] RSPM (R 4.4.0)
#> gplots 3.2.0 2024-10-05 [1] RSPM (R 4.4.0)
#> gridExtra 2.3 2017-09-09 [1] RSPM (R 4.4.0)
#> gridGraphics 0.5-1 2020-12-13 [1] RSPM (R 4.4.0)
#> gridtext 0.1.5 2022-09-16 [1] RSPM (R 4.4.0)
#> gsl 2.1-8 2023-01-24 [1] RSPM (R 4.4.0)
#> gtable 0.3.6 2024-10-25 [1] RSPM (R 4.4.0)
#> gtools 3.9.5 2023-11-20 [1] RSPM (R 4.4.0)
#> GUniFrac 1.8 2023-09-14 [1] RSPM (R 4.4.0)
#> haven 2.5.4 2023-11-30 [1] RSPM (R 4.4.0)
#> Hmisc 5.2-2 2025-01-10 [1] RSPM (R 4.4.0)
#> hms 1.1.3 2023-03-21 [1] RSPM (R 4.4.0)
#> htmlTable 2.4.3 2024-07-21 [1] RSPM (R 4.4.0)
#> htmltools 0.5.8.1 2024-04-04 [1] RSPM (R 4.4.0)
#> htmlwidgets 1.6.4 2023-12-06 [1] RSPM (R 4.4.0)
#> httpuv 1.6.15 2024-03-26 [1] RSPM (R 4.4.0)
#> httr 1.4.7 2023-08-15 [1] RSPM (R 4.4.0)
#> ica 1.0-3 2022-07-08 [1] RSPM (R 4.4.0)
#> igraph 2.1.3 2025-01-07 [1] RSPM (R 4.4.0)
#> inline 0.3.21 2025-01-09 [1] RSPM (R 4.4.0)
#> interp 1.1-6 2024-01-26 [1] RSPM (R 4.4.0)
#> IRanges * 2.40.1 2024-12-05 [1] Bioconductor 3.20 (R 4.4.2)
#> irlba 2.3.5.1 2022-10-03 [1] RSPM (R 4.4.0)
#> iterators 1.0.14 2022-02-05 [1] RSPM (R 4.4.0)
#> janeaustenr 1.0.0 2022-08-26 [1] RSPM (R 4.4.0)
#> jomo 2.7-6 2023-04-15 [1] RSPM (R 4.4.0)
#> jpeg 0.1-10 2022-11-29 [1] RSPM (R 4.4.0)
#> jquerylib 0.1.4 2021-04-26 [1] RSPM (R 4.4.0)
#> jsonlite 1.8.9 2024-09-20 [1] RSPM (R 4.4.0)
#> KEGGREST 1.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> KernSmooth 2.23-24 2024-05-17 [2] CRAN (R 4.4.2)
#> knitr 1.49 2024-11-08 [1] RSPM (R 4.4.0)
#> labeling 0.4.3 2023-08-29 [1] RSPM (R 4.4.0)
#> later 1.4.1 2024-11-27 [1] RSPM (R 4.4.0)
#> lattice 0.22-6 2024-03-20 [2] CRAN (R 4.4.2)
#> latticeExtra 0.6-30 2022-07-04 [1] RSPM (R 4.4.0)
#> lazyeval 0.2.2 2019-03-15 [1] RSPM (R 4.4.0)
#> lefser 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> libcoin 1.0-10 2023-09-27 [1] RSPM (R 4.4.0)
#> lifecycle 1.0.4 2023-11-07 [1] RSPM (R 4.4.0)
#> limma 3.62.2 2025-01-09 [1] Bioconductor 3.20 (R 4.4.2)
#> listenv 0.9.1 2024-01-29 [1] RSPM (R 4.4.0)
#> lme4 1.1-36 2025-01-11 [1] RSPM (R 4.4.0)
#> lmerTest 3.1-3 2020-10-23 [1] RSPM (R 4.4.0)
#> lmom 3.2 2024-09-30 [1] RSPM (R 4.4.0)
#> lmtest 0.9-40 2022-03-21 [1] RSPM (R 4.4.0)
#> locfit 1.5-9.10 2024-06-24 [1] RSPM (R 4.4.0)
#> logistf 1.26.0 2023-08-18 [1] RSPM (R 4.4.0)
#> lpSolve 5.6.23 2024-12-14 [1] RSPM (R 4.4.0)
#> Maaslin2 1.20.0 2025-01-02 [1] Bioconductor 3.20 (R 4.4.2)
#> magrittr 2.0.3 2022-03-30 [1] RSPM (R 4.4.0)
#> MASS 7.3-61 2024-06-13 [2] CRAN (R 4.4.2)
#> MAST 1.32.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> Matrix 1.7-1 2024-10-18 [2] CRAN (R 4.4.2)
#> MatrixGenerics * 1.18.1 2025-01-09 [1] Bioconductor 3.20 (R 4.4.2)
#> MatrixModels 0.5-3 2023-11-06 [1] RSPM (R 4.4.0)
#> matrixStats * 1.5.0 2025-01-07 [1] RSPM (R 4.4.0)
#> mediation 4.5.0 2019-10-08 [1] RSPM (R 4.4.0)
#> memoise 2.0.1 2021-11-26 [1] RSPM (R 4.4.0)
#> metagenomeSeq 1.48.1 2025-01-02 [1] Bioconductor 3.20 (R 4.4.2)
#> mgcv 1.9-1 2023-12-21 [2] CRAN (R 4.4.2)
#> MGLM 0.2.1 2022-04-13 [1] RSPM (R 4.4.0)
#> mia * 1.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> mice 3.17.0 2024-11-27 [1] RSPM (R 4.4.0)
#> microbiome 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> MicrobiomeBenchmarkData * 1.8.0 2024-10-31 [1] Bioconductor 3.20 (R 4.4.2)
#> MicrobiomeBenchmarkDataAnalyses * 0.99.28 2025-01-17 [1] local
#> MicrobiomeStat 1.2 2024-04-01 [1] RSPM (R 4.4.0)
#> mime 0.12 2021-09-28 [1] RSPM (R 4.4.0)
#> miniUI 0.1.1.1 2018-05-18 [1] RSPM (R 4.4.0)
#> minqa 1.2.8 2024-08-17 [1] RSPM (R 4.4.0)
#> mitml 0.4-5 2023-03-08 [1] RSPM (R 4.4.0)
#> mitools 2.4 2019-04-26 [1] RSPM (R 4.4.0)
#> mixOmics 6.30.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> modeest 2.4.0 2019-11-18 [1] RSPM (R 4.4.0)
#> modeltools 0.2-23 2020-03-05 [1] RSPM (R 4.4.0)
#> multcomp 1.4-26 2024-07-18 [1] RSPM (R 4.4.0)
#> MultiAssayExperiment * 1.32.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> multtest 2.62.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> munsell 0.5.1 2024-04-01 [1] RSPM (R 4.4.0)
#> mvtnorm 1.3-3 2025-01-10 [1] RSPM (R 4.4.0)
#> NADA 1.6-1.1 2020-03-22 [1] RSPM (R 4.4.0)
#> nlme 3.1-166 2024-08-14 [2] CRAN (R 4.4.2)
#> nloptr 2.1.1 2024-06-25 [1] RSPM (R 4.4.0)
#> nnet 7.3-19 2023-05-03 [2] CRAN (R 4.4.2)
#> NOISeq 2.50.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> numDeriv 2016.8-1.1 2019-06-06 [1] RSPM (R 4.4.0)
#> operator.tools 1.6.3 2017-02-28 [1] RSPM (R 4.4.0)
#> optparse 1.7.5 2024-04-16 [1] RSPM (R 4.4.0)
#> pan 1.9 2023-12-07 [1] RSPM (R 4.4.0)
#> parallelly 1.41.0 2024-12-18 [1] RSPM (R 4.4.0)
#> patchwork 1.3.0 2024-09-16 [1] RSPM (R 4.4.0)
#> pbapply 1.7-2 2023-06-27 [1] RSPM (R 4.4.0)
#> pcaPP 2.0-5 2024-08-19 [1] RSPM (R 4.4.0)
#> permute 0.9-7 2022-01-27 [1] RSPM (R 4.4.0)
#> phyloseq * 1.50.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> pillar 1.10.1 2025-01-07 [1] RSPM (R 4.4.0)
#> pkgconfig 2.0.3 2019-09-22 [1] RSPM (R 4.4.0)
#> pkgdown 2.1.1 2024-09-17 [1] RSPM (R 4.4.0)
#> plotly 4.10.4 2024-01-13 [1] RSPM (R 4.4.0)
#> plyr 1.8.9 2023-10-02 [1] RSPM (R 4.4.0)
#> png 0.1-8 2022-11-29 [1] RSPM (R 4.4.0)
#> polyclip 1.10-7 2024-07-23 [1] RSPM (R 4.4.0)
#> prettyunits 1.2.0 2023-09-24 [1] RSPM (R 4.4.0)
#> progress 1.2.3 2023-12-06 [1] RSPM (R 4.4.0)
#> progressr 0.15.1 2024-11-22 [1] RSPM (R 4.4.0)
#> promises 1.3.2 2024-11-28 [1] RSPM (R 4.4.0)
#> proxy 0.4-27 2022-06-09 [1] RSPM (R 4.4.0)
#> purrr * 1.0.2 2023-08-10 [1] RSPM (R 4.4.0)
#> quadprog 1.5-8 2019-11-20 [1] RSPM (R 4.4.0)
#> quantreg 5.99.1 2024-11-22 [1] RSPM (R 4.4.0)
#> R6 2.5.1 2021-08-19 [1] RSPM (R 4.4.0)
#> ragg 1.3.3 2024-09-11 [1] RSPM (R 4.4.0)
#> RANN 2.6.2 2024-08-25 [1] RSPM (R 4.4.0)
#> rARPACK 0.11-0 2016-03-10 [1] RSPM (R 4.4.0)
#> rbibutils 2.3 2024-10-04 [1] RSPM (R 4.4.0)
#> rbiom 2.0.7 2025-01-11 [1] RSPM (R 4.4.0)
#> RColorBrewer 1.1-3 2022-04-03 [1] RSPM (R 4.4.0)
#> Rcpp 1.0.14 2025-01-12 [1] RSPM (R 4.4.0)
#> RcppAnnoy 0.0.22 2024-01-23 [1] RSPM (R 4.4.0)
#> RcppHNSW 0.6.0 2024-02-04 [1] RSPM (R 4.4.0)
#> RcppParallel 5.1.9 2024-08-19 [1] RSPM (R 4.4.0)
#> RcppZiggurat 0.1.6 2020-10-20 [1] RSPM (R 4.4.0)
#> Rdpack 2.6.2 2024-11-15 [1] RSPM (R 4.4.0)
#> readr 2.1.5 2024-01-10 [1] RSPM (R 4.4.0)
#> readxl 1.4.3 2023-07-06 [1] RSPM (R 4.4.0)
#> reformulas 0.4.0 2024-11-03 [1] RSPM (R 4.4.0)
#> reshape2 1.4.4 2020-04-09 [1] RSPM (R 4.4.0)
#> reticulate 1.40.0 2024-11-15 [1] RSPM (R 4.4.0)
#> Rfast 2.1.4 2025-01-14 [1] RSPM (R 4.4.0)
#> rhdf5 2.50.2 2025-01-09 [1] Bioconductor 3.20 (R 4.4.2)
#> rhdf5filters 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> Rhdf5lib 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> rlang 1.1.4 2024-06-04 [1] RSPM (R 4.4.0)
#> rmarkdown 2.29 2024-11-04 [1] RSPM (R 4.4.0)
#> Rmpfr 1.0-0 2024-11-18 [1] RSPM (R 4.4.0)
#> rmutil 1.1.10 2022-10-27 [1] RSPM (R 4.4.0)
#> rngtools * 1.5.2 2021-09-20 [1] RSPM (R 4.4.0)
#> robustbase 0.99-4-1 2024-09-27 [1] RSPM (R 4.4.0)
#> ROCR 1.0-11 2020-05-02 [1] RSPM (R 4.4.0)
#> rootSolve 1.8.2.4 2023-09-21 [1] RSPM (R 4.4.0)
#> rpart 4.1.23 2023-12-05 [2] CRAN (R 4.4.2)
#> RSpectra 0.16-2 2024-07-18 [1] RSPM (R 4.4.0)
#> RSQLite 2.3.9 2024-12-03 [1] RSPM (R 4.4.0)
#> rstatix 0.7.2 2023-02-01 [1] RSPM (R 4.4.0)
#> rstudioapi 0.17.1 2024-10-22 [1] RSPM (R 4.4.0)
#> rsvd 1.0.5 2021-04-16 [1] RSPM (R 4.4.0)
#> Rtsne 0.17 2023-12-07 [1] RSPM (R 4.4.0)
#> S4Arrays 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> S4Vectors * 0.44.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> sandwich 3.1-1 2024-09-15 [1] RSPM (R 4.4.0)
#> sass 0.4.9 2024-03-15 [1] RSPM (R 4.4.0)
#> ScaledMatrix 1.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> scales 1.3.0 2023-11-28 [1] RSPM (R 4.4.0)
#> scater 1.34.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> scattermore 1.2 2023-06-12 [1] RSPM (R 4.4.0)
#> sctransform 0.4.1 2023-10-19 [1] RSPM (R 4.4.0)
#> scuttle 1.16.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> sessioninfo 1.2.2 2021-12-06 [1] RSPM (R 4.4.0)
#> Seurat 5.2.0 2025-01-13 [1] RSPM (R 4.4.0)
#> SeuratObject 5.0.2 2024-05-08 [1] RSPM (R 4.4.0)
#> shape 1.4.6.1 2024-02-23 [1] RSPM (R 4.4.0)
#> shiny 1.10.0 2024-12-14 [1] RSPM (R 4.4.0)
#> SingleCellExperiment * 1.28.1 2024-11-10 [1] Bioconductor 3.20 (R 4.4.2)
#> slam 0.1-55 2024-11-13 [1] RSPM (R 4.4.0)
#> SnowballC 0.7.1 2023-04-25 [1] RSPM (R 4.4.0)
#> softImpute 1.4-1 2021-05-09 [1] RSPM (R 4.4.0)
#> sp 2.1-4 2024-04-30 [1] RSPM (R 4.4.0)
#> spam 2.11-0 2024-10-03 [1] RSPM (R 4.4.0)
#> SparseArray 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> SparseM 1.84-2 2024-07-17 [1] RSPM (R 4.4.0)
#> sparseMatrixStats 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> spatial 7.3-17 2023-07-20 [2] CRAN (R 4.4.2)
#> spatstat.data 3.1-4 2024-11-15 [1] RSPM (R 4.4.0)
#> spatstat.explore 3.3-4 2025-01-08 [1] RSPM (R 4.4.0)
#> spatstat.geom 3.3-4 2024-11-18 [1] RSPM (R 4.4.0)
#> spatstat.random 3.3-2 2024-09-18 [1] RSPM (R 4.4.0)
#> spatstat.sparse 3.1-0 2024-06-21 [1] RSPM (R 4.4.0)
#> spatstat.univar 3.1-1 2024-11-05 [1] RSPM (R 4.4.0)
#> spatstat.utils 3.1-2 2025-01-08 [1] RSPM (R 4.4.0)
#> stable 1.1.6 2022-03-02 [1] RSPM (R 4.4.0)
#> stabledist 0.7-2 2024-08-17 [1] RSPM (R 4.4.0)
#> statip 0.2.3 2019-11-17 [1] RSPM (R 4.4.0)
#> statmod 1.5.0 2023-01-06 [1] RSPM (R 4.4.0)
#> stringi 1.8.4 2024-05-06 [1] RSPM (R 4.4.0)
#> stringr 1.5.1 2023-11-14 [1] RSPM (R 4.4.0)
#> SummarizedExperiment * 1.36.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> survey 4.4-2 2024-03-20 [1] RSPM (R 4.4.0)
#> survival 3.8-3 2024-12-17 [2] RSPM (R 4.4.0)
#> systemfonts 1.1.0 2024-05-15 [1] RSPM (R 4.4.0)
#> tensor 1.5 2012-05-05 [1] RSPM (R 4.4.0)
#> testthat 3.2.3 2025-01-13 [1] RSPM (R 4.4.0)
#> textshaping 0.4.1 2024-12-06 [1] RSPM (R 4.4.0)
#> TH.data 1.1-2 2023-04-17 [1] RSPM (R 4.4.0)
#> tibble 3.2.1 2023-03-20 [1] RSPM (R 4.4.0)
#> tidyplots 0.2.0 2024-12-16 [1] RSPM (R 4.4.0)
#> tidyr 1.3.1 2024-01-24 [1] RSPM (R 4.4.0)
#> tidyselect 1.2.1 2024-03-11 [1] RSPM (R 4.4.0)
#> tidytext 0.4.2 2024-04-10 [1] RSPM (R 4.4.0)
#> tidytree 0.4.6 2023-12-12 [1] RSPM (R 4.4.0)
#> timeDate 4041.110 2024-09-22 [1] RSPM (R 4.4.0)
#> timeSeries 4041.111 2024-09-22 [1] RSPM (R 4.4.0)
#> tokenizers 0.3.0 2022-12-22 [1] RSPM (R 4.4.0)
#> treeio 1.30.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> TreeSummarizedExperiment * 2.14.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> truncnorm 1.0-9 2023-03-20 [1] RSPM (R 4.4.0)
#> tzdb 0.4.0 2023-05-12 [1] RSPM (R 4.4.0)
#> UCSC.utils 1.2.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> utf8 1.2.4 2023-10-22 [1] RSPM (R 4.4.0)
#> uwot 0.2.2 2024-04-21 [1] RSPM (R 4.4.0)
#> vctrs 0.6.5 2023-12-01 [1] RSPM (R 4.4.0)
#> vegan 2.6-8 2024-08-28 [1] RSPM (R 4.4.0)
#> vipor 0.4.7 2023-12-18 [1] RSPM (R 4.4.0)
#> viridis 0.6.5 2024-01-29 [1] RSPM (R 4.4.0)
#> viridisLite 0.4.2 2023-05-02 [1] RSPM (R 4.4.0)
#> vroom 1.6.5 2023-12-05 [1] RSPM (R 4.4.0)
#> withr 3.0.2 2024-10-28 [1] RSPM (R 4.4.0)
#> Wrench 1.24.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> xfun 0.50 2025-01-07 [1] RSPM (R 4.4.0)
#> XML 3.99-0.18 2025-01-01 [1] RSPM (R 4.4.0)
#> xml2 1.3.6 2023-12-04 [1] RSPM (R 4.4.0)
#> xtable 1.8-4 2019-04-21 [1] RSPM (R 4.4.0)
#> XVector * 0.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> yaml 2.3.10 2024-07-26 [1] RSPM (R 4.4.0)
#> yulab.utils 0.1.9 2025-01-07 [1] RSPM (R 4.4.0)
#> zCompositions 1.5.0-4 2024-06-19 [1] RSPM (R 4.4.0)
#> zinbwave 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> ZINQ 2.0 2025-01-17 [1] Github (wdl2459/ZINQ-v2@40391a6)
#> zlibbioc 1.52.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.2)
#> zoo 1.8-12 2023-04-13 [1] RSPM (R 4.4.0)
#>
#> [1] /usr/local/lib/R/site-library
#> [2] /usr/local/lib/R/library
#>
#> ──────────────────────────────────────────────────────────────────────────────