Home

Awesome

<img src="inst/extdata/muscat.png" width="200" align="right"/>

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.

installation

muscat is available through Bioconductor, and can be installed using the following commands:

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("muscat")

quick guide

Let sce be a SingleCellExperiment object with cell metadata (colData) columns

  1. "sample_id" specifying unique sample identifiers (e.g., PeterPan1, Nautilus7, ...)
  2. "group_id" specifying each sample's experimental condition (e.g., reference/stimulated, healthy/diseased, ...)
  3. "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.

differential detection

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")