ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
127 stars 32 forks source link

一文厘清富集分析:GroupGO、enrichGO、gseGO、enrichKEGG、gseKEGG、enrichMKEGG #5878

Closed ixxmu closed 1 month ago

ixxmu commented 1 month ago

https://mp.weixin.qq.com/s/NecrQSUv7kPwQT--W9eBUw

ixxmu commented 1 month ago

一文厘清富集分析:GroupGO、enrichGO、gseGO、enrichKEGG、gseKEGG、enrichMKEGG by 生信小博士

写在开头

生物学研究中,我们常常面对成百上千的基因数据,例如转录组或蛋白质组数据。在基因差异表达分析之后,你得到了差异基因,可能几个到上百个不等,单纯分析单个基因的意义有限,而从庞大的基因关系网络中提取有效信息也十分耗时。

富集分析应运而生,它就像生物学研究的“数据库字典”,将不同生物学现象与基因的对应关系整理成册,帮助我们快速识别基因数据中的关键信息。

富集分析的核心思想是:如果某个生物学功能(例如通路、GO术语)中的基因在我们的数据中明显比随机情况下更“活跃”,那么该功能就很有可能与我们研究的表型或疾病相关。

富集分析方法原理

富集分析方法可分为过表达分析 (ORA) 和基因集富集分析 (GSEA) 方法。【还有上图中的PT方法,但这种方法不是特别常用。PT利用现有的全基因组范围的生物网络,提取数据库的基因相互作用关系(如:基因连接度、基因在网络中的距离),把基因的生物学属性整合到功能分析。利用网络拓扑结构来计算基因对特定生物通路的重要性并给予相应的权重,再利用传统的ORA 或 FCS 方法来评估特定生物通路的富集程度,如GANPA 和 LEGO。缺点就是算法太复杂,计算速度慢。

ORA方法与GSEA方法不同,因为它们只考虑感兴趣的查询基因集,并且需要严格的截止值才能将基因分类为上调和下调;因此,当临界值不确定时,建议选择GSEA方法。

ORA将查询基因列表中富集的所有通路作为一个整体输出,主要使用非排名列表(使用基于最小超几何值的方法)。因此,ORA方法的重点是基因集,而GSEA技术的重点是排名通路列表。

GO、KEGG区别与联系

GO是一种用于描述基因和蛋白质功能的标准化系统,主要专注于定义基因和蛋白质的分子功能、生物学过程和细胞组分。它通过层次化的术语和注释关系来帮助研究人员理解基因和蛋白质在生物体内的功能和相互作用。

KEGG是一个综合性的生物信息学数据库,使用节点来表示基因或基因产物。KEGG集成了基因组学、代谢组学和系统生物学的信息,提供了关于基因功能、代谢通路和疾病等方面的详细信息。KEGG的重点是描述生物体内的代谢通路和相关基因,以及这些通路在不同生物体系中的变化和调控。

KEGG侧重于生物体内代谢通路和相关基因的描述,而GO则更专注于基因和蛋白质功能的标准化描述和分类。两者在生物信息学研究中通常会结合使用,以全面理解基因和蛋白质的功能及其在生物体内的作用。

对GO的的富集分析方法常用的有两种:ORA(clusterProfiler包中的enrichGO)和GSEA(clusterProfiler包中的 gseGO)

对KEGG的的富集分析方法常用的也有两种:ORA(clusterProfiler包中的enrichGO)和GSEA(clusterProfiler包中的 gseGO)

GO 相关的富集分析

GO(Gene Ontology)是用于对不同物种的基因和基因产物进行功能描述的标准化资源。它包含三个独立的本体:

  • 分子功能 (MF):描述单个基因产物在分子水平上的活性。

  • 生物过程 (BP):描述涉及多个基因产物的广泛生物过程。

  • 细胞成分 (CC):指基因产物在细胞内发挥功能的位置。

这三个层面具体是指:

  • Cellular component解释的是基因存在在哪里,在细胞质还是在细胞核?如果存在细胞质那在哪个细胞器上?如果是在线粒体中那是存在线粒体膜上还是在线粒体的基质当中?这些信息都叫Cellular component。

  • Biological process是在说明该基因参与了哪些生物学过程,比如,它参与了rRNA的加工或参与了DNA的复制,这些信息都叫Biological process

  • Molecular function在讲该基因在分子层面的功能是什么?它是催化什么反应的?
    立足于这三个方面,我们将得到基因的注释信息。

1.GO 分类

