2. E-value 的基本概念

2.1 E-value 的统计学定义

说实话,刚接触生物信息学那会儿,我也被 E-value 搞晕过。总觉得它跟 P-value 长得像,但又不完全一样。后来做了几年比对工具的开发,才真正理解它的含义。

E-value(期望值,Expectation value),简单的定义是这样的:

E-value 表示「在随机情况下,你预期会看到多少个得分不低于当前比对的匹配」。

翻译成人话就是:你把一条查询序列拿去跟数据库做比对,得到一个匹配。E-value 告诉你,如果把这条序列跟一个「完全随机」的、同样大小的数据库做比对,纯靠运气出现同样好甚至更好的匹配,预期会有多少次。

这个定义里藏着两个关键点:

  • 随机背景模型:它假设数据库序列是随机产生的,没有生物学意义。
  • 期望次数:它是一个「期望值」,不是概率,不是百分比,是次数。

我在项目中遇到过有人把 E-value 当百分比用,说「E-value 是 0.05 就是 5% 的概率」——错!0.05 的意思是,在随机情况下,你预期看到 0.05 个这样的匹配。换算成概率,大约 5% 的可能性出现至少一个匹配。嗯,这俩东西确实容易混淆,我们下面仔细讲。

BLAST 的 E-value 计算公式长这样:

E = K * m * n * e^(-λ * S)

各参数含义:

  • K:一个与搜索空间大小相关的缩放常数。
  • m:查询序列的长度(有效长度)。
  • n:数据库序列的总有效长度。
  • λ:一个与替换矩阵相关的缩放参数。
  • S:比对的原始得分(raw score)。

这个公式其实来自于 极值分布(Extreme Value Distribution, EVD)。比对得分不服从正态分布,它更像 Gumbel 分布。我刚开始做这块时总拿正态分布去套,结果怎么算都不对。

为什么会这样?因为 BLAST 做的是「最大值挑选」——它从大量随机比对中挑出得分最高的。这个过程天然服从极值分布,不是你熟悉的钟形曲线。

2.2 E-value 与 P-value 的关系

E-value 与 P-value 核心对比
维度 E-value P-value
定义 随机情况下预期出现的匹配次数 随机情况下出现至少一个匹配的概率
取值范围 0 到数据库大小(正实数) 0 到 1
典型阈值 10、1、0.01、1e-5 0.05、0.01、0.001
小值含义 几乎不可能出现随机匹配 小概率事件,拒绝随机假设
易用性 直觉上更直观(次数) 统计上更标准

这两个值之间的关系,可以用一个公式来搞定:

P-value = 1 - e^(-E-value)

当 E-value 很小时(比如小于 0.01),近似为:

P-value ≈ E-value

说白了,当你的 E-value 足够小,它和 P-value 几乎一样。我经常看到新手纠结「到底用 E 还是用 P」,其实在大部分实战场景中,你会发现它们的区别并不大。但两个场景你要注意:

  1. E-value 接近 1 或更大:此时不能再近似了。E 为 1 对应 P 约 0.632,E 为 5 对应 P 约 0.993。差别很明显。
  2. 数据库非常大时:E-value 会随数据库大小线性增长,P-value 则不是。你搜索一个 1G 数据库和 10G 数据库,相同得分的 P-value 几乎相同,但 E-value 会差 10 倍。

我的经验:在发表论文或提交报告时,我更推荐直接报告 E-value。原因很简单——你跑 BLAST,结果列表里默认给的就是 E-value,不用额外换算。记住,审稿人通常会问「你的 E-value 阈值是多少」,少有人问「P-value 阈值是多少」。

我曾经踩过的一个坑:有一次做宏基因组分析,我在一个哺乳动物数据库里搜索细菌 16S rRNA 序列。E-value 设成 1e-5,结果返回了 0 条匹配。我以为是没同源序列,差点换了搜索策略。后来同事提醒我查一下数据库本身的大小——这个库太大了,E-value 被「稀释」了。把阈值放宽到 10,才看到几段低质量匹配。嗯,数据库大小对 E-value 的影响,一定不能忽略。

2.3 一张图看清 E-value 的核心逻辑

下面这张图总结了 E-value 的统计基础、与 P-value 的关系以及实际应用时的关键点:

E-value 核心知识框架 E-value = K·m·n·e^(-λ·S) 统计学基础 极值分布 (EVD) Gumbel 分布拟合 随机背景模型 马尔可夫链模拟 序列均匀随机 与 P-value 关系 P = 1 - e^(-E) E < 0.01 时近似相等 受数据库大小影响 大数据库 E-value 会偏大 需动态调整阈值 公式参数 K, λ 经验拟合得到 不同替换矩阵不同 注意点 别跟 P 混用 报告 E-value E-value 不是概率,是次数。同样得分在不同大小数据库中的 E-value 可能相差百倍。 设置阈值时务必考虑数据库规模,不然既可能放过假阳性,也可能丢掉真阳性。

2.4 实战中怎么用这些知识?

知道了 E-value 的定义和它与 P-value 的关系,在日常操作中你需要记住几点:

我个人的做法:当 E-value 在 0.01 以下时,我会放心地把它当作「可信度」来用——越小越可信。但如果 E-value 大于 0.1,我会提醒自己:这很有可能是噪声,尤其是数据库很大时。

设置阈值前,先考虑:

  • 你的数据库有多大? 小数据库(几千条序列)可以设紧一点,比如 1e-5。大数据库(百万级)要设松一些,比如 10 甚至 100。
  • 你要找什么? 找高度保守的直系同源?设紧。找远缘同源或结构域?设松。
  • 你能否承受假阳性? 临床诊断或功能注释,宁可漏不可错,设紧。探索性分析,宁可错不可漏,设松。

这些内容后面的章节会展开,但你现在至少明白了:E-value 不是你直觉中的「出错概率」,而是一个受数据库大小、替换矩阵和序列长度影响的期望次数。理解了这一点,后续所有阈值设置才有了理论基础。