首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据挖掘—KEGG/GO分析中的富集因子、P值等概念理解

数据挖掘—KEGG/GO分析中的富集因子、P值等概念理解

原创
作者头像
sheldor没耳朵
发布于 2025-05-07 03:47:42
发布于 2025-05-07 03:47:42
7990
举报
文章被收录于专栏:数据挖掘数据挖掘

数据挖掘—KEGG/GO分析中的富集因子、P值等概念理解

基于这样的问题探究

1.概念理解

clusterProfiler 的结果表中没有直接显示富集因子enrichmentFactor,但是可以自己计算。首先还是辨析下,bgRatio(背景比例)、geneRatio(基因比例)和富集因子三个不同的指标

  1. bgRatio(背景比例)
    • 这个指标表示在背景基因集中(即整个基因组或研究中考虑的所有基因),属于特定GO条目的基因所占的比例。
    • 计算公式为:bgRatio=背景基因集的总基因数背景基因集中属于该GO条目的基因数
    • 它反映了在没有特定条件下(如差异表达),某个GO条目在基因集中的普遍性。
  2. geneRatio(基因比例)
    • 这个指标表示在差异表达基因集中,属于特定GO条目的基因所占的比例。
    • 计算公式为:geneRatio=差异表达基因集的总基因数差异表达基因集中属于该GO条目的基因数
    • 它反映了在特定条件下(如差异表达),某个GO条目在基因集中的富集程度。
  3. 富集因子(Enrichment Factor)
    • 富集因子是基因比例与背景比例的比值,用于衡量特定GO条目在差异表达基因集中相对于背景基因集的富集程度。
    • 计算公式为:Enrichment Factor=bgRatio/geneRatio
    • 如果富集因子大于1,表示该GO条目在差异表达基因集中富集;如果小于1,表示该GO条目在差异表达基因集中不富集。

2.问:为什么可以直接根据P值选top terms?

以KEGG为例,额外计算下enrichmentFactor,并作图展示enrichmentFactor与p值的关系

富集分析

代码语言:r
AI代码解释
复制
my_KEGG <- function(target_genes, species = "human", pvalue_cutoff = 1, qvalue_cutoff = 1) {
  # 根据物种选择相应的参数
  if (species == "human") {
    organism <- "hsa"
    OrgDb <- org.Hs.eg.db
  } else if (species == "mouse") {
    organism <- "mmu"
    OrgDb <- org.Mm.eg.db
  } else if (species == "rat") {
    organism <- "rno"
    OrgDb <- org.Rn.eg.db
  } else {
    stop("Unsupported species. Please choose 'human', 'mouse', or 'rat'.")
  }
  
  # 将基因符号转换为ENTREZ ID,并去除缺失值
  target_entrez <- as.character(na.omit(AnnotationDbi::select(
    OrgDb,
    keys = target_genes,
    columns = "ENTREZID",
    keytype = "SYMBOL"
  )[, 2]))
  
  # 打印转换后的基因数量
  message("转换后的基因数量: ", length(target_entrez))
  message("pvalue_cutoff: ", pvalue_cutoff)
  message("qvalue_cutoff: ", qvalue_cutoff)
  
  # 进行KEGG富集分析
  kk <- enrichKEGG(
    gene          = target_entrez,
    organism      = organism,
    pvalueCutoff  = pvalue_cutoff,
    qvalueCutoff  = qvalue_cutoff
  )
  
  # 将结果设置为可读形式
  kk <- setReadable(kk, OrgDb = OrgDb, keyType = "ENTREZID")
  
  # 返回结果
  return(kk)
}


kk <- my_KEGG(Target_all)
kk_result <- kk@result

计算enrichmentFactor,可见enrichmentFactor全是>1的

代码语言:r
AI代码解释
复制
# 解析 GeneRatio 和 BgRatio 字段为数值
kk_result$GeneRatio_num <- sapply(kk_result$GeneRatio, function(x) {
    eval(parse(text = x))  # 比如 "15/150" -> 0.1
})
kk_result$BgRatio_num <- sapply(kk_result$BgRatio, function(x) {
    eval(parse(text = x))  # 比如 "100/2000" -> 0.05
  })
  
# 计算富集因子并添加为新列
kk_result$enrichmentFactor <- kk_result$GeneRatio_num / kk_result$BgRatio_num
kk_result$GeneRatio_num <- NULL
kk_result$BgRatio_num <- NULL

