muscat
(Multi-sample multi-group scRNA-seq analysis tools )
...provides methods for Differential State (DS) analyses in scRNA-seq data
with multiple samples, groups, and (cell)-subpopulations, as elaborated in:
Crowell HL, Soneson C*, Germain P-L*,
Calini D, Collin L, Raposo C, Malhotra D & Robinson MD:
"muscat detects subpopulation-specific state transitions from
multi-sample multi-condition single-cell transcriptomics data"
Nature Communications 11, 6077 (2020)
DOI: 10.1038/s41467-020-19894-4
*These authors contributed equally.
muscat
is available through Bioconductor, and
can be installed using the following commands:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("muscat")
Let sce
be a SingleCellExperiment
object with cell metadata (colData
) columns
"sample_id"
specifying unique sample identifiers (e.g., PeterPan1, Nautilus7, ...)"group_id"
specifying each sample's experimental condition (e.g., reference/stimulated, healthy/diseased, ...)"cluster_id"
specifying subpopulation (cluster) assignments (e.g., B cells, dendritic cells, ...)
Aggregation-based methods come down to the following simple commands:
# compute pseudobulks (sum of counts)
pb <- aggregateData(sce,
assay = "counts", fun = "sum",
by = c("cluster_id", "sample_id"))
# run pseudobulk (aggregation-based) DS analysis
ds_pb <- pbDS(pb, method = "edgeR")
Mixed models can be run directly on cell-level measurements, e.g.:
ds_mm <- mmDS(sce, method = "dream")
For details, please see the package vignettes.
muscat
also supports testing for differential detection as proposed in
Gilis J, Perin L, Malfait M, Van den Berge K,
Assefa AT, Verbist B, Risso D, and Clement L:
Differential detection workflows for
multi-sample single-cell RNA-seq data.
bioRxiv (2023). DOI: 10.1101/2023.12.17.572043
Key alterations to the commands above are highlighted below (!!!), however, we recommend users consult the corresponding publication and package vignette for more details.
# sum binarized counts
pb <- aggregateData(sce,
assay = "counts",
fun = "num.detected", # !!!
by = c("cluster_id", "sample_id"))
# test for differential detection
dd <- pbDD(pb) # or..
dd <- pbDS(pb, method = "DD")