写在前面
这个其实很简单啦!三个R包可以搞定的事情。
三个包分是:clusterProfiler,pathview,org.Hs.eg.db。
clusterProfiler,pathview两个包用于绘图,org.Hs.eg.db是用于clusterProfiler注释的人类的数据库。
先说安装,我这里是R-3.4.4的版本,用如下的安装方式,3.5+版本的请见官网哦:
source("https://bioconductor.org/biocLite.R")
biocLite("pathview")
library(pathview)
这里拿一个包举例子,其它请大家自己举一反三。要碎碎念一句,biocLite安装的时候包名是必须要有双引号的哦,执行library的时候就很随意啦,单引号,双引号,不加都OK。
开始分析
做差异基因的注释,只需要差异基因的entrez_ID。这一步用到的包是clusterProfiler和org.Hs.eg.db。
我的输入表格格式如图所示(数据都是随便编的,毕竟不能泄露真实数据):
>head(data)
Gene ABCDEF
ENSG00000067082.14100115108300303290
ENSG00000134852.1499101100700710690
ENSG00000125538.11300032003100100012001100
ENSG00000006831.920151510010595
ENSG00000285441.199101100700710690
ENSG00000141905.18300032003100100012001100
分析的命令如下:
library(clusterProfiler)
library(org.Hs.eg.db)
#Ensembl ID的后缀是版本号,分析的时候不需要,所以这里把后缀去掉,用包内的bitr函数将Ensembl ID转换为ENTREZIDdata[,1]
eg
genelist
#GO annotationgo
pvalueCutoff = 0.05, qvalueCutoff = 0.2,keyType = 'ENTREZID')
write.csv(go,"GO-All-enrich.csv",row.names =FALSE)
#KEGG annotationkegg
pAdjustMethod = 'BH', minGSSize = 10,maxGSSize = 500,
qvalueCutoff = 0.2,use_internal_data = FALSE)
write.csv(kegg,"KEGG-enrich.csv",row.names =FALSE)
脚本中enrichGO和enrichKEGG两个函数来完成GO和KEGG的富集分析。
enrichGO中的关注一下参数"ont",这个可以设置为"ALL", "CC", "BP", "MF"四者中的一种。因为GO的注释包含后三个种类。其它参数更改的话,请大家自己看包内的参数。这个主语句很简单啦请大家不要偷懒啦。
图形化展示
富集结果的图形化展示命令如下:
barplot(go,showCategory=20,drop=T,title = "EnrichmentGO",font.size = 10 )
dotplot(go,showCategory=20,title="EnrichmentGO_dot")
dotplot(kegg, showCategory=20,title="EnrichmentKEGG")
前两行是展示GO注释的结果,第三行展示KEGG的注释结果:
如果你们看到了黄色的区域,不要惊慌,不是系统的bug,是我出于自身考虑遮掉了哦。
题图展示的图片,是我自己根据结果加工过的(虽然也没有好看到哪里去)。如果只用于自己了解注释信息的话,直接用上面简单粗暴的语句生成图就好啦,我觉得也蛮好看的呢。柱状图展示GO富集结果点图展示KEGG富集结果
KEGG会富集到很多通路上,我们可以根据KEGG的注释结果导出每一个通路的图哦,图片大概长这样:
这是官网的图啦,我自己的只捕捉到了一两个基因,完全没有这么好看,还是给大家放标准结果。
这个时候需要导入包pathview啦,命令在这里:
上文中KEGG-enrich.csv的格式如下图,我们需要用到ID和geneID两列信息。
library(pathview)
pathview(gene.data = as.numeric(strsplit(as.character(test$geneID[1]),"/")[[1]]),
pathway.id = "04657", species = "hsa", kegg.native = T)
gene.data就是富集到这个通路中的geneID,因为我的表格里是斜杠分割的,所以我做了一下数据的提取,大家如果只有一列的,直接用就好了。
所有的命令行都是固定的,主要是把自己的数据转换为函数所需的格式。说到这里,就要结束啦。
参考资料