差异表达1|edgeR和DeSeq2

Python012

差异表达1|edgeR和DeSeq2,第1张

1. 过滤低表达的基因

仅保留在两个样品或更多样本中CPM>1的基因

CPM=Reads/(total reads in the sample/1,000,000)

问题:会受到测序深度的影响

2. 选择一个the most average sample作为reference sample

    1. 对于每一个sample

        1. 除以size做normalization

        2. 选择top25%的基因表达值(75%的基因表达<=这个值)

    2. 对上述取平均值,最接近这个平均值的sample就是reference sample。

    3. 对于非reference sample,分别计算scale factor

        1. 选择gene list

            1. biased genes:log fold change ,过滤掉top/down 30%

            2. highly/lowly transcribed in both samples:geometric mean,过滤掉top/down 5%

            3. 取交集

        2. 对log2计算加权平均

            1. scale factor = 2 ^ (weighted average of log2 ratios)

     4. 对于所有sample的scale factors,center后得到最后的scale factor

1. 去掉不表达或者只在一个sample表达的基因

        DESeq2查看某个基因所有样本均一化read的平均值

2. Log e (defalut:e为底)

3. 为每一个基因

    1. 计算平均值

    2. 每一个值减去平均值

4. 为每一个sample计算median

5. 将median还原成normal number,得到最终的scale factor

一般而言,样本间的变异系数(coefficient of variance,CV)是由两部分组成的,一是技术差异(Technical CV),另一个是生物学差异(Biological coefficient of variance,BCV)。前者是会随着测序通量的提升而消失的,而后者则是样本间真实存在的差异。所以,对于一个基因g而言,它的BCV在样本间足够大的话,就可以认为基因g是一个差异表达基因。

拟合负二项广义对数线性模型,如果某个基因的表达值偏离分布模型,那么该基因为差异表达基因。

为什么使用负二项分布而不是泊松分布?

overdispersion: 真实数据的分布偏离泊松分布(方差=均值),方差明显比均值大

edgeR和后期的DeSeq2使用负二项式广义模型中的NB2模型

早期的DeSeq2:the variance is determined by the smoothed function f of the mean

BH等

参考资料:

1. [Gene expression units explained: RPM, RPKM, FPKM, TPM, DESeq, TMM, SCnorm, GeTMM, and ComBat-Seq](https://www.reneshbedre.com/blog/expression_units.html)

2. statquest: DeSeq2/edgeR共三个视频

3. [广义典型相关分析_广义线性模型(GLM)概述及负二项回归应用举例和R计算_weixin_39629467的博客-CSDN博客](https://blog.csdn.net/weixin_39629467/article/details/111341514)

4. [17. 负二项式模型 — 张振虎的博客 张振虎 文档](https://zhangzhenhu.github.io/blog/glm/source/%E8%B4%9F%E4%BA%8C%E9%A1%B9%E6%A8%A1%E5%9E%8B/content.html)

经过表达定量后,我们已经得到了基因的表达量矩阵,差异表达分析通常是RNA-seq分析的第一步。

差异基因表达分析通常都是在R中,常用的有DESeq2,edgeR,limma等几种,这次主要介绍用DESeq2来进行差异表达分析。

需要准备的数据:基因表达定量矩阵(counts)及分组文件

安装

使用

基本上RNA-Seq等等各种测序手段都需要计算差异表达

通常大家常用的软件不外乎cufflinks和几个R包DESeq、EBSeq、edgeR、ballgown。

值得一提的是现在的软件和R包大多需要有 生物学重复 才能准确计算差异表达情况

目前,我只了解edgeR可以在无生物学重复的情况下计算差异表达。

edgeR 官方发布页[中科大镜像]: http://mirrors.ustc.edu.cn/bioc/packages/release/bioc/html/edgeR.html

首先,安装edgeR包

随后,读取数据,修饰成如图的模样,列名自己随意定义能够识别对应什么样本就好,行名需要为对应的转录本或者基因的可识别的ID或者名称

以上,即完成了无生物学重复的差异表达的计算

结果中,有三列

补充,CPM(count per million)CPM = 每个转录本的count值/某样本总count值 * 10^6

如果,还需要计算q值,自行通过R的p.adjust计算一下就好

results$q = p.adjust(results$PValue, method = 'fdr')