R包 clusterProfiler 比较不同dataset富集
生物信息分析中,接触最多的莫过于基因富集分析,故在此基础上目前已经开发了很多种富集分析工具,如网页版的DAVID、KOBAS、GOEAST,WebGestalt,基迪奥平台等,本地版工具如TBtools,此外常用的R包有pathfindR、topGO、clusterProfiler等。在最后的报告中,我们通常会以各种图表的形式来展示富集的结果,常用的富集分析结果可视化的软件有REVIGO,GOView,WEGO,cytoscape插件BinGO,基迪奥富集分析动态展示等。
这些工具各有千秋,可是依然具有一定的局限性,就是完成分析后需要转换数据才能进行可视化。Y叔开发的clusterProfiler既可以轻松完成各种富集分析又可以傻瓜式出图,所以一直受到生信工作者的青睐。本文主要就是介绍这个R包,通过compareCluster
函数完成不同数据集的pathway富集结果的比较。
支持的功能
下面总结下clusterprofiler包的主要功能,参考资料在https://bioconductor.org/packages/release/bioc/vignettes/clusterProfiler/inst/doc/clusterProfiler.html
-
gene ID转换
支持orgdb的所有物种,以及orgdb所包含的所有gene ID种类 -
groupGO
函数来将列表中的基因根据相对于的gene ontology进行分类 -
enrichGO
函数来做gene ontology富集分析 -
gseGO
函数来做gene set enrichment analysis
为何要用gene set enrichment analysis呢?因为一般做differential expressed genes analysis找出的gene都是有着统计显著差别的单个基因,但是有些基因是属于同一类的(gene set),它们单个的变化并没有那么大,但是这同一类基因都发生了一些变化。这样,当做DEG分析的时候,找不出这些基因,但是gsea分析可以把这种差异找出来。
这里需要注意一个问题。用这个函数的时候,如果要得到典型的gsea的running enrichment score的图,则必须指定geneSetID。这就需要先找出现在已经富集了几个geneSet,然后一个接一个的画出。
-
enrichKEGG
函数来做基因的pathway富集分析 -
完善强大的可视化函数选择,包括了
barplot
,dotplot
,emapplot
,cnetplot
,gseaplot
,browseKEGG
-
compareCluster
用于比较不同gene list的gene ontology富集情况
一、常规富集分析
library(org.Hs.eg.db)
library(clusterProfiler)
library(ggplot2)
setwd("C:/Users/lenovo/Desktop")
a=read.table("testgeneid.txt",header = FALSE) # 读取输入文件,主要是基因名 gene symbol
gene=as.character(a[,1]) # 转换为字符
ego <- enrichGO(gene=gene,OrgDb='org.Hs.eg.db',keyType='SYMBOL',ont= "CC",pAdjustMethod="BH",pvalueCutoff = 0.01,qvalueCutoff = 0.05) #必须指定keytype,GO富集
ego <- enrichGO(gene=gene,OrgDb='org.Hs.eg.db',keyType='SYMBOL',ont= "ALL",pAdjustMethod="BH",pvalueCutoff = 0.01,qvalueCutoff = 0.05)
x <- enrichDO(gene = gene,
ont = "DO",
pvalueCutoff = 0.01,
pAdjustMethod = "BH",
universe = names(geneList),
minGSSize = 5,
maxGSSize = 500,
qvalueCutoff = 0.05,
readable = FALSE) # DO富集
write.csv(summary(ekk),"KEGG-enrich.csv",row.names =F)
write.csv(summary(ego),"GO-enrich.csv",row.names =F)
barplot(ego, showCategory=15,title="EnrichmentGO") #条形图
dotplot(ego,title="EnrichmentGO_dot") #气泡图
enrichMap(ego, vertex.label.cex=1.2, layout=igraph::layout.kamada.kawai) #网络图
plotGOgraph(ego) #go图
gene= bitr(gene, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")
kk <- enrichKEGG(gene$ENTREZID, organism="hsa",keyType = "kegg",pvalueCutoff=0.05, pAdjustMethod="BH",qvalueCutoff=0.1)
二、组间比较富集分析
接下来就是使用compareCluster比较两组基因富集结果,输入文件需要转换为gene id形式。
cp = list(a.gene=gene1$ENTREZID, b.gene=gene2$ENTREZID) # 合并两个数据集,并转换为列表
xx <- compareCluster(cp, fun="enrichKEGG", organism="hsa",
pvalueCutoff=0.01,pAdjustMethod = "BH",qvalueCutoff = 0.05)
dotplot(xx,showCategory=10,includeAll=TRUE)
还可以改变形状
p1 + aes(shape = GeneRatio > 0.3)
还可以改变颜色
xx <- compareCluster(cp,
fun="enrichGO",
OrgDb="org.Hs.eg.db",
ont= "BP",
pvalueCutoff=0.01,
pAdjustMethod = "BH",
qvalueCutoff = 0.05)
p2 <- p1 + scale_color_continuous(low="purple",high = "green")
常见报错
今天有朋友反应使用Y叔的clusterProfiler的enrichKEGG遇到了如下报错
之前KEGG出现了问题,Y叔连夜修代码,让clusterProfiler能够正常。
但是这次问题,真的不算是Y叔的锅了,这次是KEGG网站的证书过期了,导致R语言无法正常下载了。
那么咋办呢?
第一个方法,等!估计过几天就有人反馈了,然后就恢复正常了。
第二个方法,强制上!通过阅读clusterProfiler的文章,可以知道Y叔是通过参数clusterProfiler.download.method 来获取下载方式,默认是libcurl。 只要我们换成curl,并加上一个额外参数,就能强行下载了。
但是这一方法,我只在mac上测试过,Linux和windows不确定能不能行。
下面方法亲测可用
#将数据库的下载修改为auto的方式即可。[参考](https://mp.weixin.qq.com/s/nx50xXcPTMyLgoZ604xOHQ)
R.utils::setOption("clusterProfiler.download.method","auto")
参考:
https://www.jianshu.com/p/d9bb849bac80
https://www.jianshu.com/p/601631759291