name: protein-qc description: > 蛋白质设计的质量控制指标与筛选阈值。 在以下情况使用此技能:(1) 评估设计的结合、表达或结构质量, (2) 设置 pLDDT、ipTM、PAE 的筛选阈值, (3) 检查序列风险(半胱氨酸、脱酰胺、多碱性簇), (4) 创建多阶段筛选流程, (5) 计算 PyRosetta 界面指标(dG、SC、dSASA), (6) 检查生物物理特性(不稳定指数、GRAVY、pI), (7) 使用综合评分对设计进行排序。
此技能提供来自结合剂设计竞赛和已发表基准测试的研究支持阈值。 license: MIT category: evaluation tags: [qc, filtering, metrics, thresholds]
蛋白质设计质量控制
关键局限性
单个指标对结合能力的预测能力较弱。研究表明:
- 单个指标的 ROC AUC:0.64-0.66(略优于随机)
- 指标是预筛选过滤器,而非亲和力预测器
- 综合评分对于有意义的排序至关重要
这些阈值用于过滤掉不良设计,但不能预测结合亲和力。
质量控制组织
质量控制按目的和级别组织:
| 目的 | 评估内容 | 关键指标 |
|---|---|---|
| 结合 | 界面质量、结合几何 | ipTM、PAE、SC、dG、dSASA |
| 表达 | 可制造性、可溶性 | 不稳定指数、GRAVY、pI、半胱氨酸 |
| 结构 | 折叠置信度、一致性 | pLDDT、pTM、scRMSD |
每个类别有两个级别:
- 指标级别:计算值及阈值(如 pLDDT > 0.85)
- 设计级别:模式/基序检测(奇数半胱氨酸、NG位点)
快速参考:所有阈值
| 类别 | 指标 | 标准阈值 | 严格阈值 | 来源 |
|---|---|---|---|---|
| 结构 | pLDDT | > 0.85 | > 0.90 | AF2/Chai/Boltz |
| pTM | > 0.70 | > 0.80 | AF2/Chai/Boltz | |
| scRMSD | < 2.0 Å | < 1.5 Å | 设计与预测对比 | |
| 结合 | ipTM | > 0.50 | > 0.60 | AF2/Chai/Boltz |
| PAE_interaction | < 12 Å | < 10 Å | AF2/Chai/Boltz | |
| 形状互补性 (SC) | > 0.50 | > 0.60 | PyRosetta | |
| interface_dG | < -10 | < -15 | PyRosetta | |
| 表达 | 不稳定指数 | < 40 | < 30 | BioPython |
| GRAVY | < 0.4 | < 0.2 | BioPython | |
| ESM2 PLL | > 0.0 | > 0.2 | ESM2 |
设计级别检查(表达)
| 模式 | 风险 | 措施 |
|---|---|---|
| 奇数半胱氨酸数量 | 未配对二硫键 | 重新设计 |
| NG/NS/NT 基序 | 脱酰胺 | 标记/避免 |
| K/R 连续 >= 3个 | 蛋白水解 | 标记 |
| 疏水残基连续 >= 6个 | 聚集 | 重新设计 |
参见:references/binding-qc.md, references/expression-qc.md, references/structural-qc.md
顺序筛选流程
import pandas as pd
designs = pd.read_csv('designs.csv')
# 阶段 1:结构置信度
designs = designs[designs['pLDDT'] > 0.85]
# 阶段 2:自一致性
designs = designs[designs['scRMSD'] < 2.0]
# 阶段 3:结合质量
designs = designs[(designs['ipTM'] > 0.5) & (designs['PAE_interaction'] < 10)]
# 阶段 4:序列合理性
designs = designs[designs['esm2_pll_normalized'] > 0.0]
# 阶段 5:表达检查(设计级别)
designs = designs[designs['cysteine_count'] % 2 == 0] # 偶数半胱氨酸
designs = designs[designs['instability_index'] < 40]
综合评分(排序必需)
单独使用单个指标太弱。使用综合评分:
def composite_score(row):
return (
0.30 * row['pLDDT'] +
0.20 * row['ipTM'] +
0.20 * (1 - row['PAE_interaction'] / 20) +
0.15 * row['shape_complementarity'] +
0.15 * row['esm2_pll_normalized']
)
designs['score'] = designs.apply(composite_score, axis=1)
top_designs = designs.nlargest(100, 'score')
有关高级综合评分,请参见 references/composite-scoring.md。
工具特定筛选
BindCraft 筛选级别
| 级别 | 使用场景 | 严格程度 |
|---|---|---|
| 默认 | 标准设计 | 最严格 |
| 宽松 | 需要更多设计 | 失败率更高 |
| 多肽 | 设计 < 30 AA | 成功率约低5-10倍 |
BoltzGen 筛选
boltzgen run ... \
--budget 60 \
--alpha 0.01 \
--filter_biased true \
--refolding_rmsd_threshold 2.0 \
--additional_filters 'ALA_fraction<0.3'
alpha=0.0:仅质量排序alpha=0.01:默认(轻微多样性)alpha=1.0:仅多样性
设计级别严重性评分
对于基于模式的检查,使用严重性评分:
| 严重级别 | 分数 | 措施 |
|---|---|---|
| 低 | 0-15 | 继续 |
| 中 | 16-35 | 审查标记问题 |
| 高 | 36-60 | 建议重新设计 |
| 严重 | 61+ | 必须重新设计 |
实验相关性
| 指标 | AUC | 用途 |
|---|---|---|
| ipTM | ~0.64 | 预筛选 |
| PAE | ~0.65 | 预筛选 |
| ESM2 PLL | ~0.72 | 最佳单指标 |
| 综合评分 | ~0.75+ | 始终使用 |
关键见解:指标作为过滤器(排除失败)有效,而非作为预测器(排序成功)。
设计活动健康评估
快速评估您的设计活动:
| 通过率 | 状态 | 解释 |
|---|---|---|
| > 15% | 优秀 | 高于平均水平,继续 |
| 10-15% | 良好 | 正常,继续 |
| 5-10% | 边缘 | 低于平均水平,审查问题 |
| < 5% | 差 | 存在显著问题,诊断 |
失败恢复树
通过 pLDDT 过滤的设计太少 (< 5% 且 pLDDT > 0.85)
整个活动 pLDDT 低
├── 检查 scRMSD 分布
│ ├── scRMSD 高 (>2.5Å):骨架问题
│ │ └── 修复:使用更低的 noise_scale (0.5-0.8) 重新生成骨架
│ └── scRMSD 低但 pLDDT 低:无序区域
│ └── 修复:检查设计长度,简化拓扑结构
├── 尝试每个骨架更多序列
│ └── modal run modal_proteinmpnn.py --num-seq-per-target 32 --sampling-temp 0.1
├── 使用 SolubleMPNN 替代 ProteinMPNN
│ └── 更适合表达优化的序列
└── 考虑不同的设计工具
└── BindCraft(集成设计)可能效果更好
通过 ipTM 过滤的设计太少 (< 5% 且 ipTM > 0.5)
整个活动 ipTM 低
├── 审查热点选择
│ ├── 热点是否表面暴露? (SASA > 20Ų)
│ ├── 热点是否保守? (检查 MSA)
│ └── 尝试 3-6 种不同的热点组合
├── 增加结合剂长度(更多接触面积)
│ └── 尝试 80-100 AA 而不是 60-80 AA
├── 检查界面几何
│ ├── 靶标平坦? → 尝试螺旋结合剂
│ └── 靶标凹陷? → 尝试更小的结合剂
└── 尝试全原子设计工具
└── BoltzGen(全原子,更好的堆积)
scRMSD 高 (> 50% 且 scRMSD > 2.0Å)
序列未指定预期结构
├── ProteinMPNN 问题
│ ├── 降低温度:--sampling-temp 0.1
│ ├── 增加序列数:--num-seq-per-target 32
│ └── 检查 fixed_positions 是否过度约束
├── 骨架几何问题
│ ├── 骨架可能不寻常/有张力
│ ├── 使用更低的 noise_scale (0.5-0.8) 重新生成
│ └── 降低 diffuser.T 到 30-40
└── 尝试不同的序列设计
└── ColabDesign(基于 AF2 梯度)可能效果更好
全部通过但无实验命中
硅学指标不预测亲和力
├── 生成更多设计(当前数量的10倍)
│ └── 计算指标假阳性率高
├── 增加多样性
│ ├── 更高的 ProteinMPNN 温度 (0.2-0.3)
│ ├── 不同的骨架拓扑
│ └── 不同的热点组合
├── 尝试不同的设计方法
│ ├── BindCraft(不同算法)
│ ├── ColabDesign(AF2 幻觉)
│ └── BoltzGen(全原子扩散)
└── 检查靶标是否可成药
└── 某些靶标本质上就困难
通过的设计太多 (> 50%)
通过率高得可疑
├── 检查阈值是否过于宽松
│ └── 使用严格阈值:pLDDT > 0.90, ipTM > 0.60
├── 验证预测质量
│ ├── 预测确实在运行吗?检查输出文件
│ └── 预测的是复合物,而不仅仅是单体吗?
├── 检查数据问题
│ ├── 同一序列被多次预测?
│ └── 错误的 FASTA 格式(缺少链分隔符)?
└── 应用多样性过滤器
└── 按 70% 同一性聚类,每簇取最佳
诊断命令
快速活动评估
import pandas as pd
df = pd.read_csv('designs.csv')
# 每个阶段的通过率
print(f"总设计数:{len(df)}")
print(f"pLDDT > 0.85:{(df['pLDDT'] > 0.85).mean():.1%}")
print(f"ipTM > 0.50:{(df['ipTM'] > 0.50).mean():.1%}")
print(f"scRMSD < 2.0:{(df['scRMSD'] < 2.0).mean():.1%}")
print(f"所有过滤器:{((df['pLDDT'] > 0.85) & (df['ipTM'] > 0.5) & (df['scRMSD'] < 2.0)).mean():.1%}")
# 识别首要问题
if (df['pLDDT'] > 0.85).mean() < 0.1:
print("问题:pLDDT 低 - 检查骨架或序列质量")
elif (df['ipTM'] > 0.50).mean() < 0.1:
print("问题:ipTM 低 - 检查热点或界面几何")
elif (df['scRMSD'] < 2.0).mean() < 0.5:
print("问题:scRMSD 高 - 序列未指定骨架")