【R语言】——基因GO/KEGG富集分析!超级简单的保姆级教程!

这篇具有很好参考价值的文章主要介绍了【R语言】——基因GO/KEGG富集分析!超级简单的保姆级教程!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上期“干货预警——原来基因功能富集分析这么简单!”和“【R语言】——基因GO/KEGG功能富集结果可视化(保姆级教程)”介绍如何使用DAVID在线分析工具对基因进行GO/KEGG功能富集分析和使用R ggplot包对获得的基因GO/KEGG功能富集结果进行可视化。本期介绍使用R clusterProfiler包和R AnnotationHub包对基因进行GO/KEGG功能富集分析、OrgDb包制作以及结果可视化。

GO/KEGG功能富集分析中重要的是背景基因的选择,使用R clusterProfiler包对基因进行富集,需要导入目的基因(前景基因)相对应物种的参考基因组(背景基因),现阶段“bioconductor”已有十几种常见动物,如人类、小鼠等物种的OrgDb。但仍然有许多物种不在Bioconductor的OrgDb列表里,但存在参考基因组,如山羊,绵羊等,这种情况则需要用到R AnnotationHub包进行索引其对应物种的参考基因组,并制作OrgDb包使用。

1 数据准备

数据输入格式(xlsx格式):

go富集,功能富集分析,R语言,r语言,Powered by 金山文档

2 R包加载、数据导入及处理

