做组学数据分析的人,十有八九都经历过这个阶段:差异基因列表拿到了,几百甚至上千个基因摆在眼前,一眼扫过去什么结论都得不出。你总不能跟导师说“这堆基因看起来挺重要”就完事了。这个时候,对基因列表做GO和KEGG注释几乎是所有人都会想到的第一步,也是把“基因名单”转化成“生物学结论”的核心桥梁。这篇文章我打算把批量基因注释这件事从头到尾拆开聊一遍——从工具选型到数据准备,从实操代码到结果解读,再到那些文档里不会写、只有自己踩过坑才知道的细节,一次性说清楚。
不管你是刚拿到RNA-seq差异结果的研究生,还是想把手头基因列表系统过一遍功能的科研人员,这篇文章都适合你。我会把两种最主流的注释思路(在线工具和本地脚本)都覆盖到,但重点放在基于R语言生态的clusterProfifier方案上,这也是目前文献里最常用、结果最容易被认可的做法。
1. 为什么所有生信分析最后都会卡在“注释”这一步
1.1 从基因列表到生物学结论之间的那道坎
先想一个问题:差异表达分析结束后,你手里拿到的到底是什么?是一堆基因名、Ensembl ID或者Entrez ID,附带log2FC和显著p值。这个列表本身不包含任何“功能含义”。比方说你有200个上调基因,其中可能包括几个激酶、几个转录因子、几个膜受体,它们之间是否存在协同关系?是否集中在某条代谢通路上?这些信息光看名字是看不出来的。
GO和KEGG注释解决的就是这个信息断层问题。GO全称Gene Ontology,从分子功能、生物学过程、细胞组分三个维度描述基因的通用功能属性;KEGG则是把基因映射到已知的代谢和信号通路上。两者互补:GO告诉你“这个基因可能干什么”,KEGG告诉你“这些基因参与哪些协作网络”。批量注释的核心工作就是把成千上万个基因归类到这些功能集合中,然后用统计学方法判断哪些功能在你给定的基因列表里显著富集了。
这里有个很容易被新手忽略的点:注释和富集是两件事,但实际分析中往往连在一起做。注释是把基因ID映射到GO条目或KEGG通路上,富集是在注释结果基础上做超几何检验或Fisher精确检验,找出显著富集的功能条目。绝大多数工具会把这两步封装在一起,你只需要输入一个基因列表,工具输出的是“哪些GO条目/KEGG通路在你的列表里显著得多”。
1.2 常见的使用场景:不止RNA-seq差异基因这一种
很多人以为GO/KEGG注释只服务于转录组差异基因,实际应用范围远不止于此。我做过的大致可以归为几类:
- RNA-seq / 芯片差异基因:最经典的做法,输入显著差异表达基因,输出富集条目。
- 蛋白组 / 代谢组筛选出的关键分子:组学平台给的显著蛋白或代谢物同样需要通过注释理解功能背景。
- 全基因组关联分析或孟德尔随机化筛选的基因集合:这类基因往往来自统计关联而非表达变化,同样可以用GO/KEGG看看它们是否集中在某些功能域。
- 单细胞测序的marker基因:每个细胞亚群的marker基因做功能注释,判断亚群身份和潜在功能。
- 自己随便整理的一个感兴趣基因集合:比如文献里收集到某个通路的基因、某个蛋白复合体的成员等,都可以跑一遍注释看看功能特征是否和你预期一致。
无论哪种场景,注释的底层逻辑都是一样的——只不过输入基因的筛选标准不同而已。理解这一点,你就不会一遇到注释任务就发怵。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GO与KEGG背后:两类数据库的生物学逻辑与统计原理
2.1 GO的三大本体拆解
GO用一套有向无环图组织基因功能术语,这套结构比普通人想象的严谨得多。整个GO分成三大独立本体:
- 生物过程(Biological Process, BP):描述基因参与的细胞层面的过程,比如“炎症反应”“DNA修复”“细胞周期调控”。这类条目关注的是“一系列事件”而不只是单一分子事件。
- 分子功能(Molecular Function, MF):描述单个基因产物在分子层面的活性,比如“ATP结合”“蛋白激酶活性”“转录因子活性”。它是基因最底层的生化能力。
- 细胞组分(Cellular Component, CC):描述基因产物在细胞中发挥功能的位置,比如“线粒体膜”“细胞核”“内质网腔”。
这三个本体的层级关系很值得注意。BP是最高层、最综合的维度,MF和CC比较具体。同一个基因可能在BP里被注释到“免疫应答”,在MF里被注释到“受体结合”,在CC里被注释到“质膜”——三者描述的是同一基因的不同侧面,不能互相替代。这也是为什么我在实际分析中几乎总是三个本体一起出结果,而不是只挑一个。
另外,GO条目的父子关系是DAG(有向无环图)而不是简单的树状层级。一个子条目可以有多条父路径,一个基因可以注释到多个不同层级的GO条目。比如“T细胞受体信号通路”既属于“免疫应答”的子类,也和“细胞表面受体信号通路”有关联。注释后做富集分析时,算法会考虑这个结构特点,但大多数情况下你不需要手动处理层级关系,工具会自己搞定。
2.2 KEGG通路的层级化组织与注释逻辑
KEGG(Kyoto Encyclopedia of Genes and Genomes)和GO最大的不同在于它用“通路图”来描述基因功能。每条通路对应一张交互式网络图,图中节点是基因或酶,连线代表上下游调控关系或代谢转化关系。KEGG把通路分成几个大层级,比如“代谢”“遗传信息处理”“环境信息处理”“细胞过程”“生物体系统”等,下面再细分成具体通路条目。
做KEGG富集时有个常见的坑,我反复提醒身边的人注意:KEGG数据库里的通路注释只涵盖了基因组中有明确同源基因的部分,而且不同物种的注释完整性差异很大。模式生物(人、小鼠、大鼠、酵母等)注释得比较完善,非模式物种常常只能参考同源基因注释,覆盖度明显偏低。如果你做的物种本身注释不全,KEGG富集结果里通路数少,不要马上觉得分析出了问题——先检查该物种在KEGG数据库里的注释基因总数再下结论。
2.3 超几何分布与p值校正:富集显著性的数学内核
搞懂富集计算的机制,对后续读结果和调参都有帮助。现在几乎所有工具用的都是超几何检验。我尽量用通俗的方式解释:
想象一个袋子里有20000个球(代表基因组所有基因),其中500个是
