问题

上一节我们介绍了 FPKM 和 TPM 两种对数据进行标准化处理的方式。

现在假设一个简单的情形,某物种有 G1、G2、G3、G4、G5 五条基因,现在对该物种的两个样品进行了转录组测序,对照样品测了10条 reads,处理样品测了100条reads。得到的 read counts 矩阵如下。
我们现在希望比较基因在两个样品中的表达是否有差异。

Gene 对照-Counts 处理-Counts
G1(1kb) 2.00 6.00
G2 (1kb) 2.00 6.00
G3 (1kb) 2.00 6.00
G4 (1kb) 2.00 6.00
G5(1kb) 2.00 76.00
TotalReads 10.00 100.00

现将 read counts 转换成 TPM(其实转换成 FPKM 也一样,因为假设所有基因长度为1Kb)

Gene 对照-Counts 处理-Counts 对照-TPM 处理-TPM
G1(1kb) 2.00 6.00 0.20 0.06
G2 (1kb) 2.00 6.00 0.20 0.06
G3 (1kb) 2.00 6.00 0.20 0.06
G4 (1kb) 2.00 6.00 0.20 0.06
G5 (1kb) 2.00 76.00 0.20 0.76

结果可能让你感到意外,似乎所有 5 条基因都有明显的差异。这不符合常理,差异基因应该只占少数的,是TPM 的结果有问题吗?

很容易发现,原因在于,处理样品中,有一个基因 G5 的表达异常高,导致大量的 reads 都被它占有。

TPM 代表的是样品内不同基因的相对表达量,如果样品中少数基因表达量异常高,就会导致其他基因的相对表达量降低。所以当我们比较样品间表达差异的时候,还需要在样品之间进行标准化。

解决办法

我们先做这样一个前提假设:大多数基因不是差异表达的。我们给两个样品的 read counts 除以不同的系数,来使大多数基因的表达一致 (还有一种思路是使用内参基因来矫正,内参基因是指在各种条件、组织中表达恒定的看家基因)。对照除以 8,处理除以 24。得到如下表格。

Gene Control-Counts Treatment-Counts Control-scaled Treatment-scaled
G1(1kb) 2.00 6.00 0.25 0.25
G2 (1kb) 2.00 6.00 0.25 0.25
G3 (1kb) 2.00 6.00 0.25 0.25
G4 (1kb) 2.00 6.00 0.25 0.25
G5 (1kb) 2.00 76.00 0.25 3.17

在样品内部,基因的表达量仍然是相对表达量;但在样品之间比较的时候,却比较的是绝对表达量是否有差异。

我们把这种方法,叫做样品之间的标准化, 这个系数叫做 scale factor. 以上举例只是为了说明问题,实际上样品之间的标准化有多种算法,也要复杂的多。

样品间标准化方法

样品间标准化的方法有很多,大多包含在差异表达基因鉴定的软件包中,使用起来非常方便。

  • DESeq estimateSizeFactors() 和 sizeFactors()
  • edgeR(TMM) calcNormFactors()

具体算法不是很清楚, 可以参考这篇测评文章。
A comprehensive evaluation of normalization methods for Illumina high-throughput RNA sequencing data analysis

所以,要进行样品间的分析,比如差异表达,还包括画热能图,都需要使用组间标准化之后的结果。你以前做的可能都是错的!