学习:StatQuest-Normalization

前言

我们先来辨析一下归一化和标准化的区别
归一化目的:

  1. 消除量纲
  2. 将数据缩放到[0,1]之间
    比较常用的是Z-score
    而标准化也是对数据进行缩放,但是它不会改变各样本间的生物学差异,只不过也是将数据缩放到一定的范围内,并且统一量纲,方便观察和计算
    接下来我们讨论下在差异分析中的标准化

DESeq

我们之前知道标准化的方式有RPKM,FPKM和TPM,但是DESeq并不采用这些方式,可能是DESeq的最终目的是想找出差异基因,即是相同基因的不同处理相比较,对于相同的基因,那么就没必要太过于纠结其长度带来的影响(因为都是一样长)
至于文库深度所带来的影响,DESeq采用另外一种方式来解决,为什么不统一文库深度呢?这里举个例子


image.png

假设我两个样本,它们的测序深度均为635条reads,那么基因A2M只在sample1中表达,而且是高表达,635中占据了563,那么剩下的基因分的的reads数就很少
由于2代测序中PCR的偏好性,就不太好说是其他(除A2M外)基因真的表达少,还是测序集中测了A2M而忽略其他基因的表达,所以单纯的将文库深度标准化会带来这个问题
基于客观事实,这两个sample只有A2M是差异表达基因,DESeq采用的方式是基于一个假设,那就是大部分基因都不差异表达

那下面我们就看一下DESeq是如何工作的:

  1. 去除离群值


    image.png

2.对基因的count数取对数值(log2和log10就可)


image.png

并且把无限值去除,记住是将这整个基因的这一行都去掉

  1. 对每一行(每一基因)求均值


    image.png

    这里是上述基因的均值

  2. 对应样本的基因减去对应基因的均值


    image.png

    记住,是取了对数的count值相减,如果没有取对数,则按照下面式子计算:


    image.png

5.对于每一列(每一个样本)求中位数


image.png

剪完均值以后,求每一列的中位数

  1. 对每一列的中位数取指数


    image.png

    这些值对应每一列的标准化因子

  2. 原始count矩阵除以对应列标准化因子


    image.png

    我们将原始count矩阵除以对应列标准化因子,则得到我们标注化好的矩阵

总结几点:

  1. 上述第3,4步其实就是综合了不同测序深度带来的影响,把它们拉一下,消除影响

  2. 上述第5步求中位数既是按照大部分基因都不差异表达的加设来选择的,以这些基因为标准来作比较,因为中位数都是排序计算的,对于不同样本来说,离中位数近的数值,两个不同样本间经过这样处理的相应基因差异就不会太大,只有里中位数远的数值,两个不同样本间经过这样处理的相应基因差异会产生显著差异

edgeR

这款软件的标准化同样不是采用RPKM,FPKM和TPM的方式进行标准化,至于原因的话,可以参照下DESeq的原因,这里不再赘述
那么我们就分步骤来看看edgeR是怎么工作的:

  1. 去除不表达的基因


    image.png

    在该模型中gene5被剔除

  2. 选取一个sample作为参考样本


    image.png

    以该样本标准化其他样本
    如何区分好的样本和坏的样本:


    image.png

    比方说sample3就是一个不好的样本,很多都是0
    一般来说,edgeR需要确认一个满足均匀分布的样本:

    首先,我们计算出所有的sample总的reads数


    image.png

    然后对应sample的对应的每个基因分别除以各sample的总reads数

接下来确认某一分位数,比方说75%,在sample1中0.26即为75%分位数,即sample1 中有75%的数值小于或者等于0.26
依次求出其他sample的75%分位数


image.png

然后对各样本的的75%分位数取均值


image.png

然后选取与各样品75%分位数均值最相近的某样本75%分位数,以该样本作为参考样本
  1. 选择合适的基因计算换算系数


    image.png

    对于原始count矩阵,我们已经选取了sample1为参考样本,我们把目光聚集到sample1和sample2上:


    image.png

    我们把sample1和sample2中对应的基因以reads数来画图,如上图,横轴为某基因的reads是在参考样本多还是在sample2 中多;纵轴表示某基因的reads数多还是少(推测该reads数是指参考样本和sample2的reads数总和)
    我们选取的参考基因应该是红色区域的基因
  2. 标准化并选取参考基因
    法一:


    image.png

    对应的基因按照上述公式进行标准化,目的是识别有偏差的基因,并且移出无限值
    法二:
    也可以取对数值计算几何平均数进行标准化,目的是识别两个样本中高转录和低转录的基因


    image.png

我们由这两个方法可以得到两个表格


法一

法二

并且将这两张表格按数值从小到大排列:


法一

法二

最后,这两张表分别过滤掉前后30%偏差较大的基因和比较高和比较低表达的基因:


  1. 计算剩余的比率对数的加权平均值
    这里的剩余,是指步骤3中被排除的30%的基因


    image.png

    即sample1(参考样本)除以sample2的对应基因,再取log值

  2. 计算标准化因子
    步骤4中,将表中的log2(ratio)求个均值,然后按照下述公式计算标准化因子:


    image.png
  3. 中心化标准因子及标准化


    image.png

    这是个例子,比方说左图的WT2是参考样本,每个基因和自己比的加权对数平均数均为1;右图是将这4个样本的标准化因子中心化
    接下来,每个样本的每个对应基因的原始count数除以对应样本的标准化因子即可完成标准化

Independent Filtering

举个例子,


假设我有两个分布(两个分布之间有一定交集,但是95%是没有交集的),我随机从每个分布里面抽取3个数,计算它们均值的差异性(这里的差异性应当理解为差异小于某个阈值,则认为它们没有差异),因为数据来自两个分布,所以认为它们的均值是有差异的,那么如果我们抽取到那5%均值相等的部分,由于这些数据来自两个分布,但是在这5%交集部分(均值相等部分)本来是没有差异的,容易误判为有差异的,就像是分组问题一样,由于事先数据被label为两个分布,即使是数值上没有差异,也会被划分成有差异的两个组中去
我们认为这是小概率事件,认定为假阳性
简答理解就是即两批数据来自于不同的组,由于数值太接近,其实是没差异的,但是容易为误判为有差异的
另外我们还有个对照,

即抽样来自于同一个分布,由于数据来自于同一分布,这种情况我们认为它们的均值是没有差异的
那么模拟这个过程1000次,计算t-test的p_value
对于两个分布
我们发现993次抽样p_value显著,7次不显著
对于同一分布
其中有44个是有差异的,且p_value显著的,那么对于数据来自同一分布的来说,它们的均值是没有差异的,那么这44个就是误判的
所以我们联想到,数据来自于两个分布,993个差异中会有一部分是误判的,那么我们就依照来自同一分布的44个误判来做校正,即993-44=949
校正后,有949次是有差异的,这44个我们认为是假阳性的,因为来自同一分布,所以不该有差异

所以在RNA-seq差异分析里面,会有一部分假阳性的存在,所以应该去除
edgeR采取的方法是将2个重复及以上的基因(CPM > 1)的基因保留,其余的剔除


那么DESeq用的是CPM的分位数进行剔除



它是根据每种处理重复之间的平均CPM由大到小排序后,剔除某分位数一下的基因就可以了

因为表达量太低的这些基因很容易造成假阳性

参考:http://www.360doc.com/content/18/1007/19/51784026_792756710.shtml

你可能感兴趣的:(学习:StatQuest-Normalization)