#下载包#
if(!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("clusterProfiler") 
BiocManager::install("topGO") 
BiocManager::install("Rgraphviz") 
BiocManager::install("pathview") 
install.packages("ggplot2")
BiocManager::install('stringr')
install.packages("openxlsx")
#加载包#
library(clusterProfiler)
library(topGO)
library(Rgraphviz)
library(pathview)
library(ggplot2)
library(stringr)
library(openxlsx)
 
#导入数据#
remove(list = ls()) #清除 Global Environment
getwd()  #查看当前工作路径
setwd("C:/Rdata/jc")  #设置需要的工作路径
list.files()  #查看当前工作目录下的文件
data = read.xlsx("enrich-gene.xlsx",sheet= "enrich_genes",sep=',') #导入数据
head(data)
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
#数据处理-差异基因筛选#
vector = abs(data$log2FC) > 1 & data$PValue < 0.05 & data$gene_name !="" ##abs绝对值;通常logFC> 1和PValue< 0.05条件进行筛选;data$gene_name != ""表示gene_name不为空白
#data$gene_name<-str_to_title(data$gene_name)#用stringr将基因名称的第一个字母大写(小鼠首字母为大写)
data_sgni= data[vector,]#筛选差异基因
head(data_sgni)
#All_gene <- rownames(data) # 提取所有基因基因名
go富集,功能富集分析,R语言,r语言,Powered by 金山文档

3 背景基因选择及GO/KEGG富集分析

3.1 在“bioconductor”中已有OrgDb的物种的富集分析

在http://bioconductor.org/packages/release/BiocViews.html#___OrgDb 中寻找需要物种的OrgDb(目前仅有下图所示物种),以人类“org.Hs.eg.db”为例:

go富集,功能富集分析,R语言,r语言,Powered by 金山文档

图1 “bioconductor”中已有OrgDb的物种

#已有OrgDb的常见物种#
BiocManager::install("org.Hs.eg.db") 
library(org.Hs.eg.db)
#基因ID转换#
keytypes(org.Hs.eg.db) #查看所有可转化类型
entrezid_all = mapIds(x = org.Hs.eg.db,  #id转换的比对基因组(背景基因)的物种,以人为例
                      keys = data_sgni$gene_name, #将输入的gene_name列进行数据转换
                      keytype = "SYMBOL", #输入数据的类型
                      column = "ENTREZID")#输出数据的类型
entrezid_all  = na.omit(entrezid_all)  #na省略entrezid_all中不是一一对应的数据情况
entrezid_all = data.frame(entrezid_all) #将entrezid_all变成数据框格式
head(entrezid_all)
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
###GO富集分析###
GO_enrich = enrichGO(gene = entrezid_all[,1], #表示前景基因,即待富集的基因列表;[,1]表示对entrezid_all数据集的第1列进行处理
                     OrgDb = org.Hs.eg.db, 
                     keyType = "ENTREZID", #输入数据的类型
                     ont = "ALL", #可以输入CC/MF/BP/ALL
                     #universe = 背景数据集 # 表示背景基因,无参的物种选择组装出来的全部unigenes作为背景基因;有参背景基因则不需要。
                     pvalueCutoff = 1,qvalueCutoff = 1, #表示筛选的阈值,阈值设置太严格可导致筛选不到基因。可指定 1 以输出全部
                     readable = T) #是否将基因ID映射到基因名称。
GO_enrich  = data.frame(GO_enrich) #将GO_enrich导成数据框格式
#数据导出#
write.csv(GO_enrich,'C:/Rdata/保存文件/GO_enrich.csv') 
###KEGG富集分析###
KEGG_enrich = enrichKEGG(gene = entrezid_all[,1], #即待富集的基因列表
                         keyType = "kegg",
                         pAdjustMethod = 'fdr',  #指定p值校正方法
                         organism= "human",  #hsa,可根据你自己要研究的物种更改,可在https://www.kegg.jp/brite/br08611中寻找
                         qvalueCutoff = 1, #指定 p 值阈值(可指定 1 以输出全部)
                         pvalueCutoff=1) #指定 q 值阈值(可指定 1 以输出全部)
KEGG_enrich  = data.frame(KEGG_enrich)
write.csv(KEGG_enrich,'C:/Rdata/保存文件/KEGG_enrich.csv') #数据导出

3.2 使用“AnnotationHub”获取在线注释并创建OrgDb对象

如果你所研究的物种不在Bioconductor的OrgDb列表里,但存在参考基因组,如山羊(Capra hircus/goat/chx),绵羊(sheet/Ovis aries)等,这种情况则需要用到AnnotationHub函数进行索引其对应物种的参考基因组(背景基因),并制作OrgDb包使用。

注意:AnnotationHub包连接的Bioconductor数据库是实时更新的,所以需要用到的时候再在线查询和使用。

###制作可索引到物种的OrgDb包###
#下载和加载包#
BiocManager::install("AnnotationHub") 
BiocManager::install("AnnotationDbi")
BiocManager::install("rtracklayer")
library(AnnotationHub)
library(AnnotationDbi)
library(rtracklayer)
#索引与制作OrgDb#
hub <- AnnotationHub() #建立AnnotationHub对象保存到hub
query(hub, 'Capra hircus')  #查询包含山羊(Capra hircus)的物种信息;结果有物种的各类信息需要进一步筛选
query(hub[hub$rdataclass == "OrgDb"] , "Capra hircus") #筛选我们需要OrgDb类型;也可将上一步与这一步合并成query(hub,'org.Capra hircus')进行搜索
goat <- hub[['AH101444']]  #制作Capra hircus的OrgDb库;AH101444是Capra hircus对应的编号。
goat #查看goat
#help('select') 
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
#保存、载入与查看-AnnotationDbi#
saveDb(goat,file="goat.OrgDb") #把goat对象保存成goat.OrgDb文件
goat = loadDb(file="goat.OrgDb") #载入goat.OrgDb文件,保存到goat
length(keys(goat)) #查看包含的基因数量
columns(goat) #查看goat的数据类型
keys(goat, keytype = "SYMBOL") #查看SYMBOL数据集下的ID
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
# 查看AnnotationHub内容——根据自己兴趣了解#
#display(hub) #调出网页
#unique(hub$species) #查看hub里包含的所有物种
#unique(hub$rdataclass) #查看hub里的数据类型
#hub[hub$rdataclass == "OrgDb"] #查看hub里OrgDb类型的数据
#基因ID转换#
keytypes(goat) #查看所有可转化类型
entrezid_all = mapIds(x = goat,  #id转换的比对基因组(背景基因)所属物种,这边为山羊
                      keys = data_sgni$gene_name, #将输入的gene_name列进行数据转换
                      keytype = "SYMBOL", #输入数据的类型
                      column = "ENTREZID")#输出数据的类型
entrezid_all = na.omit(entrezid_all)  #na省略entrezid_all中不是一一对应的数据情况
entrezid_all = data.frame(entrezid_all) #将entrezid_all变成数据框格式
head(entrezid_all)
#GO富集分析#
GO_enrich = enrichGO(gene = entrezid_all[,1],  #待富集的基因列表
                      OrgDb = goat,  #指定物种的基因数据库,goat直接赋值给OrgDb参数即可
                      keyType = 'ENTREZID',  #输入数据的类型
                      ont = 'ALL',  #可指定 BP\MF\CC\ALL 
                      pAdjustMethod = 'fdr',  #指定 p 值校正方法
                      pvalueCutoff = 1,  #指定 p 值阈值(指定 1 以输出全部)
                      qvalueCutoff = 1,  #指定 q 值阈值(指定 1 以输出全部)
                      readable = FALSE)
GO_enrich = data.frame(GO_enrich)
write.csv(GO_enrich,'C:/Rdata/保存文件/GO_enrich.csv') #数据导出#
###KEGG富集分析###
KEGG_enrich = enrichKEGG(gene = entrezid_all[,1], #即待富集的基因列表
                         keyType = "kegg",
                         pAdjustMethod = 'fdr',  #指定p值校正方法
                         organism= "chx",  #山羊,可根据你自己要研究的物种更改,可在https://www.kegg.jp/brite/br08611中寻找
                         qvalueCutoff = 1, #指定 p 值阈值(可指定 1 以输出全部)
                         pvalueCutoff=1) #指定 q 值阈值(可指定 1 以输出全部)
KEGG_enrich  = data.frame(KEGG_enrich)
write.csv(KEGG_enrich,'C:/Rdata/保存文件/KEGG_enrich.csv') #数据导出
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
go富集,功能富集分析,R语言,r语言,Powered by 金山文档

输出的GO/KEGG富集结果各列内容:

ONTOLOGY:GO的BP(生物学过程)、CC(细胞组分)或MF(分子功能)三个方面内容;

ID:富集到的GO term/KEGG term;

Description:对GO term/KEGG term的生物学功能和意义进行描述;

GeneRatio:富集到该GO term/KEGG term中的基因数目/给定基因的总数目;

BgRatio:该GO term/KEGG term中背景基因总数目/该物种所有已知GO功能基因的数目;

pvalue、p.adjust和qvalue:p值、校正后p值和q值;

geneID和Count:富集到该GO term/KEGG term中的基因名称和数目。

4 GO/KEGG富集结果可视化

###GO/KEGG富集结果可视化###
#数据载入与处理#
install.packages("ggplot2")
library(ggplot2)
go_enrich = read.xlsx("enrich-gene.xlsx",sheet= "ONTOLOGY",sep=',')  
go_enrich$term <- paste(go_enrich$ID, go_enrich$Description, sep = ': ') #将ID与Description合并成新的一列
go_enrich$term <- factor(go_enrich$term, levels = go_enrich$term,ordered = T)
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
#纵向柱状图#
ggplot(go_enrich, 
       aes(x=term,y=Count, fill=ONTOLOGY)) + #x、y轴定义;根据ONTOLOGY填充颜色
  geom_bar(stat="identity", width=0.8) +  #柱状图宽度
  scale_fill_manual(values = c("#6666FF", "#33CC33", "#FF6666") ) +  #柱状图填充颜色
  facet_grid(ONTOLOGY~., scale = 'free_y', space = 'free_y')+
  coord_flip() +  #让柱状图变为纵向
  xlab("GO term") +  #x轴标签
  ylab("Gene_Number") +  #y轴标签
  labs(title = "GO Terms Enrich")+  #设置标题
  theme_bw()
#help(theme) #查阅这个函数其他具体格式
#横向柱状图#
ggplot(go_enrich, 
       aes(x=term,y=Count, fill=ONTOLOGY)) +  #x、y轴定义;根据ONTOLOGY填充颜色
  geom_bar(stat="identity", width=0.8) +  #柱状图宽度
  scale_fill_manual(values = c("#6666FF", "#33CC33", "#FF6666") ) + #柱状图填充颜色
  facet_grid(.~ONTOLOGY, scale = 'free_x', space = 'free_x')+
  xlab("GO term") + #x轴标签
  ylab("Gene_Number") +  #y轴标签
  labs(title = "GO Terms Enrich")+ #设置标题
  theme_bw() + 
  theme(axis.text.x=element_text(family="sans",face = "bold", color="gray50",angle = 70,vjust = 1, hjust = 1 )) #对字体样式、颜色、还有横坐标角度()
#气泡图#
ggplot(go_enrich,
       aes(y=term,x=Count))+
  geom_point(aes(size=Count,color=p.adjust))+
  facet_grid(ONTOLOGY~., scale = 'free_y', space = 'free_y')+
  scale_color_gradient(low = "red",high ="blue")+
  labs(color=expression(PValue,size="Count"), 
       x="Gene Ratio",y="GO term",title="GO Enrichment")+
  theme_bw()
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
go富集,功能富集分析,R语言,r语言,Powered by 金山文档
go富集,功能富集分析,R语言,r语言,Powered by 金山文档

图1 为GO富集结果图

KEGG富集结果与GO富集结果可视化类似可参考上一期“【R语言】——基因GO/KEGG功能富集结果可视化(保姆级教程)”内容。

好了本次分享就到这里,下期有更精彩内容,敬请期待。

关注“在打豆豆的小潘学长”公众号,发送“富集分析2”获得完整代码包和演示数据。文章来源地址https://www.toymoban.com/news/detail-786452.html

到了这里,关于【R语言】——基因GO/KEGG富集分析!超级简单的保姆级教程!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【生信简单文章复现】差异分析+WGCNA+功能富集分析+PPI网络+Hub基因验证

    目录 WGCNA简介 两个假设 一般步骤  数据准备 差异分析 参数解释 Limma包差异分析  WGCNA分析 构建基因共表达网络 模块与临床特征的相关性分析 GO富集分析 KEGG富集分析 PPI分析 验证关键基因   写在最后​​​​​​​ WGCNA简介 Weighted Gene Co-Expression Network Analysis,加权基因共

    2024年01月19日
    浏览(46)
  • ☞GO和KEGG富集倍数(Fold Enrichment)如何计算 enrich factor qvalue

    前面我们简单介绍过ggplot2画KEGG富集柱形图,其实GO富集结果的展示相对于KEGG来说要复杂一点点,因为GO又进一步可以划分成三个类。 BP:biological process,生物学过程。 MF:molecular function,分子功能。 CC:cellular component, 细胞成分。 因此在画图的时候,我们需要将这三类给区分开来。

    2024年02月06日
    浏览(39)
  • KEGG更新后富集分析的问题,包括下载包以及enrichKEGG和可视化

    运行以下代码出现报错,探究原因: 出现以下报错: 进行解决,查到第一个解决方法是把阈值降低,即将 pvalueCutoff = 0.01,qvalueCutoff = 0.05, 修改为: pvalueCutoff = 0.2,qvalueCutoff = 0.2, 但是依旧有以上报错,不断尝试网上的方法依然有问题,发现还是clusterProfiler包的问题,昨天在进

    2024年02月10日
    浏览(37)
  • Monocle2拟时基因富集分析

    ****Monocle2全部往期精彩系列 : 1、群成员专享:Monocle2更新(就是重新梳理一下) 2、一键跑完monocle2? 3、ggplot2个性可视化monocle2结果 4、ggplot修饰monocle2拟时热图:一众问题全部解决 5、Monocle2终极修改版 6、单细胞拟时分析:基因及通路随拟时表达变化趋势 Monocle2拟时分析及

    2024年02月08日
    浏览(35)
  • 生信学习之通路富集一(GO分析)

    富集分析 (Enrichment Analysis)是一种广泛应用于生物信息学研究的统计方法,主要用于检验一个基因集合中某些功能或特征的富集程度。富集分析的主要目的是从大量基因数据中找出有生物学意义的模式和功能。根据分析的目标和方法,富集分析可以分为以下几种类型: 基因

    2024年02月09日
    浏览(38)
  • GO富集绘图绘制方法,零基础教程,替换数据直接作图,完成版R语言脚本

    本期分享一个快速绘制GO富集结果图的方法,主要使用R语言tidyverse包,只需导入数据即可一步出图,可以自定义显示的数目、颜色、筛选参数, 从此以后绘制GO富集图只需1秒 。 下面是一个GO富集分析的结果数据表: ID:表示具体的GO条目 Description:GO条目的描述 RatioF:分子是

    2024年02月12日
    浏览(47)
  • 【Go语言】go_session(超级详细)

    国赛初赛有一道题目go session,用go的Gin框架和pongo2模板引擎写的,是关于go的pongo2模板注入和flask的热加载,当时看着一脸懵逼,现在再看突然豁然开朗。 主目录: route文件夹: main.go main.go主要是引入route文件里面的内容,并且设置路由 route.go 这是一个路由文件,使用了Gin框

    2024年02月12日
    浏览(34)
  • 02【保姆级】-GO语言开发注意事项(特色重点)

    之前我学过C、Java、Python语言时总结的经验: 先建立整体框架,然后再去抠细节。 先Know how,然后know why。 先做出来,然后再去一点点研究,才会事半功倍。 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。 对于GO语言,切记遵守语法格式规则。(例如python语言、例如

    2024年02月06日
    浏览(43)
  • 【Go语言】Golang保姆级入门教程 Go初学者chapter2

    setting的首选项 一个程序就是一个世界 变量是程序的基本组成单位 变量的使用步骤 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zuxG8imp-1691479164956)(https://cdn.staticaly.com/gh/hudiework/img@main/image-20230726152905139.png)] 变量表示内存中的一个存储区 注意:

    2024年02月14日
    浏览(129)
  • 【Go语言】Golang保姆级入门教程 Go初学者chapter3

    下划线“_”本身在Go中一个特殊的标识符,成为空标识符。可以代表任何其他的标识符,但是他对应的值就会被忽略 仅仅被作为站维度使用, 不能作为标识符使用 因为Go语言中没有private public 所以标记变量首字母大写代表其他包可以使用 小写就是不可使用的 注意:Go语言中

    2024年02月13日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包