pLDDT和PAE怎么读?AlphaFold置信度判读指南
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
AlphaFold 模型跑完、彩色的结构图也渲染出来了。可面对pLDDT(predicted Local Distance Difference Test)曲线和PAE(Predicted Aligned Error)矩阵,哪段能直接拿去做分子对接、哪段只是看着像?下面把这两个数从模型输出的 logits 一路算到判读结论。
先建立直觉:一个"精度圈"的类比
GPS 报"定位精度 ±5 米",地图上给你画个模糊圈。AlphaFold 的置信度指标类似:pLDDT 就是这个精度圈,一个残基一个圈,只回答"这个残基本身定位得准不准";PAE 回答的是"对齐之后,这两个残基之间的相对位置差多少"。一个是单点精度,一个是两点关系的稳定性——后者决定图上两个结构域靠在一起这件事能不能信。
指标一 pLDDT:每个残基可信吗
pLDDT回答什么问题
一句话:模型对第 i 个残基的局部骨架几何(CA 原子位置)有多大把握。取值 0–100,粒度是逐残基、纯局部——它只关心这一小块对不对,不关心整条链别的部分在哪。
pLDDT怎么从logits算出来
模型并不直接输出一个分数。PredictedLDDTHead对每个残基输出 50 个 logits(见 modules.py,num_bins: 50配在 config.py),对应把 (0, 1] 的 LDDT 区间均匀切成 50 个桶。转成概率后取期望,就是 confidence.py 里这 7 行:
def compute_plddt(logits: np.ndarray) -> np.ndarray: num_bins = logits.shape[-1] bin_width = 1.0 / num_bins bin_centers = np.arange(start=0.5 * bin_width, stop=1.0, step=bin_width) probs = scipy.special.softmax(logits, axis=-1) predicted_lddt_ca = np.sum(probs * bin_centers[None, :], axis=-1) return predicted_lddt_ca * 100注意桶中心是 0.01、0.03、…、0.99——所以 pLDDT 取不到 100,最高也就 99 附近。概率分布越尖、越偏向高分桶,分数越高;分布摊平了(模型在猜),分数就掉到中间。
pLDDT分数判读对照表
分档与代码里_confidence_category的 D/L/M/H 一一对应:
| 区间 | 等级 | 含义 | 你能做什么 |
|---|---|---|---|
| <50 | D | 大概率无序 | 别当结构用 |
| 50–70 | L | 拓扑或可 | 只看大方向 |
| 70–90 | M | 骨架可靠 | 二级结构层面分析 |
| ≥90 | H | 原子级精度 | 直接做对接、定点突变 |
pLDDT告诉不了你的事
- 分数高 ≠ 在复合物里的绝对位置对。局部指标不评判"这段和另一段靠得对不对",多域蛋白的域间朝向它完全没意见。
- 分数低 ≠ 预测错了。天然无序区(IDR)就该低,这是真实特征而非模型缺陷。
指标二 PAE:两个残基的相对关系稳不稳
PAE回答什么问题
PAE 是一个 N×N 矩阵,PAE_ij 表示:把预测骨架和真实骨架做最优刚性对齐后,残基 i 与 j 之间的距离还差多少 Å。它测的是关系——对角区块内是域内置信度,非对角区块是域间/链间关系的置信度。模型输出 64 个误差桶(桶宽 0.5Å,覆盖到 31Å,最后一桶兜底到 +∞),所以矩阵值域约为 0–31.5。
PAE的计算链路
PredictedAlignedErrorHead吃 pair 表示([N_res, N_res, 128]),直接线性映射出 [N_res, N_res, 64] 的 logits,同时给出桶边界breaks = linspace(0, 31, 63)。后处理同样是 softmax 取期望:
def compute_predicted_aligned_error(logits, breaks): aligned_confidence_probs = scipy.special.softmax(logits, axis=-1) predicted_aligned_error, max_predicted_aligned_error = ( _calculate_expected_aligned_error( alignment_confidence_breaks=breaks, aligned_distance_error_probs=aligned_confidence_probs)) return { 'aligned_confidence_probs': aligned_confidence_probs, 'predicted_aligned_error': predicted_aligned_error, 'max_predicted_aligned_error': max_predicted_aligned_error, }内部的_calculate_expected_aligned_error核心就是一行np.sum(probs * bin_centers, axis=-1),桶中心由_calculate_bin_centers从桶边界加半步得到,末尾补一个兜底桶。
PAE矩阵判读对照表
| 矩阵模式 | 数值 | 含义 | 你能做什么 |
|---|---|---|---|
| 对角区块低 | <2 | 域内结构可靠 | 直接用 |
| 非对角区块低 | <2 | 域间关系可靠 | 敢用这个复合物 |
| 非对角区块高 | >8 | 相对朝向不定 | 按单域拆开分析 |
PAE告诉不了你的事
- 它基于骨架对齐,反映的是相对距离误差,绝对坐标、侧链精度都不在讨论范围。
- 对单链单域蛋白,PAE 信息量很小,几乎全矩阵都是低值,没什么可读的。
两个指标打架时怎么判
信号一致:快速判定
pLDDT≥90 且 PAE 对角区块 <2Å → 原子级,直接进下游。两者都低 → 这段大概率是柔性/无序,当无序处理。一致时 30 秒内能下结论。
信号矛盾:典型冲突场景
| 场景 | pLDDT | PAE | 最可能原因 | 下一步动作 |
|---|---|---|---|---|
| 本地自信,关系不稳 | 高 | 非对角区块高 | 多域蛋白域间朝向不定 | 切分结构域,逐域分析 |
| 分数低,关系却稳 | 低 | 全矩阵低 | 天然无序区 | 无序预测工具复核 |
| 边界骤变 | 某残基突降 | 出现方块分界 | 结构域边界 | 沿分界切段建模型 |
决策流程
端到端工作流:一个函数走完判读
import numpy as np from alphafold.common import confidence def interpret_confidence(prediction_result): # Step 1: 逐残基pLDDT (0-100) plddt = confidence.compute_plddt( prediction_result['predicted_lddt']['logits']) # Step 2: PAE矩阵 (Å, N_res x N_res) pae = confidence.compute_predicted_aligned_error( logits=prediction_result['predicted_aligned_error']['logits'], breaks=prediction_result['predicted_aligned_error']['breaks']) # Step 3: 全局分: 单体=均值, 多聚体=0.8*iPTM+0.2*pTM ranking = prediction_result['ranking_confidence'] # Step 4: 低置信残基 (pLDDT<70) low_mask = plddt < 70 # Step 5: 非对角PAE均值, 排除自对角 off_diag = pae[np.triu_indices(len(pae), k=2)] return { 'mean_plddt': float(np.mean(plddt)), 'ranking_confidence': float(ranking), 'low_plddt_residues': np.where(low_mask)[0] + 1, 'mean_off_diag_pae': float(np.mean(off_diag)), }人眼解读顺序:
- 先看全局:
ranking_confidence和 pLDDT 均值,定基调 - 再看曲线:标出 <70 的段,判断是连续还是零散
- 然后看矩阵:非对角区块和对角区块比,找高值方块
- 交叉验证:低 pLDDT 段若 PAE 也低,指向无序;PAE 高,指向关系不确定
- 回结构复核:unrelaxed PDB 的 B-factor 列就是 pLDDT(见 run_alphafold.py),低分残基逐一眼看
底层机制速览
两个预测头各吃一份表示。pLDDT 头从单链表示structure_module走 LayerNorm + 两层 ReLU 线性层,输出 50 桶 logits;PAE 头直接从 pair 表示线性映射出 64 桶 logits。一个看"点",一个看"点对",输入源不同,这是两个指标视角分叉的根源。
分数 = 概率分布的期望值。两个指标共享同一套数学:logits 过 softmax 变成分桶概率,再乘桶中心加权求和。
$$\mathrm{pLDDT}i = 100 \sum{k=1}^{50} p_{ik}, c_k$$
- $p_{ik}$:残基 i 的 LDDT 落在第 k 个桶的概率(softmax 输出)
- $c_k$:第 k 个桶的中心值,0.01 到 0.99 等距排列
- $k$:桶编号,共 50 个桶
- 乘 100:把 (0, 1) 的期望值缩放到 0–100 刻度
PAE 同理,只是桶中心和数量换成 0.5Å 宽度的 64 个误差桶。推论:分数本质是"模型自我评估的概率加权平均",分布摊平时分数落在中间值,所以 50 附近的 pLDDT 往往就是"模型在猜"。
实战FAQ
| 你看到的现象 | 最可能的原因 | 怎么处理 |
|---|---|---|
| 🟠 整条 pLDDT<50,pTM 很低 | MSA 太薄,同源序列近零 | 换/加 MSA 数据库重跑;仍低则标记为低可信结果 |
| 🟡 N端/C端低、中部高 | 末端天然柔性 | 别删末端,先查无序预测工具确认 |
| 🟡 局部 pLDDT 骤降 | 结构域边界或长 loop | 按域切段;对照 PAE 方块验证边界位置 |
| 🔵 PAE 非对角整体偏高 | 多域/多链相对朝向不确定 | 换多聚体模型;下游按单域单独处理 |
| 🔵 pLDDT 高但结构明显别扭 | MSA 里有强模板,模型过度自信 | 人工核查 MSA 覆盖度与模板质量 |
速查清单
- pLDDT≥90 且 PAE 对角块 <2Å → 原子级
- pLDDT<50 先查无序,别急着扔
- PAE 非对角块高 → 域/链相对朝向不可信
- 单体排名看 pLDDT 均值,多聚体看 iPTM
- unrelaxed PDB 的 B-factor 列就是 pLDDT
- 50 附近的分数 = 概率摊平 = 模型在猜
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考