clusterProfiler 的 GO/KEGG 富集分析用法小结

以下文…

大家好,又见面了,我是你们的朋友全栈君。

以下文章来源于简书,作者 biobin,文章已获原作者授权。

前言

关于
clusterProfiler这个 R 包就不介绍了,网红教授宣传得很成功,功能也比较强大,主要是做 GO 和 KEGG 的功能富集及其可视化。简单总结下用法,以后用时可直接找来用。

首先考虑一个问题:
clusterProfiler做 GO 和 KEGG 富集分析的注释信息来自哪里?

GO 的注释信息来自 Bioconductor,提供了19个物种的 org 类型的 GO 注释信息,如下表所示。Bioconductor 中更多的注释包可参考下面这个链接,很乱,大多数我都不知道干啥用的。

  • http : //w ww.bioconductor.org/packages/release/data/annotation/
b5c563d0-7471-490e-b492-cb7a90945ea5.png

KEGG 的注释信息
clusterProfiler通过 KEGG 数据库的 API 来获取,
https://www.kegg.jp/kegg/rest/keggapi.html

首先是一个物种所有基因对应的 pathway 注释文件,比如人的:http://rest.kegg.jp/link/hsa/pathway

其次还需要 pathway 的描述信息,比如人的:http://rest.kegg.jp/list/pathway/hsa

关于 KEGG 数据库全部的物种及其简写(三个字母)如下列表(部分截图):

4fdeb8b5-6cbc-40fc-8269-1bbdafa28216.png
https://www.genome.jp/kegg/catalog/org_list.html

因此对于以上已有 pathway 注释的物种,只需要将物种简写输入给clusterProfiler, 它会通过联网自动获取该物种的 pathway 注释信息。

以上都是有物种信息的情况,那么对于无物种信息的项目怎么办?

GO 可以通过读取外部的 GO 注释文件进行分析。关于基因的 GO 注释,interproscaneggnog-mapperblas2go等软件都可以做,不过输出格式有些不同。clusterProfiler需要导入的 GO 注释文件的格式如下:

feea5ac3-fdc8-48ef-aab6-e3d6b5a6bb2b.png

需要包含以上三列信息,这 3 列信息任意顺序都可。

clusterProfiler包只针对含有 OrgDb 对象,如果是公共数据库中有该物种注释信息,只是未制作成 org.db 数据库(标准注释库),则可以不需要从头注释,只需手动制作 org.db 数据库类型,完成后直接使用即可,代码如下:

source("https://bioconductor.org/biocLite.R")
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")