table(kk_result$enrichmentFactor>1)
 #TRUE 
 #160 
table(kk_result$p.adjust < 0.05)
 #FALSE  TRUE 
 # 57   103 

可视化比较

代码语言:r
AI代码解释
复制
#可视化
library(ggplot2)
# 添加 -log10(p.adjust) 列
kk_result$logP <- -log10(kk_result$p.adjust)
  
# 绘制散点图
ggplot(kk_result, aes(x = enrichmentFactor,y = logP)) +
    geom_point(aes(size = Count, color = logP)) +
    scale_color_gradient(low = "blue", high = "red") +
    labs(
      title = "Enrichment Factor vs -log10(p.adjust)",
      x = "Enrichment Factor",
      y = "-log10(Adjusted p-value)",
      color = "-log10(p.adjust)",
      size = "Gene Count"
    ) +
    theme_minimal()

可见enrichmentFactor和-log10(kk_result$p.adjust)是正相关的,这就可以说明为什么直接根据P值选top terms了

3.猜想:有没有可能富集分析出来的结果enrichmentFactor全是>1的?

使用clusterProfiler富集分析的结果会不会全是enrichmentFactor>1的结果,即指保留了GeneRatio > BgRatio的结果。以下是chatgpt的回答,这个还需要找其他的数据验证,但是感觉大概率是这样的。

<img src="/Users/tianfu/Library/Application Support/typora-user-images/image-20250507113836696.png" alt="image-20250507113836696" style="zoom:40%;" />

4.感谢

综上,直接根据P值选top terms是可行的,而无需关注enrichmentFactor

