BLAST算法原理:评分矩阵、E-value、比对统计
说了半天BLAST,其实真正决定比对质量的,就是那三个东西:评分矩阵管生化倾向,E-value管统计可信度,比对统计帮你把原始分转换成可比较的分数。我个人习惯把这三点拎出来单独讲,因为很多人在BLAST上踩的坑,根源就是对这三个参数理解有偏差。
评分矩阵:BLOSUM vs PAM
先聊评分矩阵。说白了,它就是个打分表:一个氨基酸换成另一个,该给多少分。为什么会需要这个表?因为有些替换是“保守”的(比如亮氨酸变异亮氨酸),对蛋白结构影响小;有些则是“激进”的。你想想看,如果给保守替换和高风险替换一样的分数,比对结果肯定偏掉。
两个主流系列:PAM(Point Accepted Mutation)和BLOSUM(BLOcks SUbstitution Matrix)。我给它们做了个对比表:
| 特性 | PAM系列 | BLOSUM系列 |
|---|---|---|
| 构建思想 | 从点突变率外推进化距离 | 从保守块直接观察替换频率 |
| 编号含义 | PAM250 = 250个突变/100个残基 | BLOSUM62 = 序列相似度 >62%的块 |
| 适用场景 | 远距离进化(>40%分歧) | 中等距离(通用默认) |
| 默认首选 | 较少使用 | BLOSUM62(BLAST默认) |
我记得早期做注释时,PAM矩阵很流行,但后来BLOSUM成了主流。为什么?因为BLOSUM直接拿真实比对块里的数据,更贴近实际情况。BLOSUM62里的“62”意思是,构建时只用了相似度≥62%的保守块——数字越小,矩阵越容忍分歧大的替换。如果你做跨物种远缘注释,可以试试BLOSUM45;要是做同源精细比对,BLOSUM80会更敏感。
比对统计:Karlin-Altschul 统计
把序列丢进去,BLAST算出一个原始分。然后呢?原始分本身意义不大——同一个分数,在不同数据库大小、不同序列长度下,置信度完全不同。这就是Karlin-Altschul 统计要解决的问题。
核心公式长这样:
E = K * m * n * e^(-λ * S)
其中:
λ = 评分系统尺度因子
K = 归一化常数
m, n = 查询与数据库序列长度
S = 原始比对得分
你看出门道了吗?E-value依赖四个变量:λ和K是矩阵相关的内部参数,m和n是序列长度,S是你比对出的原始分。BLAST内部会预先算好λ和K,比如BLOSUM62默认的λ值和K值:
# BLAST+ 默认参数示例(BLOSUM62,gap open 11, gap extend 1)
参数:lambda 0.267,K 0.041,H 0.14
有了λ和K,BLAST算出每个比对的E-value。简单说:E-value表示在随机模型下,你预期能看到多少个同样好或更好的匹配。如果E=1,意味着胡乱找个随机序列也能撞上一次;E=0.01,说明纯属凑巧的概率很低。
E-value:最常用也最容易被误读的统计量
E-value和P-value是两回事。每次培训都有人搞混,我说清楚:
- P-value:某次比对比当前分数更优的概率。
- E-value:在数据库规模下,预期出现这么多高分比对的次数。
举个数:你用BLAST搜一个序列,某匹配E-value=0.05。不是说5%的概率是假的——而是说,如果你把这份数据库随机打乱再搜,平均每20次搜索才出一次这么高的分数。说白了,E-value已经帮你考虑了数据库大小和多比对的情况,比P-value更实用。
我建议你记住一点:E值越小越好。在Pfam注释实践里,通常取E-value ≤ 1e-5或1e-10作为阈值。你要是设得太宽松(比如1),一堆假阳性就进来了。
比对统计的其他关键参数
除了E,BLAST输出里还有:
- Score(原始分):由评分矩阵直接加和得到。
- Bit-score(比特分):将原始分归一化后的分值,不随数据库大小变化。Bit-score可以跨BLAST版本比较,我习惯用它做结果排序。
- Identity / Positives:一致性与正匹配比例,用来快速判断比对质量。
原始分转比特分的公式:
bit-score = (λ * S - ln K) / ln 2
看到没?比特分把λ和K的值嵌入进去了,所以不同矩阵跑出来的结果也能放一块比。我经常被问到:“为什么我用不同矩阵跑BLAST,E值一样但分数差很多?”——就是因为比特分已经做了归一化,比对时请优先对比特分,而不是原始分。
避坑清单:我在实际项目中踩过的雷
我曾经有个同事,查一个家族序列,设E-value阈值1e-1,结果列出几千条匹配。他以为这些都是同源域,其实大量是低复杂性区域造成的假象。类似案例我遇到过好几次:
- 不设低复杂度过滤:重复序列或低复杂度段会产生非常高的比对分,把E-value压得很低但毫无生物学意义。建议默认开启 -seg yes。
- 阈值设定过松:数据库越大,假阳性越多。我推荐先用1e-5做初筛,分析少数候选时才放宽。
- 忽略查询序列长度:短序列(<30 aa)做BLAST,统计信噪比很低。不要对短肽片段过分信任E值。
- 单一E值定乾坤:我曾碰见一个匹配E=1e-20但覆盖度只有30%,最后验证是不同结构域的错误嵌合。一定要看全长覆盖。
嗯,我在开始讲Pfam实战之前,必须先把统计基础铺好——否则后面你看到成千上万个匹配输出,根本不知道选哪个。把评分矩阵、E-value和比对统计吃透,BLAST就不再是一个黑盒,而是你手上一把顺手的工具。