22  GO/KEGG 功能富集:从“基因列表”到“生物学故事”的升华

22.1 【导语】万事之源:为何要这样做?

一份包含数百个基因的差异表达列表,其本身只是一堆孤立的、缺乏生物学可解释性的符号。我们必须回答的下一个问题是:“这些基因在宏观的生物学层面,共同指向了什么功能或通路的变化?”功能富集分析的本质,就是利用人类积累数十年的生物学知识库(如GO、KEGG数据库),来进行一次严谨的“统计寻宝”。

它通过超几何检验等经典的统计学方法,来系统性地判断你提交的这一组特定基因,是否在某个或某些功能条目(例如,“细胞凋亡过程”或“MAPK信号通路”)中,出现了“非随机”的、统计学上异常的聚集或富集。其最终的科学目标,是将一份看似杂乱无章的基因列表,逻辑化地“翻译”成一个或多个宏观的、可被理解、并可用于提出新假说的生物学故事。

22.2 【核心实践】从原理到决策

22.2.1 【知识库的选择决策:GO vs. KEGG】

选择哪个知识库,取决于你想从哪个角度来解读你的基因列表。

GO (Gene Ontology):我们可以将其类比为一本极其详尽的“基因功能说明书”。它从三个独立但互补的维度,系统性地描述了每一个基因的功能。分子功能(Molecular Function, MF)回答“这个基因产物能做什么?”;生物学过程(Biological Process, BP)回答“它参与了哪些生命活动?”;细胞组分(Cellular Component, CC)则回答“它在细胞的哪个位置工作?”。GO的特点是其严谨的层级结构和极广的覆盖面。

KEGG (Kyoto Encyclopedia of Genes and Genomes):与GO不同,KEGG更像是一本精美的“细胞信号通路图集”。它并不孤立地描述单个基因,而是将基因们作为一个个节点,放置在精心绘制的、具有相互作用和调控关系的信号通路图谱之中。因此,KEGG更侧重于揭示基因间的协同作用与在特定通路中的角色。

22.2.2clusterProfiler 包实战:从输入到结果】

clusterProfiler是R语言中进行功能富集分析的“黄金标准”工具包。

22.2.2.1 第一步:基因ID转换

后果驱动解析:GO与KEGG等核心生物学数据库,为了保证信息的唯一性和准确性,通常使用ENTREZID作为基因的官方唯一标识符。而我们从差异分析中得到的,往往是更易于人类阅读的GENE SYMBOL。如果你忽略了在富集分析前,将SYMBOLs转换为ENTREZIDs这一关键步骤,其直接且灾难性的后果是,你辛辛苦苦筛选出的大部分差异基因,将因为无法在知识库中被识别而“隐身”。你的富集分析将颗粒无收,或者得到一个基于极少数基因的、有严重偏倚的结果。

22.2.2.2 第二步:运行 enrichGO / enrichKEGG

在准备好ENTREZID格式的基因列表后,便可以进行富集分析。

## 假设 'gene_entrez_ids' 
## 是你的差异基因(DEGs)列表,
## 且 ID 格式为 ENTREZID。
ego <- enrichGO(
  gene          = gene_entrez_ids,
  OrgDb         = org.Hs.eg.db,
  ont           = "BP",
  pvalueCutoff  = 0.05,
  qvalueCutoff  = 0.2
)

参数决策gene是你提交的差异基因列表。OrgDb是一项物种选择决策,org.Hs.eg.db代表你使用的是人类的注释数据库。ont是GO分析的特有决策,用于选择BP, CC, 或MF这三个分支中的一个。pvalueCutoffqvalueCutoff则是用于初步筛选显著结果的统计学阈值。

22.2.2.3 第三步:结果解读

富集分析会返回一个数据框,其中最重要的几列是:

Description:该功能条目或通路的文字描述。

p.adjust:经过多重检验校正后的P值,这是判断该条目是否显著富集的最终标准。

