基因功能富集小结

为什么要做GO富集

在生物学问题分析时,无论是通过转录组还是chip-seq等其他组学技术获得一大堆的差异基因之后,给大家留下的一个问题就是,这些差异基因属于什么功能?可能参与哪些通路?跟我研究的生物学问题是否有关?这个时候GO和KEGG pathway富集分析就登场了。
那么如何看富集到的基因功能?这个是时候有两个问题,一个问题是基因功能怎么定义,因为参与生命机体的基因所涉及到的生物学功能种类繁多、十分复杂,这就引出了GO(gene ontology)基因本体论,即严格的、标准的基因功能定义;另外一个问题是怎么样才叫富集,归到某一功能类的基因越多就是越富集吗?
对于第一个问题,基因本体论,它是由科学共同体制定的一套针对基因及相关功能的标准术语体系,相当于一本字典,这本字典里定义了每一个字、词。总体上,GO可分为生物学过程(biological process,BP)、细胞组分(cellular component,CC)和分子功能(molecular function,MF)。在每个条目(term)下又分为更为详细的条目,形成一个树状的有向(自顶向下)无环的词汇术语系统。GO富集要做就是将得到的差异基因投射到这套词汇系统的各个层次。
对于第二个问题,主要解决的是如何区分背景噪音和真正富集基因的问题。常用的有三种方法:

  • Overrepresention analysis(ORA)
  • Gene enrichment analysis(GSEA)
  • Network topology-based analysis(NTA)

网页在线版

说了这么多,大家最关心的是怎么实现GO富集,而且尽量是‘傻瓜’式的操作,这里亲自测试几个网页版的,保证有你想要的。

动物

如果你的研究对象是人或者小鼠等模式动物,恭喜你,你有多种选择。
webgestalt.:输入差异基因ID列表,勾选几个选项,一步提交,三种分析方法(overrespresention enrichment analysis,gene set enrichment analysis,network topology-based analysis),支持GO、pathway、network、drug、disease、phenotype等多种注释,并且支持上传gmt格式的功能注释库,自动出图,画图美观
shinyGo:输入差异基因ID列表,自动出图。
Metascape:输入差异基因ID列表,自动出图

植物

如果你是植物,可能选择不那么多了。
agriGOv2/:是一个主打植物的GO富集web severice,但同时也有一些动物的甚至有一个真菌的。

细菌和真菌

到了细菌就比较可怜了,尤其是一些冷门的菌。
DAVID:除了细菌,其他的也都可以做富集,简直是万金油。除了GO富集还包括COG、KEGG等富集。缺点是不出图,只给表格,而且它的更新速度让很多人吐槽。
除了上面的DAVID,其实shinyGo也可以,它是基于STRING-db.
KOBAS3.0:细菌、真菌、动物等都支持,可以是基因ID列表也可以是序列,缺点是不出图,需要自己画图。

对于有追求的人来说,一定要自己手动画图的(嗯~像我这样,风一样的男子),那么clusterProfiler一定是首选了。

clusterProfiler

Y叔大作,必属精品
这里的测试数据是大肠杆菌K12的ENTREZID,点击这里获取

#GO富集分析
#利用BiocManager安装clusterProfiler
if(!requireNamespace('BiocManager',quietly=TRUE))
  install.packages('BiocManager')
if(!requireNamespace('clusterProfiler',quietly=TRUE))
  BiocManager::install('clusterProfiler')
#用topGO画有向无环图
#if(!requireNamespace('topGO',quietly=TRUE))
#  BiocManager::install('topGO')

#安装大肠杆菌ecoli-k12的注释数据库org.EcK12.eg.db
#通过以下网址查看支持的物种
#https://link.zhihu.com/?target=http%3A//bioconductor.org/packages/release/BiocViews.html%23___OrgDb
#找到对应的物种的注释包后,通过以下代码下载
if(!requireNamespace('org.EcK12.eg.db'))
  BiocManager::install('org.EcK12.eg.db')

library('clusterProfiler')  #载入clusterProfiler和org.EcK12.eg.db
#library('topGO')
library('org.EcK12.eg.db')

gene<-read.table('c:/Users/yutao/Desktop/微生物转录组培训/测试数据/ecoli-k12_differential_EntrezID_for_clusterprofiler_analysis.txt',header=T)
head(gene)  #查看输入数据情况
gene<-gene$EntrezGeneID #从读入的数据框里面取出EntrezGeneID列


#通过keytypes(org.EcK12.eg.db)查看支持的基因名称类型
#如果不是ENTREZID最好通过bitr转成ENTREZID再进行功能富集分析,下面一行将k12的将原始的SYMBOL名称转换成ENTREZID
#head(bitr(gene, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.EcK12.eg.db"))

#enrichGO函数进行go富集分析
ego <- enrichGO(
  gene          = gene,  #输入的基因列表
  keyType = "ENTREZID",  #基因名称的格式
  OrgDb         = org.EcK12.eg.db,  #注释物种的数据库
  ont           = "ALL",  #go的类型BP/CC/MF/ALL
  pAdjustMethod = "BH",  #矫正方式 holm”, “hochberg”, “hommel”, “bonferroni”, “BH”, “BY”, “fdr”, “none”中的一种
  pvalueCutoff  = 0.01,  #设置过滤的p值一般为0.01
  qvalueCutoff  = 0.05,  #设置过滤的多重校正的p值,一般0.05
  readable      = TRUE)  ##Gene ID 转成gene Symbol ,易读
write.csv(summary(ego),"ecoli_k12_ALL_enrich.csv",row.names =FALSE) #将富集结果保存成csv文件,去掉数字序号
barplot(ego,showCategory = 10)  #条状图,按p从小到大排,绘制前10个Term
dotplot(ego,showCategory=50) #点图绘制前50个term
plotGOgraph(ego) #有向无环图
goplot(ego)  #另一种有向无环图
emapplot(ego, showCategory = 30) #有重叠基因的term用线连起来

  • 美图秀秀
    Ecoli-K12 GO enrichment

参考

知乎大佬
Y叔clusterProfiler

发布了23 篇原创文章 · 获赞 18 · 访问量 6560

猜你喜欢

转载自blog.csdn.net/qq_42491125/article/details/95808796