BiocManager::install("AnnotationHub"# 一个包含大量注释信息的数据库,里面有很多物种及来源于很多数据库的注释信息。
BiocManager::install("biomaRt")

library(AnnotationHub) 
library(biomaRt)

hub <- AnnotationHub() # 建立AnnotationHub对象(视人品,网不行加载不了)
# unique(hub$species) # 查看AnonotationHub里面物种
hub$species[which(hub$species=="Solanum")] # 看AnonotationHub里是否包含想要的物种
# Solanum是番茄的拉丁名
query(hub, "Solanum")  # 查看该物种信息
hub[hub$species=="Solanum" & hub$rdataclass == "OrgDb"# OrgDb属于rdataclass中,因此查看下该物种有没有OrgDb
Solanum.OrgDb <- hub[["AH59087"]] # AH59087是番茄对应的编号
# 制作为标准注释库,就可和模式生物一样使用了

同样地,对于 pathway 数据库中没有的物种,也支持读取基因的 pathway 注释文件,然后进行分析,注释文件的格式如下:

be7260ed-3e6d-48b7-8df7-9133681ac8bf.png
以上三列信息的顺序也是任意的

富集分析

通常用的富集分析有 ORA、FCS 和拓扑三种方法。ORA 简单来说就是超几何检验或 Fisher 精确检验,大同小异,都符合超几何检验,这也是目前用的最多的方法,优劣不谈。FCS 的代表就是 GSEA,即基因集富集分析,优劣亦不谈。clusterProfiler提供了这两种富集分析方法。

1. ORA(Over-Representation Analysis)

GO 富集参考代码:

#标准富集分析
ego <- enrichGO(
          gene  = gene$entrzID,
          keyType = "ENTREZID"
          universe = names(geneList), #背景基因集,可省
          OrgDb   = org.Hs.eg.db,
          ont     = "CC",
          pAdjustMethod = "BH",
          pvalueCutoff  = 0.01,
          qvalueCutoff  = 0.05,
          readable      = TRUE)

#通过导入外部注释文件富集分析
data <- read.table("go_annotation.txt",header = T,sep = "\t")
go2gene <- data[, c(21)]
go2name <- data[, c(23)]
x <- enricher(gene,TERM2GENE = go2gene,TERM2NAME = go2name)

一些参数说明:

  • gene:差异基因对应的向量;

  • keyType:指定基因ID的类型,默认为 ENTREZID, 可参考keytypes(org.Hs.eg.db)类型 ;

  • OrgDb:指定该物种对应的 org 包的名字;

  • ont:代表 GO 的 3 大类别,BP,CC,MF,也可是全部 ALL;

  • pAdjustMethod:指定多重假设检验矫正的方法,有"holm""hochberg""hommel""bonferroni""BH""BY""fdr""none"中的一种;

  • cufoff:指定对应的阈值;

  • readable=TRUE:代表将基因 ID 转换为 gene symbol。

KEGG Pathway 富集参考代码:


    
    
    #标准富集分析
 
     
     
     
ego <- enrichKEGG(
          gene = gene,
          keyType =  "kegg",
          organism  =  'hsa',
          pvalueCutoff  =  0.05,
          pAdjustMethod  =  "BH",
          qvalueCutoff  =  0.05
)


#通过外部导入注释文件富集
data <- read.table( "pathway_annotation.txt",header =  T,sep =  "\t")
go2gene <- data[, c( 21)]
go2name <- data[, c( 23)]
x <- enricher(gene,TERM2GENE = go2gene,TERM2NAME = go2name)
  • 默认基因 ID 为 kegg gene id,也可以是 ncbi-geneid,ncbi-proteinid,uniprot 等。

  • organism 物种对应的三字母缩写,其他参数同 GO 富集。

ID 转换函数:

library(clusterProfiler)
bitr_kegg("1",fromType = "kegg",toType = 'ncbi-proteinid',organism='hsa')

library(org.Hs.eg.db)
keytypes(org.Hs.eg.db) #支持的ID类型
bitr(gene, fromType = "ENTREZID", toType = c("ENSEMBL""SYMBOL"), OrgDb = org.Hs.eg.db)

#以上看出ID转换输入时,可以向量的形式,也可以单列基因名list导入,也可以是内置数据
gene <- c("AASDH","ABCB11","ADAM12","ADAMTS16","ADAMTS18")
gene  <-  data$V1 #字符串

data(geneList, package="DOSE"#富集分析的背景基因集
gene <- names(geneList)[abs(geneList) > 2]

2. GSEA(Gene Set Enrichment Analysis)

GO 富集参考代码:

#标准富集分析
ego <- gseGO(
      geneList  = geneList,
      OrgDb  = org.Hs.eg.db,
      ont  = "CC",
      nPerm  = 1000,  #置换检验的置换次数
      minGSSize  = 100,
      maxGSSize  = 500,
      pvalueCutoff = 0.05,
      verbose  = FALSE)

#通过导入外部注释文件富集分析参考代码:
data <- read.table("go_annotation.txt",header = T,sep = "\t")
go2gene <- data[, c(21)]
go2name <- data[, c(23)]
x <- GSEA(gene,TERM2GENE = go2gene,TERM2NAME = go2name)

KEGG Pathway 富集参考代码:

#标准富集分析
kk <- gseKEGG(
  geneList  = gene,
  keyType  = 'kegg',
  organism = 'hsa',
  nPerm  = 1000,
  minGSSize = 10,
  maxGSSize = 500,
  pvalueCutoff = 0.05,
  pAdjustMethod     = "BH"
)

#通过外部导入注释文件富集
data <- read.table("pathway_annotation.txt",header = T,sep = "\t")
go2gene <- data[, c(21)]
go2name <- data[, c(23)]
x <- GSEA(gene,TERM2GENE = go2gene,TERM2NAME = go2name)

可视化

1. GO 富集分析结果可视化

#barplot
barplot(ego, showCategory = 10#默认展示显著富集的top10个,即p.adjust最小的10个

#dotplot
dotplot(ego, showCategory = 10)

#DAG有向无环图
plotGOgraph(ego)  #矩形代表富集到的top10个GO terms, 颜色从黄色过滤到红色,对应p值从大到小。

#igraph布局的DAG
goplot(ego)

#GO terms关系网络图(通过差异基因关联)
emapplot(ego, showCategory = 30)

#GO term与差异基因关系网络图
cnetplot(ego, showCategory = 5)

2. Pathway 富集分析结果可视化

#barplot
barplot(kk, showCategory = 10)

#dotplot
dotplot(kk, showCategory = 10)

#pathway关系网络图(通过差异基因关联)
emapplot(kk,  showCategory = 30)

#pathway与差异基因关系网络图
cnetplot(kk, showCategory = 5)

#pathway映射
browseKEGG(kk, "hsa04934"#在pathway通路图上标记富集到的基因,会链接到KEGG官网

37d557c2-de67-42ed-9e8d-88c5d913b202.png — END—

78f65bae-78bc-42a1-a2a7-3e6e873edba5.png

2c951972-8433-4dba-8c1e-7e47ad25f9d0.gif 戳原文,更有料!

本文分享自微信公众号 – 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126088.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SplitContainer容器控件左右Panel大小调整「建议收藏」

    SplitContainer容器控件左右Panel大小调整「建议收藏」1、新建一个Winform窗体,从上图中选择SplitContainer空间,拖拽到Form到上,如下图:2、你会发现,随便点击Panel1或者Panel2,会显示出粗框,但怎么调整两个Panel的大小呢?两个Panel之间的那条线,是选不中的,哈哈,不信可以试试。那么如何才能调整两个Form的大小呢?==》随便单击一个Panel,再按一下Esc,会出现下图:这时,

    2022年7月18日
    95
  • JavaScript字符串截取

    JavaScript字符串截取一、常用方法说明1.substr2.substring3.slice二、举例说明1.substr2.substring3.slice

    2022年6月13日
    27
  • pycharm绘制图形_pycharm安装后无解释器

    pycharm绘制图形_pycharm安装后无解释器importnumpyasnpimportmatplotlib.pyplotaspltdefmain():#线的绘制x=np.linspace(-np.pi,np.pi,256,endpoint=True)c,s=np.cos(x),np.sin(x)#绘制plt.figure(1)#自变量…

    2022年8月28日
    7
  • Codeforces 456 A. Laptops「建议收藏」

    Codeforces 456 A. Laptops「建议收藏」题目链接:http://codeforces.com/contest/456/problem/A提示:一共有n个数,而且a[i],b[i]都<=n;所以我们只需要找当a!=b的时候就行了,代码如下:#include<cstdio>#include<iostream>#include&l…

    2022年10月10日
    1
  • 计算机中位数求和方法总结例题,众数与中位数典型例题「建议收藏」

    计算机中位数求和方法总结例题,众数与中位数典型例题「建议收藏」《众数与中位数典型例题》由会员分享,可在线阅读,更多相关《众数与中位数典型例题(3页珍藏版)》请在人人文库网上搜索。1、典型例题例1求下列数据的众数(1)3,2,5,3,1,2,3(2)5,2,1,5,3,5,2,2分析:一组数据的众数不一定唯一,因此,如果一组数据中有几个数据重复的次数相同,并且次数是最高的,那么这几个数据都是这组数据的众数解:(1)众数是3(2)众数是5和2说明:众数是一组数…

    2022年9月15日
    2
  • pycharm安装中文包为什么老是失败_安卓安装包格式

    pycharm安装中文包为什么老是失败_安卓安装包格式PyCharm版本:PyCharm2020.21.打开PyCharm进入File->Settings…2.找到Plugins并点击(挥着在搜索框输入Plugins并选择Plugins菜单)3.在Marketplace的搜索框输入chinese4.可以看到Chinese(Simplified)LanguagePackEAP安装包,点击Install安装5.等待安装完成,点击RestartIDE重启IDE窗口6.选择Re

    2022年8月28日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号