「GO富集分析」从原理到实践 ~ 零基础掌握

Python043

「GO富集分析」从原理到实践 ~ 零基础掌握,第1张

原本,我并无写这一稿件的想法。主要原因有二:

如果要找合理解释,那么针对第一点,就是每天仍然有大量新接触生信数据分析的朋友;针对第二点,......在前两天我推的文稿《零基础快速完成基因功能注释 / GO / KEGG / PFAM...》中,评论区答应了下,阅读过5000,那就写一写富集分析。于是,如果不写,总是不对。如果要写,只能现在写。毕竟有些事情,现在不做,以后真的不会做。

对于这一块,完全陌生的朋友,尤其是不少生物学背景朋友,有必要温习一下数理统计基础。这一稿件只做原理最简单的但使用最广泛其速度最快的Over-Represence Analysis模式的富集分析讲演。其他模式,不涉及。

回到主题,先举个经典的抽球例子:

小红小绿小蓝三个人自称有超能力,可以用手摸摸球就分辨出黑球白球,于是我们找来黑袋子,放100个球,其中20个白球80个黑球,让三人分别无放回地抽取。

小红随机抽出来10个球,其中2个白球8个黑球,情况即,

抽球中白球比例与背景白球比例完全一致,说明小红抽球结果随机。

球放回去,小绿来抽球,抽出来的10个球,其中3个白球7个黑球,情况即,

这是经典的抽球案例,抽取到的白球个数的概率分布为超几何分布。基于此,我们可以简单计算抽取到比小绿抽取到球个数(或更多即更极端)的概率如何,在 R语言中计算,即

而对于小蓝的情况,那么概率如何?

在 TBtools 中也可以计算,只是写法有点区别

可以看到,尽管这只是一次抽球,小绿抽球中白球比例(或更极端情况)出现的概率是31.88%+,还是挺高的,于是我们有较高的把握说,小绿嘛,只是走了狗屎运。相反,小蓝抽球中白球比例或更极端情况出现的概率几乎为 0 ,我们几乎没啥把握说,小蓝走狗屎运....换句话说,我们有理由相信,或许小蓝真有抽白球的超能力.....

说了这么多,那么跟基因集合富集分析有啥关系?....基因集合功能富集分析。那么我们就需要有一个基因集合(如差异表达基因集合或ChIP-seq的Peaks或GWAS定位的系列区间),还有一个功能标签(如 生长素信号转导相关 )。于是黑白球案例可以简单调整一下。假定现在这个物种一共有100个基因,其中20个基因与生长素信号转导相关,80个没有注释到与生长素信号转导相关(换句话说,约等于无关),我们做了对植株做了处理,和CK分别测定转录表达谱,通过差异表达分析,鉴定到10个差异表达基因,其中2个与生长素信号转导相关,而另外8个则没注释到生长素信号转导相关,简单画一下,即

好,剩下的两个就不替换了。整体上,ORA模式的富集分析,本身就是经典的抽球案例,感兴趣的自行替换就可以了。

基本原理,相信都搞清楚了。不过还是有两三点需要注意:

具体如何做物种所有基因的背景注释,请参考前述推文《零基础快速完成基因功能注释 / GO / KEGG / PFAM...》。

首先,打开 TBtools GO 富集分析界面

整体如上,一共三个文件:

具体示例如下

点击 Start ,随后等待即可。完成时会有弹窗提示。查看输出文件

(写到这里,突然觉得这些都没啥意思,不知为何....就不详细写了,大伙自己看看列名,猜猜吧)

很多时候,我们会选择,筛选第一列,只看 Biological Process。一般这些与我们的生物学认知会贴近一些。

基因集合功能富集分析,是一个常常被谈起的话题,甚至近期都有不少新方法或算法被提出。感兴趣的朋友可以去了解。这份教程,只与大伙说最简单,但也是使用最为广泛的一种富集分析模式。无论是不是 TBtools 用户,理论上来说,都可以轻松理解并掌握,从原理到实践。

