在生物信息学中,GO似乎是一个我们绕不开的话题。想要深入的探讨这个话题,我们首先要理解「什么是GO?」

01 GO的概念

GO (Gene Ontology),中文译名为基因本体论。基因组测序已经清楚地表明,很大一部分规定核心生物功能的基因是所有真核生物共有的。一个生物体中这种共享蛋白质的生物学作用的知识往往可以转移到其他生物体中。基因本体论数据库的目标是产生一个动态的、受控的词汇,即使关于基因和蛋白质在细胞中的作用的知识在不断积累和变化,也可以应用于所有真核生物。为此,三个独立本体被构建:生物过程、分子功能和细胞成分。而这一过程始于1998,当时研究三种模式生物--黑腹果蝇、小鼠和酿酒酵母的基因组的研究人员同意就基因功能的共同分类方案进行合作,如今数十年过去,GO所代表的不同生物的数量已达数千。GO以一种灵活和动态的方式,为整个系统发育谱系中的同源基因和蛋白质序列提供了可比较的描述。

GO注释即是将基因产物与与GO term(术语)相联系的过程,在这个过程中,通过数据库比对等方法,一个物种的基因会有与之对应的GO术语,这形成了一个基因-GO术语的列表。GO注释最常见的用途是解释大规模的分子生物学实验,有时称为 "全能 "实验。无论是,基因组学、转录组学、蛋白质组学或代谢组学,这些实验汇集了生物分子,以获得对生物体结构、功能和动态的洞察力。"基因本体论富集分析 "被用来发现在交替控制的实验条件下的统计学上的重大相似性或差异。

02 GO富集分析的数学原理

在这里我们重点讨论GO富集分析。GO富集分析的数学原理基于超几何分布。超几何分布属于离散随机变量的概率分布。这里,我们首先理解几个统计学概念

*定义1:随机变量Y是一个定义在样本空间上的数值函数,样本空间中的每一个简单事件都被指派一个Y值

举例来说明这个定义:从240件产品中随机选择4件产品进行检验,以确定这四件产品是否为有缺陷产品,如果有缺陷产品超过一件,则这240个产品都将被拒绝。在这个例子中,关心的事件是观测变量Y,Y表示被检验四件产品中有缺陷产品的数量。事件Y=0表示4件产品中没有缺陷产品的简单事件集合。Y的可能值是一个用数字表示的事件,称Y为一个随机变量。

同样在这个例子中,缺陷产品数量Y的取值个数是可数的,只可以取0,1,2,3,4这5个值中的一个,由此延申出定义2:

*定义2:离散随机变量Y是一个仅能取可数个值的变量

随机变量Y的可能取值是数值事件,我们希望计算事件的概率。这里给出定义3:

*定义3:随机变量Y的概率分布是给出Y的每个可能取值Y=y以及相应概率p(Y=y)的表、图或公式

了解这些定义后,我们回到一开始提出的超几何概率分布

还是先举一个例子:实验室里一共摆放了10种试剂,这10种试剂种有4种是酸性试剂,6种是碱性试剂,现在随机抽取3种试剂,问,没有酸性试剂被抽中的概率。

本例中,随机变量Y表示选中酸性试剂的数量,这是一个典型的无放回抽样,Y是一个超几何随机变量,为了计算p(0)的概率,我们需要再引入一个定理」:

*定理(组合法则):一个n个元素的样本是从N个元素的集合中选择的,那么从N个中选择n个不同样本个数记作,它等于

那么,

推广超几何概率分布公式:

在本例中,N=10,n=3,r=4,y=0。

现在,我们把应用场景切换到差异表达基因的GO功能富集上,假设某物种中有共有N个基因,这其中有r个基因与某一GO term对应(例如GO:0004046),每次抽取n个基因,那么,抽到和 GO:0004046相关的基因数量为y的概率,满足超几何概率分布。

在这个场景里,随机变量Y表示选中和 GO:0004046相关的基因数量,每次抽取n个基因相当于我们差异表达基因数量为n,若试验重复无数多次,即可观察到Y值的模型。

当然,这里得到的结果有可能是因为随机选择而导致的,也就是说随机变量Y的分布并不一定满足公式,只是因为我们每次恰好抽中了这么多的相关基因。

为此,我们要计算p值,阈值为p<0.05即为显著富集,但目前我们仅仅考虑差异基因富集到一条通路的情况,事实上在做GO富集分析时,基因在每一条通路上的富集都需要检验,这就需要利用多重检验来矫正p值,即最终p-adjusted<0.05才为显著富集

03 GO富集分析的代码实现

讨论了GO富集分析的数学问题,再来进行GO富集分析的实践。在这我推荐使用南方医科大学Guangchuang Yu发表的R包clusterProfiler进行分析。详细代码如下:

library(clusterProfiler) #载入R包
library(tidyr)genelist<-read.delim('DEGgenelist.txt',header = F) #读取差异表达基因的基因列表
genelist<- genelist$V1[1:nrow(genelist)]#genelist必须为vectorterm2gene <-read.delim('term2gene.txt',header = T) #读取GO term和物种基因号对应的列表
term2name<-read.delim('term2name.txt',header = T) #读取GO term和term描述对应的列表df <- enricher(gene = genelist, TERM2GENE = term2gene, TERM2NAME = term2name, pvalueCutoff = 0.05, qvalueCutoff = 0.05)
input<-df@result
input<-separate(input,GeneRatio,c('Study.term','Study.total'),sep = '\\/') #把GeneRatio的结果拆分
input<-separate(input,BgRatio,c('Pop.term','Pop.total'),sep = '\\/') #把BgRatio的结果拆分
go2ont <- go2ont(term2gene$GO)
mergedf<-merge(input,go2ont,by.x = 'ID',by.y = 'go_id',all.x = T)
write.table(mergedf,'GOEA.txt',quote = F,row.names = F,sep = '\t') #输出结果

04 GO富集分析结果的可视化

接下来进行可视化绘图,在此之前先讨论一个概念,什么是enrich factor富集因子

富集因子=(某个term中出现的差异基因的个数/所有的差异基因的个数) / (term中包含的所有基因 / 数据库中总的基因数目)

回归我们前文提到的超几何分布,你就会发现,数据库中总的基因数目即为总数N,term中包含的所有基因即为r,所有的差异基因的个数即为抽样个数n,某个term中出现的差异基因的个数为随机变量数值y

理解概念之后,我们开始绘制一个GO气泡图,代码如下:

library(ggplot2)go<-read.delim("GOEA.txt", header = T, sep = "\t", check.names = T)
go <- go[go$p.adjust<0.05,]
go<-go[order(go$p.adjust,decreasing = T),]gofold<-(as.numeric(go$Study.term)/as.numeric(go$Study.total))/(as.numeric(go$Pop.term)/as.numeric(go$Pop.total)) #计算enrich factor
gof<--log10(go$p.adjust)
Number <- go$Study.termggplot(go,aes(gofold,Description))+geom_point(aes(size=gof,color=Number))+scale_color_gradient(low = "#6a82fb", high = "#fc5c7d")+labs(color='Counts',alpha="Number of enriched genes",size="−log10(FDR)",x="Enrichment factor (fold)",y="",title="")+theme_bw()+theme(axis.line = element_line(colour = "black"), axis.text = element_text(color = "black",size = 14),legend.text = element_text(size = 14),legend.title=element_text(size=14),axis.title.x = element_text(size = 14))

对GO的介绍就到这里了,GO与我们生物学实验往往息息相关,理解其中原理,可以帮助我们更好的掌握GO富集分析方法。

参考资料:

Ashburner, M., Ball, C. A., Blake, J. A., Botstein, D., Butler, H., Cherry, J. M., Davis, A. P., Dolinski, K., Dwight, S. S., Eppig, J. T., Harris, M. A., Hill, D. P., Issel-Tarver, L., Kasarskis, A., Lewis, S., Matese, J. C., Richardson, J. E., Ringwald, M., Rubin, G. M., & Sherlock, G. (2000). Gene ontology: tool for the unification of biology. The Gene Ontology Consortium. Nature genetics, 25(1), 25–29. https://doi.org/10.1038/75556

Yu G, Wang L, Han Y and He Q*. clusterProfiler: an R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology. 2012, 16(5):284-287.

http://geneontology.org/

William M. Mendenhall and Terry L. Sincich. Statistics for Engineering and the Sciences


猜你喜欢

iMeta简介 高引文章 高颜值绘图imageGP 网络分析iNAP
iMeta网页工具 代谢组MetOrigin 美吉云乳酸化预测DeepKla
iMeta综述 肠菌菌群 植物菌群 口腔菌群 蛋白质结构预测

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树 必备技能:提问 搜索  Endnote

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流快速解决科研困难,我们建立了“宏基因组”讨论群,己有国内外6000+ 科研人员加入。请添加主编微信meta-genomics带你入群,务必备注“姓名-单位-研究方向-职称/年级”。高级职称请注明身份,另有海内外微生物PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

点击阅读原文,跳转最新文章目录阅读

