生信数据分析——GO+KEGG富集分析

生信数据分析——GO+KEGG富集分析

目录

  • 生信数据分析——GO+KEGG富集分析
    • 1. 富集分析基础知识
    • 2. GO富集分析(Rstudio)
    • 3. KEGG富集分析(Rstudio)



1. 富集分析基础知识

1.1 为什么要做功能富集分析?
转录组学数据得到的基因非常多,面对大量的基因无法做到挨个研究其功能,因此为了研究基因所具有的功能,将部分功能相似的基因进行归类,这样具有相似功能的基因就被放在一起,构成了一个通路,从而减少工作量,并可以实现功能和表型相关联。

1.2 什么是富集分析?
富集分析是一种数据分析方法,主要用于理解基因集合或其他生物学实体在特定实验条件或生物学背景下的功能、通路或特定生物学过程的富集程度。其基本原理是,如果某个基因集合在特定条件下显著富集于某个功能类别或通路中,那么这些基因可能共同参与了某种特定的生物学过程或具有某种共同的功能特性

看上方的描述是不是感觉晦涩难懂,简单地说:所谓富集分析,本质上就是对分布的检验,如果基因分布集中在某一个区域(通路),则认为富集。

举个栗子: 做完差异后,得到了一堆差异基因,现在对这部分差异基因归归类,部分功能相似的基因可能被划分到了炎症通路上,有的基因被划分到了代谢通路上,这样就能大致知道筛选出来的差异基因与哪些功能相关。

1.3 富集分析有几种类型?

(1)GO富集分析
GO富集分析会从三个方面描述基因潜在的功能,分别是:

  • 分子功能(Molecular Function,MF)——即基因是否富集到分子相关的通路上
  • 细胞组分(Cellular Component,CC)——即基因定位在细胞的哪个位置上
  • 参与的生物过程(Biological Process,BP)——即基因参与哪些生物学过程

举个栗子:离子通道活性的GO term是GO:0005216,如果差异基因富集到该term上,那么所研究的基因可能与离子通道的激活与抑制有关联。

(2)KEGG富集分析
京都基因与基因组百科全书(KEGG)是了解高级功能和生物系统(如细胞、生物和生态系统)、用于研究通路的数据库之一。KEGG 通路分析是借助 KEGG 数据库(Kyoto Encyclopedia of Genes and Genomes),对所有鉴定到的基因进行通路注释,并分析这些基因参与的主要代谢和信号转导途径。

简单说: 使用KEGG数据库中通路的注释信息,将基因与已知的代谢通路和功能进行关联

(3)GSEA富集分析
(4)GSVA富集分析

在这个分析点中重点关注GO富集分析和KEGG富集分析,GSEA和GSVA会在后面分析点中介绍。



2. GO富集分析(Rstudio)

本项目以 ADAMTS2, ADAMTS4, AGRN, COL5A1, CTSB, FMOD, LAMB3, LAMB4, LOXL2, MATN1, MEP1A, MMP1, MMP2, NTN1, PTN, SPARCL1, SPON1, TGFBI, THBS4, TNC, VTN, ITGB6, PTPRF, UNC5A 为例展示GO富集分析过程
物种:人类(Homo sapiens)
R版本:4.2.2
R包:tidyverse,clusterProfiler,org.Hs.eg.db

废话不多说,代码如下:

设置工作空间:

rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./02_GO+KEGG_enrichment')){
  dir.create('./02_GO+KEGG_enrichment')
} # 判断该工作路径下是否存在名为02_GO+KEGG_enrichment的文件夹,如果不存在则创建,如果存在则pass
setwd('./02_GO+KEGG_enrichment/') # 设置路径到刚才新建的02_GO+KEGG_enrichment下

加载包:

library(clusterProfiler)
library(org.Hs.eg.db)
library(tidyverse)

导入要富集分析的基因

gene <- c('ADAMTS2', 'ADAMTS4', 'AGRN', 'COL5A1', 'CTSB', 'FMOD', 'LAMB3', 'LAMB4', 'LOXL2', 
'MATN1', 'MEP1A', 'MMP1', 'MMP2', 'NTN1', 'PTN', 'SPARCL1', 'SPON1', 'TGFBI', 'THBS4', 'TNC', 
'VTN', 'ITGB6', 'PTPRF', 'UNC5A')