GeneRatio:一个比值,分子是你提交的差异基因中、落入该功能条目的基因数量,分母是你提交的差异基因总数。

BgRatio:背景基因比率,分子是整个知识库背景中、落入该功能条目的基因数量,分母是背景基因总数。一个显著的富集,通常表现为GeneRatio显著大于BgRatio

22.2.3 【结果可视化:气泡图与通路图】

气泡图 (dotplot):这是展示富集分析结果的经典视图。它能够在一个二维图形中,同时展示多个维度的信息:Y轴是被显著富集的通路;X轴是GeneRatio,代表富集程度;点的大小,则通常被映射为该通路下富集到的差异基因数量;而点的颜色,则被映射为p.adjust值,代表统计显著性。

通路图 (pathview):对于KEGG富集到的通路,pathview包提供了一种极为直观的可视化决策。它能够将你的差异基因的表达变化信息(log2FoldChange值),直接用颜色(如红色代表上调,绿色代表下调)标记在官方的KEGG通路图上,实现“所见即所得”的生物学洞察。

22.3 【认知升维】常见的思维陷阱与对策

22.3.1 思维陷阱一:将“背景基因集”搞错

功能富集分析的统计检验,其结果高度依赖于你所定义的“背景基因集”(Universe)。默认情况下,clusterProfiler使用物种注释包(如org.Hs.eg.db)中包含的所有已知基因作为背景。但在某些特殊分析中(例如,你只对芯片上覆盖的基因,或在你的RNA-seq实验中稳定表达的基因进行富集),如果使用了错误的背景基因集,可能会导致结果产生系统性偏倚。

其对策是,首先要理解universe参数的用途,它允许你手动指定一个自定义的背景基因集。但更重要的是,在绝大多数标准的RNA-seq差异表达分析后,使用clusterProfiler的默认背景(即注释库中的所有基因),是一个统计上合理且保守的选择。

22.3.2 思维陷阱二:富集不到任何显著通路

在满怀期待地运行完代码后,发现结果表格为空,或所有条目的p.adjust值都不显著,这是新手常遇到的困境。

其对策是,提供一个系统性的诊断清单

第一,检查你的输入:你的差异基因列表数量是否过少(例如,少于20个)?数量太少,统计功效会极低。

第二,检查你的预处理:你的基因ID是否已经正确、高效地转换为了ENTREZID?

第三,拓宽你的思路:是否尝试了更广泛的生物学知识库(如Reactome, DO)?或者,是否应该考虑使用一种不需要预设差异基因阈值的、更敏感的分析方法,例如GSEA(基因集富集分析)?

22.4 【总结与拓展】构建你的思维框架

我们必须将功能富集分析,视为一次“学术文献的智能检索”过程。在这个思维框架中,你的差异表达基因列表,就是你输入的一组高度特异的“检索关键词”。GO、KEGG等知识库,则是浩如烟海的“生物学文献数据库”。而富集分析的统计检验,则扮演了“相关性排序算法”的角色。你的终极目标,就是利用这个强大的算法,从数据库中,找到与你的“关键词”集合最相关的那些“核心科学主题”,并利用这些主题,来构建你下一步的、更具深度的科学假说。

基于此框架,请思考一个方法学上的启发性问题:GSEA(基因集富集分析)与我们本次学习的、更经典的ORA(过表达分析)是两种主流的功能富集分析方法。GSEA的一个核心特点是,它不需要你预先筛选出“显著”的差异基因,而是利用所有基因(无论显著与否)的表达变化排序信息来进行计算。你认为,相对于我们今天学习的ORA方法,GSEA这种不设阈值的分析策略,可能有哪些潜在的优势和劣势?在什么样的生物学场景下,你会优先决策使用GSEA,而不是ORA?


探索生命科学前沿,提升实战技能!欢迎微信搜索并加入「生信实战圈」,获取最新技术干货、实战案例与行业动态。 点击关注,与同行一起成长!