clusterProfiler 中的 groupGO() 函数旨在根据基因在特定级别的 GO 分布对基因进行分类。(虽然作者没有指出,但是我觉得groupGO用的也是ORA方法

library(clusterProfiler)data(geneList, package="DOSE")gene <- names(geneList)[abs(geneList) > 2]
# Entrez gene IDhead(gene)
ggo <- groupGO(gene = gene, OrgDb = org.Hs.eg.db, ont = "CC", level = 3, readable = TRUE)
head(ggo)

2.GO富集分析

clusterProfiler 包提供 enrichGO() 函数用于 GO 超代表分析。其实是fisher检验

gene.df <- bitr(gene, fromType = "ENTREZID",        toType = c("ENSEMBL", "SYMBOL"),        OrgDb = org.Hs.eg.db)
ego2 <- enrichGO(gene = gene.df$ENSEMBL, OrgDb = org.Hs.eg.db, keyType = 'ENSEMBL', ont = "CC", pAdjustMethod = "BH",                pvalueCutoff  = 0.01,readable      = TRUE, qvalueCutoff = 0.05)head(ego2, 3)

3.GO基因集富集分析

 gseGO() 函数利用基因本体论进行基因集富集分析。函数中用到的geneList必须是降序排列的基因名

##GSEA分析,所以geneList必须是降序排列的基因名ego3 <- gseGO(geneList     = geneList,              OrgDb        = org.Hs.eg.db,              ont          = "CC",              minGSSize    = 100,              maxGSSize    = 500,              pvalueCutoff = 0.05,              verbose      = FALSE)

KEGG 相关的富集分析

KEGG富集分析

KEGG FTP服务自2012年以来不再免费提供给学术机构使用,并且许多软件包使用的是过时的KEGG注释数据。clusterProfiler 软件包支持使用免费的 KEGG 网站下载最新版本的在线数据,该网站对学术用户开放。clusterProfiler 同时支持 KEGG 通路和模块分析。

1.KEGG通路富集分析(KEGG pathway over-representation analysis,ORA

library(clusterProfiler)data(geneList, package="DOSE")gene <- names(geneList)[abs(geneList) > 2]
kk <- enrichKEGG(gene = gene, organism = 'hsa', pvalueCutoff = 0.05)head(kk)


2.KEGG通路基因集富集分析(KEGG pathway gene set enrichment analysis,GSEA)

##GSEA分析,所以geneList必须是降序排列的基因名kk2 <- gseKEGG(geneList     = geneList,               organism     = 'hsa',               minGSSize    = 120,               pvalueCutoff = 0.05,               verbose      = FALSE)head(kk2)

KEGG模块分析

KEGG 模块的优势:

  • 模块化: KEGG 模块聚焦于通路中的特定功能单元,而不是整个通路。这可以让你更精准地定位感兴趣的生物过程。

  • 人工定义: KEGG 模块由专家手工定义,确保了其准确性和生物学相关性。



1.KEGG模块富集分析(ORA

mkk <- enrichMKEGG(gene = gene,                   organism = 'hsa',                   pvalueCutoff = 1,                   qvalueCutoff = 1)head(mkk)           

2.KEGG模块基因集富集分析(GSEA

#GSEA分析,所以geneList必须是降序排列的基因名mkk2 <- gseMKEGG(geneList = geneList,                 organism = 'hsa',                 pvalueCutoff = 1)head(mkk2)

多个基因集的富集分析

上述所有的方法都是针对一组基因做的富集分析,如果有多组基因的话,如何批量做富集分析呢?clusterProfiler (version 3.0.4)包中提供了compareCluster函数。这个函数可以批量实现多个组别的富集分析,其方法可选择"groupGO", "enrichGO", "enrichKEGG", "enrichDO" or "enrichPathway" 之一。

#这里的gcSample是个列表
#这里的基因名通常为entrez gene id
data(gcSample)
xx <- compareCluster(gcSample, fun="enrichKEGG", organism="hsa", pvalueCutoff=0.05)summary(xx)# plot(xx, type="dot", caption="KEGG Enrichment Comparison")
#也可以使用公式来构建类似于列表的内容,进行富集分析
## formula interfacemydf <- data.frame(Entrez=c('1', '100', '1000', '100101467', '100127206', '100128071'), group = c('A', 'A', 'A', 'B', 'B', 'B'), othergroup = c('good', 'good', 'bad', 'bad', 'good', 'bad'))xx.formula <- compareCluster(Entrez~group, data=mydf, fun='groupGO', OrgDb='org.Hs.eg.db')summary(xx.formula)
## formula interface with more than one grouping variablexx.formula.twogroups <- compareCluster(Entrez~group+othergroup, data=mydf, fun='groupGO', OrgDb='org.Hs.eg.db')summary(xx.formula.twogroups)

全文总结

下面函数主要用于进行基因集或基因组的功能富集分析和通路富集分析。以下是它们之间的区别:

  1. GroupGO(): 该函数设计用于基于特定水平的GO分布进行基因分类。

  2. enrichGO(): 该函数用于进行单个基因列表的Gene Ontology(GO)富集分析,即确定输入的基因列表中是否显著富集了某些GO术语。

  3. gseGO(): 该函数用于进行GO富集分析,采用基因集富集分析(GSEA)方法,考虑基因之间的排序信息,以发现在基因列表中聚集的GO术语。

  4. enrichKEGG(): 该函数用于进行KEGG通路的富集分析,类似于enrichGO(),但针对的是KEGG数据库中的代谢通路、信号通路等信息。

  5. gseKEGG(): 该函数用于进行KEGG通路的基因集富集分析,类似于gseGO(),但是针对的是KEGG数据库中的通路信息。

  6. enrichMKEGG(): 该函数用于进行基于模块的KEGG通路富集分析,帮助用户识别代谢通路中的模块化结构,并进行富集分析。

  7. gseMKEGG(): 该函数用于进行基于模块的KEGG通路的基因集富集分析,类似于gseKEGG(),但专注于基于模块的富集分析。

  8. compareCluster:用于比较不同基因集群(cluster)之间的差异,可以帮助揭示不同生物条件下基因功能的差异性。

参考:https://yulab-smu.top/biomedical-knowledge-mining-book/clusterprofiler-kegg.htmlhttps://yulab-smu.top/biomedical-knowledge-mining-book/clusterprofiler-go.htmlhttps://rdocumentation.org/packages/clusterProfiler/versions/3.0.4


看完记得顺手点个“在看”哦!