博文名称:Normalizing single cell RNA sequencing data — Pitfalls and Recommendations
博文链接:https://towardsdatascience.com/normalizing-single-cell-rna-sequencing-data-pitfalls-and-recommendations-19d0cb4fc43d
博文发表时间:Jan 29, 2020
单细胞RNA测序(scRNA-seq)的目的通常是亚群鉴定和差异基因表达分析。 为避免“维度灾难”(curse of dimensionality),将高可变基因 (HVG) 用于聚类分析。 多项研究表明,HVG对原始计数矩阵标准化方法的选择很敏感。
为什么要标准化?
原始read计数不能直接用于比较细胞之间的基因表达,因为它们会被实验技术和“无趣”的生物变异所混淆(干扰)。 通过QC质控步骤和其他方法可用于过滤和回归无趣的生物变异。 虽然PCR扩增偏差通常可以通过使用唯一分子标识符 (UMI) 来处理,但需要标准化以消除其他技术引起的变异,如测序深度、细胞裂解和逆转录效率的差异。
标准化(Normalization)处理的主要目标是消除技术效应的影响,同时保留真正的生物学异质性。在标准化处理良好的数据集中,一个基因的方差应该与细胞的基因丰度和测序深度无关。 “真正”差异表达的基因应该在不同细胞类型之间表现出高差异,而看家基因应该表现出低差异。
因此,标准化是一个关键的预处理步骤,它会极大地影响scRNA分析的下游应用。 不幸的是,scRNA数据集通常沿用从bulk RNA-seq继承的方法进行标准化,但是,由于技术性质的差异和这些数据集的固有复杂性,我们很快就会看到这些方法是不合适的。
在这篇博文中,我们将看到全局缩放方法(global scaling methods)在scRNA-seq分析中的局限性。 我们还将讨论最近推出的SCNorm和SCTransform归一化方法的潜力优势,这些方法专为单细胞分析量身定制。
全局缩放方法(Global Scaling methods)
传统上,使用RPKM(每千碱基百万读取数)、FPKM(每千碱基百万片段)或 TPM(每百万转录本)方法将跨细胞的原始表达计数通过测序深度进行标准化。 要了解它们的工作原理,请观看此视频。 虽然这些方法适用于样本内标准化,但它们已广泛认为不适合样本之间的差异表达分析。
例如,考虑在两个处理条件—对照组和治疗组之间,比较两个基因A和 基因B的表达的情况。 基因A在两种处理下的表达水平相同,而基因B在处理组中细胞的表达水平高出2倍。 TPM归一化将绝对表达值转化为相对表达值,因此,我们可能会得出结论,如果基因B在两组间是差异表达的,那么基因A也是差异表达的。
基于基因集的方法(Gene group based methods)
基于基因集的方法为了解决全局缩放方法的固有问题,最近引入了两种有趣的归一化方法 - SCnorm (2017) 和 SCTransform (Seurat package v3, 2019)。
SCnorm
SCnorm是 Bioconductor上的R包。 对于每个基因,SCnorm通过分位数回归(quantile regression)估计基因表达对测序深度的依赖性。 然后将具有相似依赖性的基因进行分组,并使用第二个分位数回归来估计每组的缩放因子( scale factors)。 最后使用每个组特定的缩放因子调整每个基因集的测序深度,以生成标准化的基因表达估计。
单个细胞数据集(Bacher et al)中3个基因表达
A:原始计数与测序深度,B:标准化的全局缩放因子与测序深度,C:SCnorm计数与测序深度
上图显示来自单个样本的细胞数据集中三个基因的计数深度关系。 图 A 是未标准化或原始表达计数。 很明显,与图C 中的 SCnorm 相比,基于全局缩放因子的方法(图 B)在标准化方面做得很差。
SCTransform
SCTransform是可用于Seurat v3的R包。 该方法使用正则化负二项式模型(regularized negative binomial model)对UMI计数进行建模,以消除因测序深度引起的变化。 简而言之,该方法首先使用测序深度作为自变量和UMI计数作为响应或因变量为每个基因构建广义线性模型 (GLM)。 然后根据基因表达对参数估计进行正则化(或调整)。 使用正则化参数应用第二轮负二项式回归。 该模型的输出(残差)是每个基因的标准化表达水平。
这里的关键信息是,SCnorm 和 SCTransform 方法都学习基因集(gene-group )特定的因素,而不是使用常数因子来标准化所有基因。 这些因素分别针对低、中和高表达基因,消除了技术变异的影响,同时保留了真正的生物异质性。
总结
归一化方法的选择会影响高变异基因的选择,从而影响scRNA数据的所有下游分析。 直接将bulk RNA-seq的归一化方法应用于scRNA数据集是不合适的。 推荐通过选择SCNorm或SCTransform归一化方法来更新分析流程并充分利用最新的技术方法是值得的。
对RPKM,FPKM,TPM的理解
在RNA-Seq的分析中,对基因或转录本的read counts数目进行标准化(normalization)非常重要,因为落在一个基因区域內的read counts数目取决于基因长度和测序深度。一个基因越长,测序深度会越高,落在其內部的read counts数目就会相对越多。因此,我们使用相对测量,而不是绝对测量。
因此,我们需要标准化的两个关键因素就是基因长度和测序深度,常常用RPKM (Reads Per Kilobase Million), FPKM (Fragments Per Kilobase Million) 和 TPM (Transcripts Per Million)作为标准化数值。
1. RPKM
计算RPKM主要包括以下三步:
- 计算与测序深度有关的系数:计算每个样本中reads的总数并除以—此时就可以得到"per million"的缩放系数;
- 去除测序深度的影响:每个reads数除以上面得到的"per million"缩放系数,得到对应基因在每百万reads中所占比例,即reads per million (RPM);
-
去除基因长度的影响:用上一步的结果再除以对应基因的长度(通常是所有外显子长度的总和,以kb为单位),得到每百万reads每一千碱基对中包含的reads数,即RPKM。
计算RPKM的公式可以表示如下:
其中:
- 可以表示一个基因或转录本,或基因组上一段特定的区域;
- 表示比对到基因x外显子区域的reads数;
- 表示当前样本中包含的全部reads数,=,其中N表示该样本中的基因总数;
- 表示基因x外显子区域包含的碱基数(bp)
2. FPKM
FPKM与RPKM的计算过程相同,它们的区别是:RPKM用于单端测序结果,FPKM用于双端测序结果(如图2所示)。因为双端测序中,每一个fragment会包含两个reads,使用FPKM来计算基因的表达丰度时,可以避免把同一个fragment的两个reads计算两次(实际上只需要计算一次)。
单端read与双端read比对到基因组的示意图所示:
3.TPM
TPM与RPKM最大的区别在于消除两种影响的次序:在TPM中先消除基因长度的影响,再消除测序深度的影响。计算TPM的过程也可以分为三个步骤:
- 将每个read counts除以对应基因的长度(外显子区域的长度,单位为kb),此时得到每千个碱基包含的reads数,即(reads per kilobase, RPK);
- 将一个样本中的RPK加起来的总数除以,得到"per million"缩放系数(这是两种方法计算结果不同的主要来源,因为这里的总数是消除了基因长度的影响之后得到的RPK,而不是原始read counts之和);
- 用RPK除以"per million"缩放系数,得到TPM。
计算公式表示如下:
其中:
- 可以表示一个基因或转录本,或基因组上一段特定的区域(下面统一当做基因);
- 表示reads的长度(例如所有reads包含的平均碱基数),一般为常数;
- 表示比对到基因x外显子区域的reads数;
- 表示当前样本中所有基因除以自身长度(kb)后求和的结果,=,其中N表示该样本中的基因总数;
- 表示基因x外显子区域包含的碱基数(kp).
因为交换了两次计算的次序,TPM最终得到的结果中,每个样本总的TPM值是相同的,这样的结果便于样本间差异的比较。
案例说明
有以下RNA-seq数据,测定了A、B、C、D四个基因,长度分别是2、4、1、10kb,共测定了3个生物重复:Rep1、Rep2、Rep3。
1. RPKM的计算
第一步,计算总Read数
由于只有4个基因,所以总Read数并没有太大,因此使用10模拟百万进行总read换算。
第二步:标准化总Read数
将Rep1、Rep2、Rep3除以各自换算后的总Read数(也就是3.5,4.5,10.6),得到RPM:
第三步:标准化基因长度
再将基因A、B、C、D的RPM值除以各自的基因长度,得到RPKM:
2. TPM的计算
RPKM是先进行测序深度标准化,后进行基因长度标准化;而TPM是先进行基因长度标准化,后进行测序深度标准化 。事实证明,TPM的标准化方法更有优势,为何会这样,见后述。这里先看看TPM的计算。
第一步:进行基因长度标准化。先将基因A、B、C、D的Read数除以各自的基因长度(基因长度单位kb),得到RPK。
第二歩:计算总Read数(RPK)。计算总Read数,并将其进行百万转换。由于基因数太少,这里是使用10模拟百万转换。
问题1:RPKM和TPM那种计算方法更优?
详见黄树嘉的《为什么说FPKM和RPKM都错了?》
问题2:seurat的归一化和TPM是不是一致的?
TPM的归一化考虑了基因长度和测序深度,而seurat的归一化没有考虑基因长度,只考虑了测序深度,为什么不需要考虑基因的长度?
每个归一化方法内在的考虑因素不相同,TPM考虑了基因长度,基因越长,落在基因序列上的reads数量也相应越多。
归一化还跟它要解决的问题相关。
- 差异表达分析,如果我们只比较某个基因在样本组间的差异,基因的长度是固定影响因素(恒定因子),可以不用考虑基因长度的影响。
- 如果比较同一个样本中的不同基因,考虑基因的长度问题,把基因放在到同一赛道上比较。
另外,seurat在比较不同基因时,对归一化的基因表达值进行scale处理。
10X官方也答复了该问题:
https://kb.10xgenomics.com/hc/en-us/articles/115003684783-How-to-calculate-TPM-RPKM-or-FPKM-instead-of-counts-
Should I calculate TPM, RPKM or FPKM, instead of counts for 10x Genomics data?
答:在10x Genomics基因表达分析中,每个转录本都标记有唯一的分子标识符(UMI)序列。这些UMI能够准确定量基因表达水平,因为我们可以判断哪些read是由相同的mRNA分子产生的。因此,Cell Ranger和Space Ranger执行UMI计数(非read计数)以测量基因表达水平,并且所有下游分析步骤均基于UMI计数执行。
传统的RNA-seq数据中,完整的转录本被片段化,随后是cDNA合成、末端修复和接头连接。在此实验流程中,从长转录本中提取fragment片段的概率高于从短转录本中提取的概率。因此,TPM、RPKM、FPKM通过转录本长度(基因的长度)对read计数进行标准化是有意义的。然而,在10x基因表达分析中,这种基因长度偏差并不存在。因此,我们不建议通过基因长度使UMI计数标准化。
10X单细胞测序的UMI标签,消除PCR扩增的偏好性;
- UMIs enable accurate quantitation of gene expression levels because we can tell when reads are generated from the same mRNA molecule.
- In traditional RNA-seq workflow, the probability of sampling a fragment from a long transcript is higher than from a short one.
- in 10x single cell 3’ or 5’ gene expression assay, this gene-length bias does not exist.
参考:
https://www.plob.org/article/16013.html
https://www.cnblogs.com/Belter/p/13205635.html
https://www.jianshu.com/p/1940c5954c81?from=groupmessage
https://www.jianshu.com/p/35e861b76486
https://bioinfo.umassmed.edu/content/pdf2016fall/normalization.pdf
https://www.cnblogs.com/emanlee/p/14933354.html