最熟悉的陌生人| 长文理解基因本体论 (Gene Ontology, GO)相关推荐

  1. gene Ontology (基因本体论)

    gene ontology为了查找某个研究领域的相关信息,生物学家往往要花费大量的时间,更糟糕的是,不同的生物学数据库可能会使用不同的术语,好比是一些方言一样,这让信息查找更加麻烦,尤其是使得机器查找 ...

  2. 一文极速读懂 Gene Ontology (GO)数据库

    一.介绍 官方:基因本体(GO)知识库是有关基因功能的全球最大信息来源. 这些知识既是人类可读的,也是机器可读的,并且是生物医学研究中大规模分子生物学和遗传学实验的计算分析的基础. 在读懂基因本体论( ...

  3. 鸿蒙手机系统测评,最熟悉的陌生人 HarmonyOS 2系统评测

    6月2日,华为正式发布了面向广大消费者的HarmonyOS 2正式版.作为一款面向万物互联时代的新一代智能终端操作系统,HarmonyOS为不同设备的智能化.互联与协同提供了统一的语言,带来简捷.流畅 ...

  4. Gene Ontology overview 网页手动翻译

    日志: 玩了一年多了,有点无聊,该干活了- 用谷歌直接翻译网页真的好多错误还不通顺,也不符合原来的逻辑,关键词都翻译地不对,怎么能正确理解呢,强迫症就自己翻译一下,不太懂的就查查资料,准确率应该还可以 ...

  5. Gene Ontology(GO)简介与使用介绍

    1.GO怎么就出现了? 现今的生物学家们浪费了太多的时间和精力在搜寻生物信息上.这种情况归结为生物学上定义混乱的原因:不光是精确的计算机难以搜寻到这些随时间和人为多重因 素而随机改变的定义,即使是完全 ...

  6. 在人工智能领域,人工智能机器无法如人一样理解常识知识

    https://www.toutiao.com/a6664721599637225987/ 在人工智能领域,人工智能机器因为无法如人一样理解常识知识,而使人工智能机器表现出的智能程度极其有限. 因此, ...

  7. 如何让人大致理解RxJava思想:第一节 初步理解RxJava

    如何让人大致理解RxJava思想:第一节 初步理解RxJava 首先,我们需要明确,一个人不可能一口气吃成一个胖子,你不可能仅仅花5分钟看完我这篇文章,然后一拍桌子,大叫一声,我知道了,然后赢取白富美 ...

  8. Gene Ontology (GO) 简介

    为了查找某个研究领域的相关信息,生物学家往往要花费大量的时间,更糟糕的是,不同的生物学数据库可能会使用不同的术语,好比是一些方言一样,这让信息查找更加麻烦,尤其是使得机器查找无章可循.Gene Ont ...

  9. Gene Ontology 的GO注释的可视化

    Gene Ontology 的GO注释的可视化@TOC 利用goatools和PyGraphviz可视化 最近因为项目的原因,需要对GO terms的注释进行可视化,在此之前已经使用visio自己画了 ...

最新文章

  1. 人工智能可以自己编码?2022年这8个人工智能趋势值得关注!
  2. open-v-p-n原理解读及实例服务部署
  3. python maketrans_Python maketrans()方法
  4. 博士申请 | 英国爱丁堡大学NLP组招收自然语言处理方向全奖博士生
  5. Android实现圆角照片和圆形照片
  6. php微信商户下载对账单,浅析微信支付:下载对账单和资金账单
  7. python实践项目(六)
  8. 基于STM32单片机的精彩设计实例合集
  9. wooyun 历史资源汇总
  10. 神舟 桌面显示计算机,神舟笔记本双显卡怎么切换不盯道你的笔记本型号
  11. 二十三、小程序中的三级下拉框(下拉菜单)
  12. Secure CRT 用域名连接虚拟机的详细步骤
  13. 读书笔记:《关于上班这件事--自序·朱德庸》
  14. Django restframework实现批量操作
  15. win10护眼模式_Win10系统中你不知道的小秘密,今天解开了,学会了提高工作效率...
  16. 【030】纪妖–正版妖怪百科资料库
  17. QT 中英文切换-国际化(解决部分翻译不起作用的问题)
  18. 不是贫穷限制了你的思维,是你的思维导致了你的贫穷
  19. 【复习笔记】软件项目管理
  20. 抖音矩阵系统,抖音矩阵系统,抖音SEO源码。

热门文章

  1. C++ 模板进阶(模板的特化)
  2. 使用 Learner Lab - 学生
  3. replace() 替换的整理
  4. CSDN博客给我带来的一些诱惑和选择机会
  5. 计算机网络 层次路由,计算机网络-网络层(5)层次路由
  6. 服务器appcrash的问题怎么修复,Win7系统出现APPCRASH错误的修复方法
  7. js调用高德地图API接口——返回坐标和省市区地理位置信息
  8. 服务器2012分辨率不能修改,《F1 2012》无法修改分辨率解决方法
  9. VMware安装Android x86_64 9.0虚拟机
  10. 肯德尔秩相关系数matlab,常用的特征选择方法之 Kendall 秩相关系数