RNA-Seq数据标准化方法

作者: wangchuang2017 | 来源:发表于2018-12-01 20:25 被阅读70次

    RNA-Seq数据标准化方法

    oriRNA

    oriRNA
    在RNA-Seq的分析中,我们常用RPKM、FPKM和TPM作为转录组数据定量的表示方法。

    它们都是对表达量进行标准化的方法,为何不直接用read数表示,而选标准化呢?

    因为落在一个基因区域内的read数目取决于基因长度和测序深度。基因越长read数目越多,测序深度越高,则一个基因对应的read数目也相对越多。所以必须要标准化,而标准化的对象就是基因长度与测序深度。

    RPKM:

    Reads Per Kilobase of exon model per Million mapped reads

    (每千个碱基的转录每百万映射读取的reads),主要用来对单端测序(single-end RNA-seq)进行定量的方法。

    RPKM(推荐软件,Range) 的计算公式:

    RPKM= total exon reads/ (mapped reads (Millions) * exon length(KB))

    total exon reads:某个样本mapping到特定基因的外显子上的所有的reads;

    mapped reads ( Millions ) :某个样本的所有reads总和;

    exon length( KB ):某个基因的长度(外显子的长度的总和,以KB为单位)。

    你可以用这个公式计算基因,外显子,转录本的表达,这里以基因的表达为例进行说明。在一个样本中一个基因的RPKM等于落在这个基因上的总的read数(total exon reads)与这个样本的总read数(mapped reads (Millions))和基因长度(exon length( KB )) 的乘积的比值。

    FPKM:

    Fragments Per Kilobase of exon model per Million mapped fragments

    (每千个碱基的转录每百万映射读取的fragments),主要是针对pair-end测序表达量进行计算。

    FPKM (推荐软件,cufflinks) 和RPKM 的计算方法基本一致。

    FPKM和RPKM的区别就是一个是fragment,一个是read。

    对于单末端测序数据,由于Cufflinks计算的时候是将一个read当做一个fragment来算的,故而FPKM等同于RPKM。

    对于双末端测序而言,如果一对paired-read都比对上了,那么这一对paired-read称之为一个fragment,而如果一对paired-Read中只有一个比对上了,另外一个没有比对上,那么就将这个比对上的read称之为一个fragment.而计算RPKM时,如果一对paired-read都比对上了会当成两个read计算,而如果一对paired-read中只有一个比对上了,另外一个没有比对上,那么就计read数为1。 故而即使是理论上将各个参数都设置成一样的,也并不能说FPKM=2RPKM。对于单末端测序,虽然理论上FPKM等同于RPKM, 但是实际上即使是使用同一个mapping软件得到的mapping结果,然后再分别去计算同一个基因的RPKM (自己人工计算,或者用现成的一些软件都能算)和FPKM(用Cufflinks计算),结果却仍然是不同,因为Cufflinks有自己的模型和自己的一些内在算法。

    RPM/CPM:

    Reads/Counts of exon model per Million mapped reads (每百万映射读取的reads).

    RPM的计算公式:

    RPM=total exon reads / mapped reads (Millions)

    total exon reads:某个样本mapping到特定基因的外显子上的所有的reads;

    mapped reads (Millions) :某个样本的所有reads总和;

    RPM per gene is calculated as the number of reads per gene divided by the number of single-mapping reads per sample library times one million.

    由定义和计算公式可直接看出RPM与RPKM的区别,这里就不做说明了。

    TPM:

    Transcripts Per Kilobase of exonmodel per Million mapped reads (每千个碱基的转录每百万映射读取的Transcripts),优化的RPKM计算方法,可以用于同一物种不同组织的比较。

    TPM (推荐软件,RSEM) 的计算公式:

    TPMi={( Ni/Li )*1000000 } / sum( Ni/Li+……..+ Nm/Lm )

    Ni:mapping到基因i上的read数;

    Li:基因i的外显子长度的总和。

    在一个样本中一个基因的TPM:先对每个基因的read数用基因的长度进行校正,之后再用校正后的这个基因read数(Ni/Li)与校正后的这个样本的所有read数(sum(Ni/Li+……..+ Nm/Lm))求商。由此可知,TPM概括了基因的长度、表达量和基因数目。TPM可以用于同一物种不同组织间的比较,因为sum值总是唯一的。

    (不喜欢看公式分析,那么看看这个实例吧:TPM值就是RPKM的百分比嘛! | 生信菜鸟团)

    总结:

    不管是计算FPKM、RPKM,还是计算TPM,我们都要先得到一个ReadCount的矩阵(行为基因,列为样本)。在计算FPKM和RPKM时,都是先按列(也就是这个样本的总read数)进行标化,之后再对对个基因的长度进行标准化。而TPM是先对基因长度进行标准化,之后再对列(这个时候就不再是这个样本的总read数了)进行标化。这样使得最终的TPM矩阵的每列都相同(列和都等于1),也就是说每个样本中的TPM的和都是一样的。这样就会使得我们更容易去比较同一个基因在不同样本中所占的read数的比例。而RPKM/FPKM由于最终的表达值矩阵的列和不同,故而不能直接比较同一个基因在不同样本中所占的read数的比例。

    参考:浅谈RPKM,FPKM,RPM,TPM的区别 - 生信技能树

    RNA-seq数据预处理方法,哪个更适合你的问题

    先说结论:

    1.学术界已经不再推荐RPKM、FPKM;

    2.比较基因的表达丰度,例如哪个基因在哪个组织里高表达,用TPM做均一化处理;

    3.不同组间比较,找差异基因,先得到read counts,然后用DESeq2或edgeR,做均一化和差异基因筛选;如果对比某个基因的KO组和对照,推荐DESeq2。

    4.如果找公司做RNA-seq数据处理,计算表达量时,记得要read counts。

    在RNA-Seq的分析中,对基因或转录本的read counts数目进行标准化(normalization)是一个极其重要的步骤,因为落在一个基因区域内的read counts数目取决于基因长度和测序深度。很容易理解,一个基因越长,测序深度越高,落在其内部的read counts数目就会相对越多。当我们进行基因差异表达的分析时,往往是在多个样本中比较不同基因的表达量,如果不进行数据标准化,比较结果是没有意义的。因此,我们需要标准化的两个关键因素就是基因长度和测序深度,常常用RPKM (Reads Per Kilobase Million), FPKM (Fragments Per Kilobase Million) 和 TPM (Transcripts Per Million)作为标准化数值。那么,这三者计算原理是什么,有何区别呢?

    为了更清楚的展示计算过程,我们用三个样本的4个基因的read counts矩阵做例子(来源于YouTube)。如表1:

    <figure style="margin: 1em 0px;"> image

    </figure>

    大家可以清楚地看到,样本3的4个基因read counts数目明显多于其他两个样本,说明其测序深度较高,基因B的长度的基因A的两倍,也使得其read counts在三个样本中都高于A。接下来我们要做就是对这个矩阵进行标准化,分别计算RPKM, FPKM和TPM, 请睁大你的眼睛(为了使数值可读性更好,下面的计算中我们用10代表million)。

    我们先来说说RPKM怎么算。第一步先将测序深度标准化,计算方法很简单,先分别计算出每个样本的总reads数(这里以10为单位),然后将表中数据分别除以总reads数即可,这样就得到了reads per million. 如下表2:

    <figure style="margin: 1em 0px;"> image

    </figure>

    第二步即是基因长度的标准化了。将表2的read per million直接除以基因长度即可,如表3:

    <figure style="margin: 1em 0px;"> image

    </figure>

    到这里,我们即得到了传说中的RPKM。

    FPKM和RPKM的定义是相同的,唯一的区别是FPKM适用于双端测序文库,而RPKM适用于单端测序文库。FPKM会将配对比对到一个片段(fragment)上的两个reads计算一次,接下来的计算过程跟RPKM一样。

    下面,终于轮到TPM登场了。虽然同样是标准化测序深度和基因长度,TPM的不同在于它的处理顺序是不同的。即先考虑基因长度,再是测序深度。我们仍以表1的那个例子来说明TPM是计算过程。

    第一步直接除以基因长度,得到reads per kilobase,如表4:

    <figure style="margin: 1em 0px;"> image

    </figure>

    第二步标准化测序深度时,总的reads数要用第一步中除过基因长度的数值。即第一样本除以15,第二个样本除以20.25,第三个样本除以45.1 (别忘了我们的单位是10哦)。表5就是你们想要的TPM了。

    <figure style="margin: 1em 0px;"> image

    </figure>

    下面,是考验你们数学功底的时候了,有没有看出来TPM分分钟完虐FPKM/RPKM?其实,只要我们在表3和表5下面多加一行你就能很轻松地看到区别了。

    <figure style="margin: 1em 0px;"> image

    </figure>

    我们看到每个样本的TPM的总和是相同的,这就意味着TPM数值能体现出比对上某个基因的reads的比例,使得该数值可以直接进行样本间的比较。

    看到这里,相信大家已经完全理解了RNA-Seq数据标准化的流程了。虽然现在有很多计算差异表达的软件是直接支持read counts作为输入,并且自已完成标准化过程,如DESeq2,知道这些中间量的计算过程还是很有必要的。

    最后,奉上YouTube上的视频链接https://www.youtube.com/watch?v=TTUrtCY2k-w,可能需要FanQiang才能观看

    不再用RPKM/FPKM,现在推荐用TPM

    <figure style="margin: 1em 0px;"> image

    </figure>

    一表看懂TPM更适合比较同一基因在不同sample间表达丰度的差异

    <figure style="margin: 1em 0px;"> image

    </figure>

    DESeq2或edgeR

    DESeq2和edgeR不用RPKM/FPKM或TPM做均一化,而是直接用原始的read counts做均一化处理。

    <figure style="margin: 1em 0px;"> image

    </figure>

    DESeq2和edgeR能很好的解决这两个问题

    <figure style="margin: 1em 0px;"> image

    </figure>

    测序深度的差异问题,用RPKM/FPKM、TPM、DESeq2和edgeR都能处理

    <figure style="margin: 1em 0px;"> image

    </figure>

    如果组间RNA成分差异较大,怎么办?

    例如liver跟spleen比,组织特异性表达基因在里面捣乱;再例如常见的某个基因KO组与对照相比,该基因成分在KO组里缺失。

    <figure style="margin: 1em 0px;"> image

    </figure>

    <figure style="margin: 1.6em 0px 1em;"> image

    </figure>

    <figure style="margin: 1.6em 0px 1em;"> image

    </figure>

    就用edgeR/DESeq2作均一化

    相关文章

      网友评论

        本文标题:RNA-Seq数据标准化方法

        本文链接:https://www.haomeiwen.com/subject/tigrcqtx.html