上一周Immugent写了一篇一文解决单细胞亚群注释的所有问题,引出了单细胞测序技术的面临的几大未解决的技术难题,其中最主要的一个问题就是由于测序深度不足产生的"dropout"现象。这使得很多情况下所见非所得,傻傻分不清有些基因表达量很低,是因为没有测到还是本身没有表达。对于这种现象很多研究者给出了自己的解决方法,其中最主要的一大类就是通过对包含多个基因的基因集综合打分来评估细胞的某一项功能,比如IL10在单细胞的数据中没有检测到其表达量,但是我们可以通过基于对整个IL10-signaling通路的打分来比较某两类细胞亚群抑制功能的强弱。
其实这种理念我们并不陌生,在普通的RNA-seq数据中也比较常用,只不过在那种场景下是对上下调基因做的GO, KEGG富集分析,所有的这些算法都是基于基因联动的理论。那是因为在通常情况下,细胞行驶某一项功能,不是仅仅依赖于某一个基因,它的上下游会有很多基因随着功能的强弱都同时出现变化。研究者在测量细胞某一项功能时,对影响某一细胞功能出现变化的所有基因进行整理归纳,就成了我们熟知的各种基因集了,目前对各类基因集总结最好的就是BROAD研究所的MSigDB数据库了(https://www.gsea-msigdb.org)。
有了描述各种各样细胞功能的基因集,我们就需要找出合适的针对单细胞数据基因集打分的算法。因为单细胞数据的分布不符合任何一种经典的统计学分布,因此基于bulk数据开发出的富集分析的算法并不是很适用于单细胞数据。就在小编整理这些对单细胞数据基因集打分的算法时,偶然发现一个神奇的R包 irGSEA(https://github.com/chuiqin/irGSEA/),后来惊奇发现它竟是我一个朋友写的,这里手动@一下范垂钦同学,真是大佬就在身边呀。然而让小编感叹的不仅如此,还有一位朋友写的R包都发表文章了,等写完这个系列小编会介绍那个R包的功能。
通过文献检索,小编找到了11种
常用的对单细胞数据进行基因集打分算法:GSEA、GSVA、Pagoda2、Vision、PLAGE、Zscore、AddModuleScore、ssGSEA、AUCell、UCell和singscore
。其中GSEA, GSVA和ssGSEA想必大家多有耳闻,因为它们也是在bulk数据中常用的富集分析方法,目前各大平台介绍的有很多了,小编在这里对这几种算法就不再赘述,大家可以通过搜索对应的帖子来学习一下。
基于单细胞数据对基因集打分的总体的流程可以通过下图来理解一下,首先我们需要对单细胞数据进行简单的处理,把低质量的细胞和基因去除;然后通过各种对基因集进行打分的算法,对每个细胞的功能进行综合评估;基于不同的测序平台和数据量,通过对比各种算法的准确性、稳定性和可扩展性,找出最适合的算法运用于实际分析。
AddModuleScore是Seurat内置的对基因集进行打分的算法,因为目前很多研究者都是使用Seurat进行分析单细胞数据,而这个算法在Seurat的流程中,其在各大期刊发表的文章中都有使用。其在使用时需要先计算基因集中所有基因的平均值,再根据平均值把表达矩阵切割成若干份,然后从切割后的每一份中随机抽取对照基因(基因集外的基因)作为背景值
。因此,在整合不同样本的情况下,即使使用相同基因集为相同细胞打分,也会产生不同的富集评分。从本质上看它和Zscore的算法很类似,Zscore又称Z值,原是一个统计学概念,表示的是个体测量值X以标准差σ为单位,偏离总体均数μ的距离,即:Z score=(X-μ)/σ。牵扯到统计学的概念不免有些难以理解,简单说它就是处理过的平均值。
Pagoda2是一个专门设计出在从scRNA-seq数据中检测细胞异质性的计算框架。该方法对每个细胞拟合一个误差模型来描述其特性,然后对细胞中每个基因的残差进行再归一化。最后,利用每个基因的第一加权主成分对整个基因集打分从而对功能通路进行量化。有一篇发表在Comput Struct Biotechnol J (IF:7.3)杂志上的文章综合评估了7种基于单细胞数据进行基因集打分的算法后发现,Pagoda2在各项指标中都表现良好,大家可以学习一下这个算法。
然后说一下Vision算法,它是使用自相关统计来识别细胞间生物变异的注释工具包。Vision开始识别每个细胞的最近值 k,生成一个细胞与细胞的k近邻图 (KNN)。Vision中对基因集打分是通过平均基因集的所有基因表达来计算的。为了考虑样本级别度量(每个细胞的UMI)的影响,最终分值将根据其平均值和标准偏差进行校正。特别需要注意的是在Vision中使用的表达式数据可以缩放和归一化,但不能进行log-transformed转换。
最后重点说一下singscore和Ucell算法,它俩都是专门针对单细胞数据开发出的对基因集进行评分的算法,特点是相较于其它算法,它们能够囊括既包括正向基因,也包括负向基因的基因集。例如想揭示CD4 T细胞和CD8 T细胞,就可以在CD4(+),CD8(-)和CD4(-)CD8(+)的两个数据集分别对细胞群进行打分,可以得到更高的差异值。但是特别注意的是在使用这种数据集时,对每个基因的判定很重要,对于很确定的基因可以使用,但对不太确定的基因应该避免使用。
irGSEA包内置了"AUCell", "UCell", "singscore", "ssgsea"四种算法,而且相对于原版的函数,irGSEA对ssgsea算法进行了优化,而且AUCell的运算速度也提升了很多,最重要的是内置了Seurat包,因此可以将多种基因集的富集分数矩阵直接保存到Seurat对象中,总之就是很轻便。
最后附上irGSEA包的安装方法,因为这个包里面嵌入了很多新的函数,需要使用最新的4.1版本的R进行安装。
install packages from CRAN
cran.packages <- c("msigdbr", "dplyr", "purrr", "stringr","magrittr",
"RobustRankAggreg", "tibble", "reshape2", "ggsci",
"tidyr", "aplot", "ggfun", "ggplotify", "ggridges",
"gghalves", "Seurat", "SeuratObject", "methods",
"devtools", "BiocManager","data.table","doParallel",
"doRNG")
if (!requireNamespace(cran.packages, quietly = TRUE)) {
install.packages(cran.packages, ask = F, update = F)
}
install packages from Bioconductor
bioconductor.packages <- c("GSEABase", "AUCell", "SummarizedExperiment",
"singscore", "GSVA", "ComplexHeatmap", "ggtree",
"Nebulosa")
if (!requireNamespace(bioconductor.packages, quietly = TRUE)) {
BiocManager::install(bioconductor.packages, ask = F, update = F)
}
install packages from Github
if (!requireNamespace("UCell", quietly = TRUE)) {
devtools::install_github("carmonalab/UCell")
}
if (!requireNamespace("irGSEA", quietly = TRUE)) {
devtools::install_github("chuiqin/irGSEA")
}
好啦,本期推文说到这就要结束了,下次小编将会用实例数据对irGSEA包的分析结果进行展示,敬请期待!
[参考文献]
Zhang Y, Ma Y, Huang Y, Zhang Y, Jiang Q, Zhou M, Su J. Benchmarking algorithms for pathway activity transformation of single-cell RNA-seq data. Comput Struct Biotechnol J. 2020 Oct 15;18:2953-2961. doi: 10.1016/j.csbj.2020.10.007.