An integrated R package for comprehensive quantification and analysis of Epithelial-Mesenchymal Transition (EMT) scores from single-cell and bulk omics data.

Epithelial-Mesenchymal Transition (EMT) is a key cellular plasticity process involved in development, cancer progression, fibrosis, and more. Partial EMT states are increasingly recognized as critical in many biological contexts.
EMTscore provides a unified, flexible toolbox that:
Multiple EMT scoring methods nnPCA, AUCell, SCSE, ssGSEA, Seurat AddModuleScore, JASMINE
Extensive curated EMT gene sets Classic EMT signatures, cancer-specific, fibrosis-related, and more
Unique nnPCA-based divergent EMT scoring Captures both classical and alternative EMT programs from a single dataset
Comprehensive downstream analyses Sample-level E/M score visualization, correlation with senescence/stemness scores, screening for correlated gene sets, and cell clustering / E/M state labeling
Publication-quality plots Scatter plots, heatmaps, clustering, Sankey diagrams, correlation plots
The package is developed against R 4.6 (development) and Bioconductor 3.23 (development).
# Install from Bioconductor
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("EMTscore")
# Or install the development version from GitHub
if (!requireNamespace("devtools", quietly = TRUE))
install.packages("devtools")
devtools::install_github("wenmm/EMTscore")
EMTscoreData provides curated EMT
gene sets and reference data used by EMTscore:
BiocManager::install("EMTscoreData")
library(EMTscoreData)
library(EMTscore)
eh <- ExperimentHub::ExperimentHub()
A549_EGF <- eh[["EH10292"]]
A549_TGFB1 <- eh[["EH10293"]]
gmt <- system.file(
"extdata",
"HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION.v2025.1.Hs.gmt",
package = "EMTscore")
objects <- list(A549_TGFB1 = A549_TGFB1, A549_EGF = A549_EGF)
seurat_objs <- add_EMT_score(objects, gmt_file = gmt,
emt_name = "EMT_score", method = "nnPCA", nnPCA_dim = 1)
plot_EMT_from_objects(seurat_objs,
col_name = "Pseudotime", emt_score_col = "EMT_score")
Full documentation and a vignette are available in the package:
vignette("EMTscore")
Wen H, Bleris L, Hong T (2026). EMTscore infers divergent EMT pathways from omics data and enables rapid screening for EMT-associated gene sets. Bioinformatics, 42(5), btag286. https://doi.org/10.1093/bioinformatics/btag286
Please submit issues or pull requests on GitHub: https://github.com/wenmm/EMTscore We welcome contributions to expand the gene sets, scoring methods, and visualization options.