问题

假如我们通过比对得到了A B C D 四条基因在 样本1、样本2、样本3中的 read counts 如下表:

基因名称 样本1 样本2 样本3
A (2kb) 10 12 30
B (4kb) 20 25 60
C (1kb) 5 8 15
D (10kb) 0 0 1

问题:

  1. 在样本1 中,基因B的 read counts 是20, 基因A 的 read counts 是10,能说明基因B 的表达更高吗?

  2. 基因A 在样本3中的 read counts 是30, 在样本2 中的 read counts 是12, 能说明它在样本3 中的表达更高吗?

答案:

都是不能,因为 read counts 是指比对落在该基因上的 reads 数目。而建库测序是一个随机抽样的过程。

  1. 不同基因在同一个样本中,基因越长,随即打断之后得到的片段就越多,该基因被测到的概率就越大,落在该基因上的 reads 就越多。所以,要排除基因长度的影响。
  2. 同一个基因在不同样本中,样本的测序深度越高,相当于抽样次数越多,落在该样本中基因上的 reads 就越多。所以,要排除测序深度的影响。

标准化

要去除测序深度基因长度的的影响,最简单的办法就是给 read counts 除以总 Reads 数基因长度的

除以基因长度

原始数据:

基因名称 样本1 样本2 样本3
A (2kb) 10 12 30
B (4kb) 20 25 60
C (1kb) 5 8 15
D (10kb) 0 0 1

1.给 read counts 除以基因长度,这里以 kb 为单位, 得到以下表格

基因名称 样本1 样本2 样本3
A (2kb) 5 6 15
B (4kb) 5 6.25 15
C (1kb) 5 8 15
D (10kb) 0 0 0.1

2.将每个样品的 read counts 合并,添加一行 Total Reads

基因名称 样本1 样本2 样本3
A (2kb) 5 6 15
B (4kb) 5 6.25 15
C (1kb) 5 8 15
D (10kb) 0 0 0.1
Total Reads 35 45 106

2.再除以 Total Reads,得到以下表格

基因名称 样本1 样本2 样本3
A (2kb) 0.143 0.133 0.142
B (4kb) 0.143 0.139 0.142
C (1kb) 0.143 0.178 0.142
D (10kb) 0 0 0.0009

通过标准化之后的结果可以发现:

  1. 在样本1 中,基因A和基因B的表达量是一样高的;
  2. 基因A,在样本3中的表达只是略高于样本2。

我们采用的这种标准化方法与RPKM唯一不同的是,在对 reads counts 进行标准化的时候,我们为了展示方便是以1个碱基为单位的,而RPKM 是以1百万个碱基为单位的。

RPKM/FPKM

RPKM的 全称是 Reads per kilobase of exon per million reads mapped,这个 Per Kilobase 是基因长度的单位、Per Millon 是测序深度的单位。在Mortazavi et. al. paper中提出。

FPKM的全称是 Fragments per kilobase of exon per million reads mapped。建库测序是一个随机抽样的过程,而这个抽样的样品事实上是以 Fragments 为单位,而不是 Reads。所以,FPKM的表述更为合理。

当 single-end 测序的时候,RPKM 与 FPKM 是等价的;当 pair-end 测序的时候,应该使用 FPKM。所以,FPKM 是更为通用的单位。

TPM

TPM 的全称是 Transcripts per million reads。它与 FPKM 唯一的区别是,第二步除的不是 Total Reads, 如下:

原始数据:

基因名称 样本1 样本2 样本3
A (2kb) 10 12 30
B (4kb) 20 25 60
C (1kb) 5 8 15
D (10kb) 0 0 1

1.给 read counts 除以基因长度,这里以 kb 为单位, 得到以下表格

基因名称 样本1 样本2 样本3
A (2kb) 5 6 15
B (4kb) 5 6.25 15
C (1kb) 5 8 15
D (10kb) 0 0 0.1

2.将每个样品的数值求和,添加一行 Total

