262

Gene Ontology:GO 注释如何解释基因功能

Gene Ontology 用标准化术语描述基因的功能、过程与定位,是功能富集分析的基础。这篇讲清三大本体、证据代码与富集分析的正确做法。

Gene Ontology(GO) 是描述基因功能的标准化词汇体系。它解决的问题是:不同研究者用不同措辞描述同一功能,导致无法比较和汇总。GO 提供一套受控词汇和层级结构,让「这个基因做什么」变成可计算的信息。它是功能富集分析的基础设施。

三大本体

本体 回答 例子
Molecular Function(MF) 分子层面做什么 protein kinase activity、ATP binding
Biological Process(BP) 参与什么生物过程 cell cycle、apoptotic process
Cellular Component(CC) 在哪里发挥作用 nucleus、plasma membrane

三者是有向无环图(DAG)而非简单树:一个术语可以有多个父术语。层级越深越具体,「is_a」和「part_of」关系支持向上传播——注释到 protein tyrosine kinase activity 的基因,自动也属于 kinase activity

证据代码:最该先看的字段

每条 GO 注释都带证据代码,说明这个注释是怎么来的。可靠性差别巨大

代码 含义 可靠性
EXP / IDA / IPI / IMP / IGI 实验证据(直接测定、突变表型等) 最高
TAS / IC 作者陈述 / 策展人推断 较高
ISS / ISO / ISA 基于序列或结构相似性推断
IBA 基于系统发生树推断
IEA 电子注释,无人工审核 最低,但占比最大

IEA 注释占 GO 数据的绝大多数。做严肃分析时,应考虑只用实验证据支持的注释,或至少在报告中说明包含了 IEA。

富集分析

from gprofiler import GProfiler

gp = GProfiler(return_dataframe=True)
res = gp.profile(
    organism="hsapiens",
    query=["EGFR", "KRAS", "BRAF", "MAP2K1", "MAPK1", "SOS1", "GRB2"],
    sources=["GO:BP", "GO:MF", "GO:CC"],
    background=background_gene_list,      # ← 关键,见下文
    no_evidences=False,
)
print(res[["source", "name", "p_value", "term_size",
           "query_size", "intersection_size"]].head(15))

富集分析最常犯的四个错误

  • 背景基因集选错这是最严重也最常见的错误。做 RNA-seq 分析时,背景应该是「在该实验中被检测到的所有基因」,而不是全基因组。用全基因组做背景会系统性地富集出「高表达基因常见的功能」,产生大量假阳性。
  • 忽略术语冗余:父子术语高度重叠,富集结果里常出现十几个说的是同一件事的术语。应该用 REVIGO 等工具做语义去冗余,或只报告代表性术语。
  • 只看 p 值不看效应量:一个包含 3000 个基因的宽泛术语(如 metabolic process)很容易显著,但几乎没有信息量。应同时看 term_size(术语大小)和 fold enrichment,优先关注中等大小(20~500 个基因)且富集倍数高的术语。
  • 研究偏倚未考虑:被研究得多的基因注释更完整、更具体,冷门基因可能只有宽泛的 IEA 注释。这会让富集结果偏向热门通路。

ORA 与 GSEA 的区别

  • ORA(过表示分析):先按阈值选出一组基因(如差异表达的),再检验这组基因在某功能上是否过表示。简单直接,但结果对阈值敏感
  • GSEA(基因集富集分析):用全部基因的排序(如按 log2FC),检验某个基因集是否集中在排序的两端。不需要设阈值,且能捕捉「许多基因都有小幅协同变化」的情况——这在真实生物学中很常见,而 ORA 会完全漏掉。
  • 建议:有连续的排序信息时优先用 GSEA(见 263《MSigDB》);只有基因列表时用 ORA。

上手提示

  • 先看证据代码,IEA 是无人工审核的电子注释,占比最大;
  • 背景基因集必须是「实验中检测到的基因」而非全基因组,这是最常见的致命错误;
  • 同时看术语大小与富集倍数,宽泛术语显著但无信息量;
  • 有排序信息时优先用 GSEA,它能捕捉协同小幅变化。

延伸资源