写到一半,其实我已经不想写了。原因非常简单,这也是为什么在我之前,并没有一个人写出来 TBtools 类似的工具。不是写不了,而是不想写。有时候,随着能力增长和知识积累,往往不再愿意做一些简单的事情。或许这还涉及到年龄的增长,角色的转变,责任的变化....云云。

小时候,我以为写 TBtools 玩玩;

后来,我以为我会一直写下去;

现在,,,,,,

生物富集在生物信息中有着重要的地位,做生物信息分析的时候总会遇到这样或者那样的富集分析,比如GO富集分析等。大多数情况下我们都是使用线上在线分析解决。是否会遇到这样一种情况,当我们不能使用在线分析的时候,如何对我们感兴趣的基因进行富集呢?

这似乎是一个很有趣的问题....

那我们今天就来追溯生物 富集 的前世今生....

比如我们现在遇到了这样一个问题:

从数据来看,我们鉴定的6个基因中有有4个在这个通路里,显然这个病毒和这个通路有着特殊的联系,但似乎又觉得有一些不太对的地方。

显然我们需要一个指标来证明我们鉴定的6个基因确实通过特殊的富集才得到的...

我们将上面的问题简化为一个数学问题来看的话,这似乎就是一个摸球问题:

那怎么计算这个概率呢?通过排列组合和概率论的知识可以得到

也就是说我们随机抽取一次,其中抽到4个黑球的概率是0.196

那我们将这个公式继续推广可以得到:

这似乎就是一个超几何分布模型

假设有限总体包含N个球,其中黑球为M个,则剩余的N-M个为白球,如果从该有限总体中抽取出n个球,其中有k个是黑球的概率。

回到我们的问题,从6个球中抽到了4个黑球这个事件到底是否具有显著性呢?

我们在前面计算出了抽到4个黑球的概率是0.196 这个值是不能拿来直接用的,必须要对其进行一个评估,因为我们必须要考虑到随机情况

在这里我们就用到了超几何分布检验( Hyper Geometric Test)

怎么理解超几何分布检验呢?

我们给一个假设,此次抽样与随机抽样没有差异(原假设)

P值就是当 原假设为真时所得到的样本观察结果或更极端结果出现的概率 。如果P值很小,说明这种情况的发生的概率很小,而如果出现了,根据小概率原理,我们就有理由拒绝原假设。

当前的样本观测结果是黑色的球为4个,更极端的结果就是k=5,k=6的情况

因此我们得到如下计算结果:

从而得到的p值结果为0.230769 因此我们按照95%的置信区间来看,0.230769>0.05

因此我们不认为这是一个小概率事件,因此我们认为此次抽球与随机抽取没有差别

回到我们最初的生物学问题,如果我们发现有 5 个基因在特殊通路中的话,那么

p=p(x=5)+p(x=6)=0.034965 <0.05

此时我们就拒绝原假设,认为这是一个小概率事件,也就是我们鉴定的基因和通路有比较强的联系。

如何对p值进行计算呢?

R语言

其中4 为抽取6个球中黑球的数目 ,7 为袋子黑球的数目,8为袋中白球的数目,6为所抽球的个数

python

其中4 为抽取6个球中黑球的数目,15为袋中黑白球总数,7 为袋子黑球的数目,6为所抽球的个数

解决了p值后还会遇到另一个问题就是,在我们对鉴定到的差异差异基因做通路富集后,通常会计算一个p值。当某个通路的p值小于0.05(5%)时,我们通常认为这个通路是通过富集得到的。但是仍旧有5%的概率就是这个通路是通过随机抽取得到的。那么我们就错误地否认了原假设,导致了假阳性的产生(犯错的概率为5%)。

如果检验一次,犯错的概率是5%;检测10000次,犯错的次数就是500次,即额外多出了500次差异的结论(即使实际没有差异)。

为了控制假阳性的次数,于是我们需要对p值进行多重检验校正,提高阈值。

具体细节可以移步 浅谈多重检验校正FDR