额外感谢下群里一起讨论的小伙伴,不管是问问题还是回答问题的,总是会给人思路打开的感觉,比一个人思考强很多。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RNA-seq入门实战(七):GSEA——基因集富集分析
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
15.5K0
RNA-seq入门实战(七):GSEA——基因集富集分析
RNA-seq入门实战(六):GO、KEGG富集分析与enrichplot超全可视化攻略
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
14.5K0
RNA-seq入门实战(六):GO、KEGG富集分析与enrichplot超全可视化攻略
如何利用clusterProfiler进行基因集的KEGG富集分析?
NGS 测序项目,不管是基因组测序,还是转录组测序,通常会得到一个基因列表,记录了基因突变,或者高/低表达量。
简说基因
2022/11/11
1.4K0
如何利用clusterProfiler进行基因集的KEGG富集分析?
使用clusterProfiler进行KEGG富集分析
KEGG pathway是最常用的功能注释数据库之一,可以利用KEGG 的API获取一个物种所有基因对应的pathway注释,human对应的API 链接如下
生信修炼手册
2020/05/08
5.7K0
使用clusterProfiler进行KEGG富集分析
富集分析常见类型
前期主要是以医学统计和临床预测模型为主,关于生信挖掘和机器学习的内容偏少,所以后面会逐渐增加这方面的内容,除了常见的生信分析外,还会涉及一些SCI图表学习等内容。
医学和生信笔记
2023/08/30
1.2K0
富集分析常见类型
GO、GSEA富集分析一网打进
富集分析是生物信息分析中快速了解目标基因或目标区域功能倾向性的最重要方法之一。其中代表性的计算方式有两种: 一是基于筛选的差异基因,采用超几何检验判断上调或下调基因在哪些GO或KEGG或其它定义的通路富集。假设背景基因数目为m,背景基因中某一通路pathway中注释的基因有n个;上调基因有k个,上调基因中落于通路pathway的数目为l。简单来讲就是比较l/k是否显著高于n/m,即上调基因中落在通路pathway的比例是否高于背景基因在这一通路的比例。(实际计算时,是算的odds ratio的差异,l/(k
生信宝典
2018/02/05
4.5K0
GO、GSEA富集分析一网打进
R|clusterProfiler-富集分析
简单总结clusterProfiler包进行GO、KEGG的富集分析方法,结果输出及内置的图形展示。
生信补给站
2020/08/06
2.2K0
转录组分析—再谈GSEA
Gene Set Enrichment Analysis (GSEA) 是一种生物信息学方法,用于确定基因集合(gene sets)在基因表达数据中的显著性变化。它广泛应用于基因表达数据的功能解释,帮助研究者理解在特定实验条件下哪些生物学通路或功能类别是活跃的。以下是GSEA的相关知识点:
sheldor没耳朵
2024/08/05
3530
转录组分析—再谈GSEA
GO和KEGG富集倍数(Fold Enrichment)如何计算
前面我们简单介绍过ggplot2画KEGG富集柱形图,其实GO富集结果的展示相对于KEGG来说要复杂一点点,因为GO又进一步可以划分成三个类。
生信交流平台
2020/10/23
12.2K0
GO和KEGG富集倍数(Fold Enrichment)如何计算
基因集富集分析(GSEA)及其可视化
基因集富集分析(Gene Set Enrichment Analysis, GSEA)是是一种计算方法,用于确定事先定义的一组基因是否在不同的样品中差异表达。
青青青山
2022/07/04
7.8K0
基因集富集分析(GSEA)及其可视化
想富集哪个通路就富集哪个通路?
因为具体的某个通路,大概率上可能是因为我们的统计学阈值给的过于严格,或者它的排序并不是很靠前,但是如果我们去看表,就能灵活的判断自己的感兴趣的通路到底是什么样的富集水平,它为什么没有达到统计学显著?
生信技能树
2024/11/21
1970
想富集哪个通路就富集哪个通路?
enrichplot富集分析可视化
上一次推文已经给大家介绍了常见的富集分析类型以及如何使用全能的R包clusterprofiler实现,详情请见:富集分析常见类型
医学和生信笔记
2023/08/30
1.8K0
enrichplot富集分析可视化
富集分析-KEGG/GO
是系统分析基因功能、基因组 信息数据库,它有助于研究者把基因及表达信息作为一个整体 网络进行研究,以“理解生物系统的高级功能和实用程序资源库”著称。
用户10412487
2023/03/28
2.8K0
go富集分析和kegg富集分析的区别_非模式生物怎么做GO富集
关于clusterProfiler这个R包就不介绍了,网红教授宣传得很成功,功能也比较强大,主要是做GO和KEGG的功能富集及其可视化。简单总结下用法,以后用时可直接找来用。
全栈程序员站长
2022/09/20
2K0
单细胞测序—标准流程代码(3)—marker 基因富集分析_差异基因
过了很久之后才想起来继续整理单细胞测序的标准分析流程。书接上回单细胞测序—标准流程代码(2) — 标记基因与细胞注释,这篇帖子主要关注的是富集分析。
sheldor没耳朵
2024/09/04
8980
单细胞测序—标准流程代码(3)—marker 基因富集分析_差异基因
使用topGO增强你的GO数据库注释结果的可视化
其中 GO(Gene Ontology)和KEGG(Kyoto Encyclopedia of Genes and Genomes)数据库是两个常用的生物学功能注释数据库,科学家通常是使用来超几何分布检验这个统计学算法做富集分析,即通过比较实际观察到的基因集合(几十个或者几百个)中特定功能或通路的基因数量与随机期望的数量来判断其是否富集。
生信技能树
2023/12/13
9840
使用topGO增强你的GO数据库注释结果的可视化
可视化—KEGG\GO分析结果气泡图美化
之前做的图比较丑,这里记录下比较好看的美化代码。没有封装函数了,改起来比较方便,随用随拿。
sheldor没耳朵
2025/05/30
3810
可视化—KEGG\GO分析结果气泡图美化
GO和KEGG富集结果如何显示基因symbol
前面在讲GO和KEGG富集倍数(Fold Enrichment)如何计算时,给大家简单介绍过GO富集分析结果如何看。
生信交流平台
2022/09/21
1.3K0
GO和KEGG富集结果如何显示基因symbol
上下调基因各自独立进行GO数据库的3分类富集(求美图代码)
我们通常呢,挑选差异基因,会选择那些log2FC比较大而且具有统计学显著性的上下调基因,不过加上MA图,就可以进一步挑选那些表达量也比较高的,因为这样的基因呢,容易去实验验证。而且呢,通常情况下常识会告诉我们高表达量基因更容易发挥作用。
生信技能树
2021/07/29
5.2K0
转录组GSE122709—KEGG 富集不出?
在分析GSE122709时候,取D1组、D2组分别与NC组进行基因差异与富集的分析时候,遇到一个问题就是D2/NC比较,进行KEGG分析时候什么结果都没有。查找原因时候遇到了一些问题,这里做简单的记录。
sheldor没耳朵
2024/08/02
3690
转录组GSE122709—KEGG 富集不出?
推荐阅读
相关推荐
RNA-seq入门实战(七):GSEA——基因集富集分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档