设置数据库(注意:由于本项目分析的是人类基因,因此选用的是org.Hs.eg.db,如果是其他物种,需要用其他数据库

GO_database <- 'org.Hs.eg.db'  # GO是org.Hs.eg.db数据库

gene ID转换(因为导入的是基因名(symbol),但是用官方的编号,也就是ENTREZID会比较专业一些,因此首先要将基因名转换成官方ENTREZID

gene <- bitr(gene, fromType = 'SYMBOL', toType = 'ENTREZID', OrgDb = GO_database)

知识拓展: bitr函数不仅能将symbol转成ENTREZID,还能将ENTREZID转回symbol,甚至还能转换成其他形式,具体可以自行查看官方说明!

gene 如下图所示,第一列就是基因名(symbol),而第二列就是官方的ENTREZID编号

(注意:用bitr做转换的时候,很有可能会出现基因没有对应的ENTREZID编号,这是一个正常现象,不用过多焦虑,合理解释就行!)
在这里插入图片描述

GO富集分析并将富集分析结果转成数据框,enrichGO函数常用参数介绍如下

  • gene参数——是要输入的基因(一般用基因的ENTREZID编号)
  • OrgDb 参数——指定要用到的数据库,人类是:org.Hs.eg.db(当然还有别的物种,可自行查询)
  • keyType参数——设定读取的gene ID类型,本教程用的是ENTREZID编号所以用“ENTREZID”
  • ont参数——指定输出的通路类型,前面也说了GO富集分析会从bp,cc,mf三个层次描述基因的功能,这里用ALL就会直接包括这三个部分,当然也可以只指定一种类型。
  • pvalueCutoff 参数——设定p值阈值
  • qvalueCutoff 参数——设定q值阈值(这个q值就是矫正后的p值
  • readable参数——当readable设置为TRUE时,函数的输出会以一种更易于阅读和理解的方式呈现

enrichGO函数中比较关注的参数就是上述的这些,当然还有其他参数,如果想深入了解可自行查看官方说明文档

GO <- enrichGO(gene = gene$ENTREZID, # 导入基因的ENTREZID编号
               OrgDb = GO_database, # 用到的数据库(人类是:org.Hs.eg.db)
               keyType = "ENTREZID", # 设定读取的gene ID类型
               ont = "ALL", # (ont为ALL因此包括 Biological Process,Cellular Component,Mollecular Function三部分)
               pvalueCutoff = 0.5, # 设定p值阈值
               qvalueCutoff = 0.5, # 设定q值阈值
               readable = T)
go_res <- data.frame(GO) # 将GO结果转为数据框

go_res 如下图所示:

  • ONTOLOGY——指示该通路属于哪个类别,即生物过程(Biological Process, BP)、分子功能(Molecular Function, MF)还是细胞组分(Cellular Component, CC)
  • ID——这是GO通路的唯一标识符,用于在GO数据库中唯一地标识一个通路(可以理解成身份证)
  • Description——对通路的简单描述,通常通过这一列就得知该通路具有哪些功能
  • GeneRatio——是富集到该通路上的基因数量与所有输入到富集分析中的基因数量的比值。它反映了在特定基因集合中,与该通路相关的基因所占的比例。
  • BgRatio——是在整个背景数据集(通常是整个基因组或某个参考数据集)中,与该通路相关的基因数量与背景数据集中所有基因数量的比值。它反映了在整个基因组中,与该通路相关的基因所占的比例。
  • pvalue,p.adjust,qvalue——都是GO富集结果的显著性pvalue是常规p值,另外两个是调整后的p值,通常只需要pvalue < 0.05即可
  • geneID——是富集到该通路上的基因名
  • Count——是富集到该通路上的基因数目

在这里插入图片描述
go_res 添加新的一列——richFactor

  • RichFactor——是一个重要的指标,用于衡量差异表达的转录本中位于特定通路的转录本数目与所有有注释转录本中位于该通路的转录本总数的比值。

简单说:RichFactor越大,表示富集的程度越大,其评价富集的效果要比单纯的GeneRatio或Count要好

go_res <- mutate(go_res, richFactor = Count / as.numeric(sub("/\\d+", "", BgRatio)))

最后筛选p值显著的通路,并保存结果

go_res <- go_res[go_res$pvalue<0.05, ]

write.csv(go_res, file = "./GO_res.csv")

3. KEGG富集分析(Rstudio)

分析与GO类似,这里同样是从头开始展示

本项目以 ADAMTS2, ADAMTS4, AGRN, COL5A1, CTSB, FMOD, LAMB3, LAMB4, LOXL2, MATN1, MEP1A, MMP1, MMP2, NTN1, PTN, SPARCL1, SPON1, TGFBI, THBS4, TNC, VTN, ITGB6, PTPRF, UNC5A 为例展示GO富集分析过程
物种:人类(Homo sapiens)
R版本:4.2.2
R包:tidyverse,clusterProfiler,org.Hs.eg.db

设置工作空间:

rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./02_GO+KEGG_enrichment')){
  dir.create('./02_GO+KEGG_enrichment')
} # 判断该工作路径下是否存在名为02_GO+KEGG_enrichment的文件夹,如果不存在则创建,如果存在则pass
setwd('./02_GO+KEGG_enrichment/') # 设置路径到刚才新建的02_GO+KEGG_enrichment下

加载包:

library(clusterProfiler)
library(org.Hs.eg.db)
library(tidyverse)

导入要富集分析的基因

gene <- c('ADAMTS2', 'ADAMTS4', 'AGRN', 'COL5A1', 'CTSB', 'FMOD', 'LAMB3', 'LAMB4', 'LOXL2', 
'MATN1', 'MEP1A', 'MMP1', 'MMP2', 'NTN1', 'PTN', 'SPARCL1', 'SPON1', 'TGFBI', 'THBS4', 'TNC', 
'VTN', 'ITGB6', 'PTPRF', 'UNC5A')

设置数据库(注意:这里和前面区别就在于要指定KEGG数据库,即hsa(人种)

GO_database <- 'org.Hs.eg.db'  # GO是org.Hs.eg.db数据库
KEGG_database <- 'hsa' # KEGG是hsa数据库

同样是gene ID转换

gene <- bitr(gene, fromType = 'SYMBOL', toType = 'ENTREZID', OrgDb = GO_database)

gene 如下图所示,第一列就是基因名(symbol),而第二列就是官方的ENTREZID编号
在这里插入图片描述
接下来就是KEGG富集分析,enrichGO函数常用参数介绍如下

  • gene参数——是要输入的基因(一般用基因的ENTREZID编号)
  • keyType参数——指定了基因ID的类型,用于匹配KEGG数据库中的条目
  • organism参数——指定了进行富集分析的目标物种的KEGG数据库,由于基因用的是人类的,所以前面设置的“hsa”。
  • pAdjustMethod参数——指定了用于调整p值的统计方法,以控制假阳性率
  • pvalueCutoff 参数——设定p值阈值
  • qvalueCutoff 参数——设定q值阈值(这个q值就是矫正后的p值
KEGG <- enrichKEGG(gene = gene$ENTREZID,
                   keyType = "kegg",
                   organism = KEGG_database,
                   pAdjustMethod = "BH",
                   pvalueCutoff = 0.5,
                   qvalueCutoff = 0.5)

KEGG 如下图所示,是一个列表,里面在这里比较重要的是gene那里,可以看到那里不是常规的基因名,因此不能直接将KEGG的结果转换成数据框,多了一个基因ID转换的过程。
在这里插入图片描述
将KEGG结果中基因ID转成基因名,之后将KEGG结果转成数据框

kegg_res <- setReadable(KEGG, OrgDb = org.Hs.eg.db, keyType="ENTREZID")
kegg_res <- data.frame(kegg_res)

kegg_res 结果如下图所示:

  • ID——这是KEGG通路的唯一标识符,用于在KEGG数据库中唯一地标识一个通路(可以理解成身份证)
  • Description——对通路的简单描述,通常通过这一列就得知该通路具有哪些功能
  • GeneRatio——是富集到该通路上的基因数量与所有输入到富集分析中的基因数量的比值。它反映了在特定基因集合中,与该通路相关的基因所占的比例。
  • BgRatio——是在整个背景数据集(通常是整个基因组或某个参考数据集)中,与该通路相关的基因数量与背景数据集中所有基因数量的比值。它反映了在整个基因组中,与该通路相关的基因所占的比例。
  • pvalue,p.adjust,qvalue——都是GO富集结果的显著性pvalue是常规p值,另外两个是调整后的p值,通常只需要pvalue < 0.05即可
  • geneID——是富集到该通路上的基因名
  • Count——是富集到该通路上的基因数目

在这里插入图片描述
同样给kegg_res 添加新的一列——richFactor

kegg_res <- mutate(kegg_res , richFactor = Count / as.numeric(sub("/\\d+", "", BgRatio)))

最后筛选p值显著的通路,并保存结果

kegg_res <- kegg_res [kegg_res $pvalue<0.05, ]

write.csv(kegg_res , file = "./KEGG_res.csv")


结语:

以上就是GO+KEGG富集分析的所有过程,如果有什么需要补充或不懂的地方,大家可以私聊我或者在下方评论。

如果觉得本教程对你有所帮助,点赞关注不迷路!!!


  • 目录部分跳转链接:零基础入门生信数据分析——导读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中将字符串的指定部分赋值给另一个字符串

正如标题所示&#xff0c;不说废话&#xff0c;直接上代码&#xff1a; public class test{public static void main(String[] args) {String str1 "我真的会谢谢你";/*原则是左闭右开&#xff0c;左边是起始下标&#xff0c;右边是终止下标字符串的下标是从0开始*…

【微服务】软件架构的演变之路

目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速&#xff0c;网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布…

python opencv之提取轮廓并拟合圆

图片存储地址为&#xff1a;C:\Users\Pictures\test.png&#xff0c;该图像图片背景是黑色的&#xff0c;目标区域是亮的&#xff0c;目标区域是两段圆弧和两段曲线构成的封闭区域&#xff0c;其中两段圆弧属于同一个圆&#xff0c;但在目标区域的相对位置&#xff0c;也就是不…

SSTI模板注入(jinja2)

前面学习了SSTI中的smarty类型&#xff0c;今天学习了Jinja2&#xff0c;两种类型都是flask框架的&#xff0c;但是在注入的语法上还是有不同 SSTI&#xff1a;服务器端模板注入&#xff0c;也属于一种注入类型。与sql注入类似&#xff0c;也是通过凭借进行命令的执行&#xff…

硬件RAID横评(上)

正文共&#xff1a;3857字 50图&#xff0c;预估阅读时间&#xff1a;12 分钟 之前误打误撞测试了软件RAID&#xff08;Windows下软RAID测试&#xff09;&#xff0c;发现性能基本上是线性的&#xff0c;而据说硬件RAID性能比这个高的很。那本文将就硬件RAID展开测试&#xff0…

Flutter 开发学习笔记(2):第一个简单的Flutter项目(下)

文章目录 前言官方Flutter案例侧边栏添加代码初始化展示效果 子组件私有数据空间导航栏转为有状态WidgetsetState手动转换页面实现效果 响应式动态切换宽度添加收藏夹&#xff0c;跨Widget传数据实现效果 完整代码后续进阶效果总结 前言 接着继续上一章的内容 官方Flutter案例…

Java复习第十四天学习笔记(CSS),附有道云笔记链接

【有道云笔记】十四 3.30 CSS https://note.youdao.com/s/3VormGXs 一、CSS定义和基本选择器 CSS定义&#xff1a;cascading style sheet 层叠样式表。 语法&#xff1a; 选择器 { 属性名1:属性值1; 属性名2:属性值2; 属性名3:属性值3; 属性名4:属性值4; } CSS使用&a…

蓝桥杯算法练习

输入1010124214 北京 12421565 上海 sdafasdg213 天津 fasdfga124 北京 145252 上海 235wtdfsg 济南 3242356fgdfsg 成都 23423 武汉 23423565f 沈阳 1245dfwfs 成都输出北京 2 10124214 fasdfga124 上海 2 12421565 145252 天津 1 sdafasdg213 济南 1 235wtdfsg 成都 2 3242…

搜索与图论——Dijkstra算法求最短路

最短路算法 稠密图与稀疏图 n为点数&#xff0c;m为边数。m远小于n的平方为稀疏图&#xff0c;m接近n的平方为稠密图。 稀疏图用邻接表存&#xff0c;稠密图用邻接矩阵存 朴素版dijkstra时间复杂度为O(n^2),对于稠密图可以ac&#xff0c;但遇到稀疏图时会TLE。 dijkstra函数实…

vlanif三层交换机实现不同网络通信

实验目的&#xff1a;通过三层交换机实现不同 网络通信&#xff0c;之前都是路由器进行不同网络转发 拓扑图 内容&#xff1a;左边vlan10&#xff0c;右边vlan20 lsw1接口通过所有vlan lsw2网路vlan10 lsw3网络vlan20 问题点&#xff1a;开始只是配置了最上面LSW1的交换机…

基于boost准标准库的搜索引擎项目

零 项目背景/原理/技术栈 1.介绍boost准标准库 2.项目实现效果 3.搜索引擎宏观架构图 这是一个基于Web的搜索服务架构 该架构优点: 客户端-服务器模型&#xff1a;采用了经典的客户端-服务器模型&#xff0c;用户通过客户端与服务器交互&#xff0c;有助于集中管理和分散计算…

011——人体感应模块驱动开发(SR501)

目录 一、 模块简介 二、 工作原理 三、 软件及验证 一、 模块简介 人体都有恒定的体温&#xff0c;一般在 37 度&#xff0c;所以会发出特定波长 10uM 左右的红外线&#xff0c;被动式红外探头就是靠探测人体发射的 10uM 左右的红外线而进行工作的。 人体发射的 10…

<TensorFlow学习使用P1>——《TensorFlow教程》

一、TensorFlow概述 前言&#xff1a; 本文中一些TensorFlow综合案例的代码逻辑一般正常&#xff0c;在本地均可运行。如有代码复现运行失败&#xff0c;原因如下&#xff1a; &#xff08;1&#xff09;运行环境配置可能有误。 &#xff08;2&#xff09;由于一些数据集存储空…

docker-compose安装jenkins

1、环境准备&#xff1a;准备安装好docker的服务器一台 2、在服务器上创建一个目录用于安装Jenkins mkdir jenkins3、下载好要挂载的&#xff1a;maven、jkd&#xff1b;并将下载好的tar.gz包上传至服务器待安装目录中并解压 tar -xzvf tar -xzvf apache-maven-3.9.6-bin.tar…

连接Redis不支持集群错误,ERR This instance has cluster support disabled,解决方案

1. 问题背景 调整redis的配置后&#xff0c;启动程序时&#xff0c; 会报如下错误&#xff1a; [redis://172.16.0.8xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster supp…

day01-SpringCloud01(Eureka、Ribbon、Nacos)

视频地址: SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务 学习资料地址: 百度网盘 提取码&#xff1a;1234 1. 认识微服务 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#x…

应急响应靶机训练-Linux2题解

前言 接上文&#xff0c;应急响应靶机训练Linux2 靶机地址&#xff1a;应急响应靶机-Linux(2) 题解 登录虚拟机&#xff1a; 修改面板密码 提交攻击者IP 答案&#xff1a;192.168.20.1 查看宝塔日志即可 用的net直接是网关 提交攻击者修改的管理员密码(明文) 答案&…

搜索与图论——Kruskal算法求最小生成树

kruskal算法相比prim算法思路简单&#xff0c;不用处理边界问题&#xff0c;不用堆优化&#xff0c;所以一般稀疏图都用Kruskal。 Kruskal算法时间复杂度O(mlogm) 每条边存结构体里&#xff0c;排序需要在结构体里重载小于号 判断a&#xff0c;b点是否连通以及将点假如集合中…

C# 微软官方学习文档

链接&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/csharp/ 在C#的学习过程中&#xff0c;我们可以参考微软官方的学习文档。它是一个免费的学习平台&#xff0c;提供了丰富的C#学习路径和教程&#xff08;如下图&#xff09;&#xff0c;对我们入门到高级应用开发都…

2024年京东云主机租用价格_京东云服务器优惠价格表

2024年京东云服务器优惠价格表&#xff0c;轻量云主机优惠价格5.8元1个月、轻量云主机2C2G3M价格50元一年、196元三年&#xff0c;2C4G5M轻量云主机165元一年&#xff0c;4核8G5M云主机880元一年&#xff0c;游戏联机服务器4C16G配置26元1个月、4C32G价格65元1个月、8核32G费用…