基因名称 样本1 样本2 样本3
A (2kb) 5 6 15
B (4kb) 5 6.25 15
C (1kb) 5 8 15
D (10kb) 0 0 0.1
Total 15 20.25 45.1

3.再除以 Total,得到以下表格

基因名称 样本1 样本2 样本3
A (2kb) 0.333 0.296 0.3326
B (4kb) 0.333 0.309 0.3326
C (1kb) 0.333 0.395 0.3326
D (10kb) 0 0 0.002

FPKM VS TPM

FPKM:

基因名称 样本1 样本2 样本3
A (2kb) 0.143 0.133 0.142
B (4kb) 0.143 0.139 0.142
C (1kb) 0.143 0.178 0.142
D (10kb) 0 0 0.0009

TPM:

基因名称 样本1 样本2 样本3
A (2kb) 0.333 0.296 0.3326
B (4kb) 0.333 0.309 0.3326
C (1kb) 0.333 0.395 0.3326
D (10kb) 0 0 0.002

FPKM与TPM 的结果完全不同,哪一个更合理?
我们需要回到最原始的问题,基因的表达量应该代表什么意思?

表达量是什么意思?

如果我们能够明确知道一个细胞中、或者是一定摩尔量的 RNA中,有多少条某种转录本。这叫绝对定量

但是,我们在进行转录组测序的时候,并不知道用于建库测序的 RNA 来自多少个细胞,总过有多少转录本。所以只能进行相对定量。相对定量,描述的是该基因的转录本占样本中所有转录本的百分比。

如果能够对样品进行细胞计数或者添加 spike-in, 转录组也可以实现绝对定量,不过这不在本文的讨论范围。

FPKM/RPKM/TPM都是描述相对定量的单位,我们看看哪一个更符合定义。

TPM = \frac{X_i}{L_i} * \frac{1}{\sum_j\frac{ X_j}{ L_j}}  = \frac{\frac{X_i}{L_i}}{\sum_j\frac{ X_j}{ L_j}}

FPKM = \frac{X_i}{ L_i }* \frac{1}{\sum_j X_j} = \frac{ \frac{X_i}{ L_i } }{\sum_j X_j}

假如要计算 A 基因的表达量,为了简单,我们这里不考虑可变剪接的情况,也不考虑单位。

X_i 代表比对到 A 基因上的Fragment 数目;L_i 代表 A 基因外显子的总长度。

两个公式的第一项是相同的,\frac{X_i}{L_i} 代表对基因长度进行了标准化之后,基因 Fragment 的数目。可以理解成该基因的转录本数目(不是很严格)。

既然公式第一项(相当于分子)是该基因的转录吧数目,那么根据相对定量的定义,第二项的分母应该表示所有基因的转录本数目。

TPM 中的\sum_j\frac{ X_i}{ L_j} 是对所有基因转录本数目的求和。FPKM 的公式中,\sum_jX_j 没有考虑基因长度的影响,相当于直接使用了总 Fragments 数目。

所以,TPM 更符合我们对相对表达量的定义,而FPKM 似乎没有明确的意义。

FPKM:

基因名称 样本1 样本2 样本3
A (2kb) 0.143 0.133 0.142
B (4kb) 0.143 0.139 0.142
C (1kb) 0.143 0.178 0.142
D (10kb) 0 0 0.0009
Total 0.429 0.45 0.425

TPM:

基因名称 样本1 样本2 样本3
A (2kb) 0.333 0.296 0.3326
B (4kb) 0.333 0.309 0.3326
C (1kb) 0.333 0.395 0.3326
D (10kb) 0 0 0.002
Total 1 1 1

如果我们将上面例子中每个样品总 表达量求和,会发现, TPM中各个样本的总和是相等的,而FPKM则不相等。
所以,我们建议大家在项目分析中使用 TPM,摒弃 FPKM。

参考文献

What the FPKM? A review of RNA-Seq expression units