简写
RPKM: Reads Per Kilobase of exon model per Million mapped reads (每千个碱基的转录每百万映射读取的reads)
FPKM: Fragments Per Kilobase of exon model per Million mapped fragments(每千个碱基的转录每百万映射读取的fragments)
RPM/CPM: Reads/Counts of exon model per Million mapped reads (每百万映射读取的reads)
TPM:Transcripts Per Kilobase of exon model per Million mapped reads (每千个碱基的转录每百万映射读取的Transcripts)
RPKM,FPKM,TPM标准化方法出现的必然性
在RNA-Seq的分析中,为了获得差异表达基因,只需要对不同基因的测序Read数进行比较即可。然而比对到不同基因上的Read数目并不能直接用于比较这两个基因的表达量差异,因为在RNA-seq中有一个很浅显的道理,基因越长,比对到此基因上的Read就会越多;测序深度越大,那么本次RNA-seq的所有Read数都会增加。也就是说Read数除了和基因表达量相关外,也和 基因的长度、测序深度 有关,因此为了比较多个RNA-seq重复(测序深度有一定差异)的不同基因(基因长度有一定差异)之间的表达量差异,那么就不能使用Read数直接进行比较,而是需要对Read数进行标准化。
FPKM
计算公式
RPKM = total exon reads/ (mapped reads (Millions) * exon length(KB))
你可以用这个公式计算基因,外显子,转录本的表达,这里以基因的表达为例进行说明:
total exon reads:某个样本mapping到 特定基因 的外显子上的所有的reads;
mapped reads (Millions) :某个样本的 所有 reads总和;
exon length(KB):某个基因的长度(外显子的长度的总和,以KB为单位)
分析
测序read数会受到基因长度和测序深度影响,解决方案如下
1、受到基因长度影响,那么将测序Read数除以基因长度就OK了;2、受到测序深度影响,那么再将Read数除以总Read数进行标准化也就消除了测序深度的影响。
基因长度是用 kb表示的,所以RPKM中是K,Kilobase。而总Read数太大了,直接除以这个数字就会使得标准化出来的Read数出现太多的小数,所以为了美观,一般都是除以以百万为单位的总Read数,举例来说,假定一次RNA-seq的总Read数为2*10^7
,那么在进行Read标准化的时候,并不是直接除以这个数值,而是除以20,因为2*10^7 = 20*10^6 = 20M
,所以RPKM中才是 M ,Million。
RPKM的计算方法
计算总Read数:计算每一个RNA-seq样本的总Read数,然后将其换算为以百万位单位(M);
标准化基因的Read数(消除测序深度):将所有基因的Read数除以总Read数;
标准化基因长度(消除基因长度):再用标准化基因的Read数除以基因长度(基因长度单位为kb);
例子
举例来说,假定有以下RNA-seq数据,测定了A、B、C、D四个基因,长度分别是2、4、1、10kb,共测定了3个生物重复:Rep1、Rep2、Rep3。
第一步,计算总Read数
由于只有4个基因,所以总Read数并没有太大,因此使用10模拟百万进行总read换算。
第二步:标准化总Read数
将Rep1、Rep2、Rep3除以各自换算后的总Read数(也就是3.5,4.5,10.6),得到RPM,见下图:
第三步:标准化基因长度
再将基因A、B、C、D的RPM值除以各自的基因长度,得到RPKM,见下图:
如此一个RPKM标准化就完成了。
FPKM
其实FPKM同RPKM是一样的,只是RPKM用于单末端测序,而FPKM用于双末端测序。
二代测序时,会将所有的DNA打成片段(fragment),然后再去测序。单末端测序时,一个片段对应一个Read,但是双末端测序时,一个片段会从两端分别测定一次,因此这两个配对Read对应的是同一片段(偶尔也会有一个片段只对应一个Read的情况,另一个Read因为某些原因被剔除或丢失了)。
区别也就在这里,对于FPKM来说,配对到同一片段上的两个Read只会算作一个Read,也就是说FPKM是以Fragment为准,不以Read数为准,其他计算方式是完全一样的。
补充:对于单末端测序, 虽然理论上FPKM等同于RPKM, 但是实际上即使是使用同一个mapping软件得到的mapping结果, 然后再分别去计算同一个基因的RPKM (自己人工计算,或者用现成的一些软件都能算) 和FPKM (用Cufflinks/Stringtie计算), 结果却仍然是不同, 因为不同软件有自己的模型和自己的一些内在算法。)
TPM
分析
TPM的计算方法其实同RPKM很类似,同样的对基因长度和测序深度进行标准化,只不过RPKM是先进行测序深度标准化,后进行基因长度标准化;而 TPM是先进行基因长度标准化,后进行测序深度标准化 。事实证明,TPM的标准化方法更有优势,为何会这样,见后述。这里先看看TPM的计算。
例子
第一步:进行基因长度标准化。先将基因A、B、C、D的Read数除以各自的基因长度(基因长度单位kb),得到RPK。
第二歩:计算总Read数(RPK)。计算总Read数,并将其进行百万转换。由于基因数太少,这里是使用10模拟百万转换。
由于TPM先进行基因长度标准化,所以这里的总Read数计算已经变为基因长度标准化后的Read数,也就是RPK数。
第三步:进行总Read数标准化。将Rep1、Rep2、Rep3的RPK除以各自的转换后的总Read数,得到TPM值。
TPM的计算方法
标准化基因长度:将所有基因的Read数除以基因长度(基因长度单位为kb);
计算总Read数:计算每一个样本的总Read数,然后将其换算为以百万位单位(M);
标准化总Read数:将所有基因的Read数除以总Read数;
TPM相比较RPKM,FPKM的优势
目前都已经推荐进行TPM标准化,不再使用了RPKM、FPKM了,为何会这样?
先看看刚才的RPKM和TPM数据:
将每个转录本的相应RPKM和TPM值进行加总后,可以发现不同转录本的总RPKM并不相同,而进行TPM变换后的加总TPM值是相同的。事实上所有进行TPM变换后的转录本的加总TPM值都是相同的(正常情况下,是百万)。
这个差异会造成什么样的影响呢?
由于RNA-seq就是为了通过比较不同样本间的标准化后的Read数差异来得出基因表达量差异的结果的,那么不同样本的加总RPKM不同,就会导致无法通过直接比较RPKM值确定两者的差异。
举例来说,在不考虑统计差异的情况下,以基因A为例,Rep1的RPKM值为1.43,Rep3的RPKM值是1.42,那么能说基因A在Rep1中的表达量大于Rep3中的表达量吗?
答案是不能,因为Rep1的总RPKM值是4.29,而Rep3的总RPKM值是4.25,虽然Rep1中基因A的RPKM大,但是Rep1的总RPKM值也是较大的(说白了,RPKM的测序深度标准化并不完善)。
而对于TPM数据就不同了,由于总TPM都是相同的,Rep1中基因A的TPM值3.33大于Rep3中基因A的TPM值3.326,所以在不考虑统计学差异的情况下,可以直接得出Rep1中基因A的表达量是要大于Rep3的。
参考:http://www.360doc.com/content/18/0508/22/19913717_752279133.shtml