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 |
|---|---|---|
| 定义 | 随机情况下预期出现的匹配次数 | 随机情况下出现至少一个匹配的概率 |
| 取值范围 | 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」,其实在大部分实战场景中,你会发现它们的区别并不大。但两个场景你要注意:
- E-value 接近 1 或更大:此时不能再近似了。E 为 1 对应 P 约 0.632,E 为 5 对应 P 约 0.993。差别很明显。
- 数据库非常大时: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 的关系以及实际应用时的关键点:
2.4 实战中怎么用这些知识?
知道了 E-value 的定义和它与 P-value 的关系,在日常操作中你需要记住几点:
我个人的做法:当 E-value 在 0.01 以下时,我会放心地把它当作「可信度」来用——越小越可信。但如果 E-value 大于 0.1,我会提醒自己:这很有可能是噪声,尤其是数据库很大时。
设置阈值前,先考虑:
- 你的数据库有多大? 小数据库(几千条序列)可以设紧一点,比如 1e-5。大数据库(百万级)要设松一些,比如 10 甚至 100。
- 你要找什么? 找高度保守的直系同源?设紧。找远缘同源或结构域?设松。
- 你能否承受假阳性? 临床诊断或功能注释,宁可漏不可错,设紧。探索性分析,宁可错不可漏,设松。
这些内容后面的章节会展开,但你现在至少明白了:E-value 不是你直觉中的「出错概率」,而是一个受数据库大小、替换矩阵和序列长度影响的期望次数。理解了这一点,后续所有阈值设置才有了理论基础。