第一节:富集因子 – 从定义到直觉

搞生物信息学的人,几乎天天都要跟“富集”打交道。你今天做了一堆差异基因,想看看它们是不是集中在某个通路里;明天筛了一批化合物,想判断它们对某个靶点有没有偏好性——这时候你就会用到富集因子(Enrichment Factor, EF)。

说白了,富集因子就是一个比值,用来衡量“我们关心的那部分东西”在“一个特定的子集”里出现的频率,比在“整个背景”里高多少。数值越大,说明这个子集越有针对性。

1.1 富集因子的标准公式

你可能会在各个文献里看到不同写法,但核心骨架就一个:

EF = (a / n) / (A / N)

其中:
a = 在目标子集(例如差异基因列表)中属于某通路C的基因个数
n = 目标子集的总基因数
A = 在全基因组背景中属于通路C的基因个数
N = 全基因组背景的总基因数

举个例子你想想看。你手上有一个含 200 个基因的差异列表,其中 15 个属于“细胞周期”通路。全基因组共有 20000 个基因,该通路总共有 200 个基因。那么:

EF = (15/200) / (200/20000) = 0.075 / 0.01 = 7.5

这意味着在差异列表里,细胞周期通路相关基因的密度是背景分布的 7.5 倍。嗯,富集效果非常明显了。

我个人习惯:在写脚本算 EF 值时,先把分母 (A/N) 的计算结果做为一个常量保存,避免每次循环重复计算。尤其是当你的分析涉及几百个通路的时候,这个小优化能省不少时间。

1.2 两个最容易踩的坑

我刚开始做药物虚拟筛选时,就用 EF 来评价分子对接的命中率。结果算出来一个 EF 值高达 25,把我高兴坏了。后来复查才发现——背景库里有大量重复结构,导致 (A/N) 算小了。所以我建议大家注意这几点:

  • 背景一定要完整且去重。背景总集全不全,直接决定了分母的可信度。我见过有人拿一个不完整的基因组做 GO EF,最后数值虚高,根本没法用。
  • 小样本别瞎用 EF。如果 n 只有 10 个基因,其中 2 个属于某个通路,EF = (2/10)/(A/N),稍微波动一下就会非常夸张。你想想看,这种结果你敢信吗?
我曾经犯过的错误:有一次在分析代谢组数据时,我用 EF 来评估某个代谢物类别的富集,结果发现 (A/N) 分母是来自公共数据库,而我的目标子集是实测数据,两者覆盖的化合物空间差异很大。算出来的 EF 几乎没有参考价值。后来我学乖了:EF 比较的两个比例,必须来自同一个“测量系统”或者“可比的背景”。

1.3 除了基因集,EF 还能用在哪?

EF 并不局限于基因本体分析。下面这张表列出了我实际项目中用到过 EF 的几个场景:

应用领域a / nA / N典型 EF 阈值
GO / KEGG 富集差异基因中属于某通路的基因数占比基因组中该通路基因数占比>2 通常认为有意义
药物虚拟筛选虚拟命中结构中属于某活性类的占比整个化合物库中该类占比>5 说明筛选策略有效
ChIP-seq 峰注释峰落在某个功能区域的占比全基因组该功能区域的占比>3 提示区域偏好
微生物组 OTU 关联在目标条件中某属的相对丰度所有样本中该属的平均丰度>1.5 视为富集

看到了吧?只要你能把数据抽象成“子集比例 vs 背景比例”,EF 就不挑领域。这里有个小诀窍:如果你拿不准该不该用 EF,就回头想想——我这个“子集”和“背景”是不是概念上对等的?如果不对等,那 EF 可能是个假信号。

1.4 富集因子的变体:EF_max 与早期富集因子

在某些应用里(比如虚拟筛选的早期命中评价),我们还会看到 EFmax 或 early EF。它们不是新概念,而是在对排名靠前的部分做 EF 计算。说白了就是:对预测得分最高的前 x% 化合物计算 EF,看实际活性化合物是不是真的“扎堆”出现在最前面。

EF_x% = (hits_in_top_x% / n_x%) / (total_hits / N)

其中:
hits_in_top_x% = 排名前 x% 的分子里实际有活性的个数
n_x% = 排名前 x% 的分子总数
total_hits = 整个库中所有活性分子的个数
N = 库的总分子数

我记得最早接触这个变体时,是在一篇 2010 年的 JCIM 论文里。作者用它来评价分子对接打分函数的可靠性。你想想看,如果最好的那批化合物里真的富集了活性分子,那你的流程就比随机好。这个想法很朴素,但很实用。

核心思想再讲直白点:EF 不依赖任何统计检验,它就是一个纯倍数。所以它适合用于快速筛选、指标对比,但不适合做显著性判断。如果你想问“这个富集是不是随机造成的”,那请用 Fisher 精确检验或超几何检验,别让 EF 去扛统计压力的活。

1.5 本章知识体系框架

下面这张 SVG 图把富集因子的定义、计算、场景和注意点串在了一起,方便你建立整体认识。

富集因子知识体系 富集因子 EF EF = (a/n) / (A/N) 比例比值的直观度量 EF_max / Early EF 对排名头部区域计算 GO/KEGG 富集 药物筛选 ChIP-seq 注释 微生物组 代谢组学 文本挖掘 ⚠ 注意事项 背景要一致 | 小样本要小心 | 不能替代统计检验 | 适合快速对比 EF 没有绝对阈值,需要结合领域知识;EF 越大不一定越好,要警惕背景偏差

这张图你应该能一眼看懂:EF 的核心公式决定了它可以向左衍生出不同变体,向下则接入各种应用场景。最下面那层注意事项,是我用真金白银的翻车经验换来的,别跳过去。

1.6 什么时候该用 EF,什么时候不能依赖它?

我个人的经验是:EF 非常适合做“探索性分析”和“方法评价”。举个例子,你在开发一个新的分子对接流程,想比较几种打分函数谁更有筛选能力——那 EF 就是很好的指标。你不需要 P 值,只需要一张表列出不同 x% 下的 EF 值,谁高谁一目了然。

但如果你的工作是给一个通路写结论,要上报到监管部门或者要写进论文的关键结论里——那 EF 最好只作为辅助展示,主统计量交给 Fisher 检验或 GSEA 的归一化富集得分(NES)。为什么?因为 EF 没有考虑基因数量带来的随机性。100 个基因里 3 个属于某通路,跟 10 个基因里 3 个属于同一通路,EF 算出来一样,但统计学意义天差地别。

另一个我踩过的坑:在做 KEGG 富集热图时,我用 EF 做了分块排序,结果颜色很好看,但跟生物学家的认知完全不符。后来发现是因为一个超级大的通路(数百基因)被少数基因“稀释”成了较低 EF,而小通路因为基因少、比例波动大反而排在最前面。从那以后,我多了一个习惯:在展示 EF 的同时,把通路里的基因个数 (a) 也标在旁边,让读者心里有数。