DESeq2文库标准化
问题1:调整文库大小的差异
样本1的read是样本2的一半,样本2中每个基因的read是样本1的两倍。这种差异不是生物学造成的,而是测序深度造成的。RPKM,FPKM,TPM和CPM都处理这个问题。
问题2:调整文库组成的差异:
RNA-seq(和其他高通量测序)经常被用来比较一种组织类型和另一种组织类型。例如,肝脏vs脾脏。这可能是因为肝脏中转录有很多肝脏特异性基因,而脾脏中却没有。这是一个不同的文库组成(library composition)的例子,你也可以想象,如果你敲除一个转录因子,在同一种组织类型中,你会发现不同的文库组成。
在这个例子中,两个文库有相同的大小(read),现在,假设所有基因的表达都是一样的,只有一个例外。假设只有样本1转录A2M, 这意味着样本1中A2M消耗掉的563个reads,这563reads将会分布到样本2中的其他基因上。在样本2中,除了A2M之外,所有的reads都非常高。然而,唯一的差异表达基因是A2M。
上传失败...(image-dfdecb-1610511799293)
编写DESeq2(和edgeR)的人意识到他们的工具将用于各种类型的数据集,所以他们希望他们的标准化去处理:
问题1:调整文库大小的差异
问题2:调整文库组成的差异:
我们将从一个小数据集开始,说明DESeq2如何缩放(scale)不同的样本。目标是为每个样本计算一个标准化因子(scaling factor)。标准化因子必须考虑到read depth和library composition。
第一步:对全部值取log
DESeq2使用了log(“以e为底的log”)
DESeq2可以使用log2或log10,但在R中loge默认值。
注意log(0) =-∞,这是因为R定义log(0)等于-∞。
第二步:每行取平均值
任何时候你把一个数字加到无穷(或-无穷)你会得到无穷(或-无穷),这就是为什么这是负无穷。因为Gene1是负无穷,所以平均值也是负无穷。
对数值的平均值有一件很酷的事情,那就是这个平均值不容易被异常值所影响。同理,我们可以看Gene3,存在异常值,取对数后,影响减小。
第三步:过滤掉值为负无穷的基因
一般来说,这一步在一个或多个样本中过滤掉read为零的基因。
如果你在比较肝脏和脾脏,这将去除所有只在肝脏(或脾脏)转录的基因。
理论上,这有助于将标准化因子集中在管家基因上——无论组织类型如何,基因转录水平都是相似的。
第四步:从log(counts)中减去平均对数值
- 我们要检查的是每个样本读取数与所有样本均值的比。
第五步:计算每个样本比的中位数(median)
注意:使用中位数是另一种避免极端基因在一个方向上过度影响的方法
表达差异较大的基因对中位数的影响并不比表达差异较小的基因大,因为具有巨大差异的基因极有可能是罕见的,因此,这种效应会给差异较小的和“管家”基因带来更大的影响。
第六步:将中位数转换为“正态数”,得到每个样本的最终的标准化因子
这些是对数值,所以它们是指数(这里是e的指数)
太棒了! !我们有三个样本的标准化因子,现在我们要做的就是把原始的reads除以它们。