3. 蛋白质结构数据库与AlphaFold预测结果解读

做药物发现的,天天跟蛋白质结构打交道。

以前拿到一个新靶点,第一反应是去PDB里翻一翻。翻到了,皆大欢喜。翻不到?那就只能做同源模建,或者试试NMR、冷冻电镜——周期长、成本高,还不一定成功。我早年做过一个激酶项目,PDB里只有不完整的apo结构,硬是靠着同源模建凑合了半年,结果AlphaFold一出来,直接把完整的激活态结构预测好了。说实话,当时心情挺复杂的。

3.1 PDB数据库:金标准与局限性

PDB(Protein Data Bank)是目前最权威的实验结构数据库。到2024年,它存了超过20万个结构。这些结构来自X射线晶体学、NMR、冷冻电镜。它们是药物发现的基石——对接、虚拟筛选、结合自由能计算,都依赖它。

但PDB有个现实问题:覆盖率严重不足。

我举几个数字你就明白了:人类蛋白质编码基因大约2万个,PDB里有人类结构的不到1/3。而且,很多结构是截短的、缺失loop的、或者跟小分子共结晶的复合体。你辛辛苦苦找到一个新靶点,大概率在PDB里找不到高质量的结构。

下面这个表格总结了PDB的常见限制:

PDB结构的常见问题 对药物发现的影响
缺少apo/未结合状态结构 无法准确模拟天然构象
分辨率不够(>3.5 Å) 侧链位置不准确,影响对接精度
loop区缺失或无序 结合口袋完整性受影响
仅提供截短结构域 无法研究全蛋白功能
有晶体堆积效应 构象可能偏离溶液状态

我个人习惯的做法是:先用PDB。能找到分辨率2.5 Å以内的同源结构,那就直接用它。找不到?或者目标跟模板序列一致性低于30%?嗯,这时候就该AlphaFold上场了。

3.2 AlphaFold预测结果的核心指标

AlphaFold的预测结果,不只是输出一个3D坐标文件。它附带了两个关键的可信度指标:pLDDT 和 PAE。

很多新入行的朋友只看结构本身,不看置信度。我在项目里踩过这个坑——拿着一个pLDDT很低的预测结构去做对接,结果筛选出来的化合物全是假阳性。

3.2.1 pLDDT:局部置信度

pLDDT(predicted Local Distance Difference Test)是一个0-100的分数。它表示每个残基的预测坐标跟真实结构的偏差程度。

一般来说:

  • pLDDT > 90:高度可信。相当于X射线衍射分辨率在2.0-2.5 Å的结构。
  • 70 < pLDDT < 90:整体骨架可信,但侧链可能有偏差。
  • 50 < pLDDT < 70:只有低层级的拓扑结构可信,不适合做基于结构的药物设计。
  • pLDDT < 50:无序区域或预测失败。

我曾经处理过一个GPCR靶点,AlphaFold输出了它所有loop区的pLDDT。结果发现,有一个胞外loop的pLDDT只有45。后来我们用分子动力学模拟跑了一下,那个区域果然是高度柔性的。所以,pLDDT低的地方,就别强行去对接受体了。

3.2.2 PAE:域间置信度

PAE(Predicted Aligned Error),是一个成对残基的误差矩阵。它告诉你,如果你把两个残基叠在一起,它们之间的预测误差有多大。

PAE的关键用途:判断结构域之间的相对位置是否可信。

假如你有一个多结构域的蛋白。pLDDT可能显示每个结构域内部都不错(>85),但PAE显示结构域之间的PAE值很高(>10 Å)。这说明,AlphaFold能准确预测每个结构域的内部折叠,但它不知道这些结构域之间怎么摆放。

这对药物发现很重要。如果一个结合口袋跨越两个结构域,而这两个结构域的PAE很高,那你拿这个全蛋白结构去做对接,很可能得到错误的构象。

小技巧:在AlphaFold2的output中,找到 result_model_*.pkl 文件,用Python加载PAE矩阵,可以快速判断多结构域蛋白的构象不确定区域。

3.3 从PDB到AlphaFold:知识体系图

下面的SVG图,我看是帮你梳理从PDB到AlphaFold预测结果的应用链条。嗯,对照着看,应该会清晰很多。

蛋白质结构数据获取与评估流程 PDB实验结构 覆盖率低 分辨率差 / loop缺失 AlphaFold预测结构 pLDDT局部可信度 残基尺度 PAE域间误差 域间尺度 判断结合位点 / 对接 / 虚拟筛选 综合pLDDT和PAE决定可用于药物发现 PDB局限时 使用AlphaFold补充 或替代

3.4 如何解读AlphaFold的预测文件

结构预测文件和置信度文件,是同时产生的。我来带你看看关键文件的内容。

3.4.1 主要输出文件

用AlphaFold2跑完一个单链预测后,你会得到类似这样的目录结构:

alphafold_output/
├── ranked_0.pdb      # 最佳模型(按整体pLDDT排序)
├── ranked_1.pdb      # 次佳模型
├── ranked_2.pdb      # 
├── ranked_3.pdb      # 
├── ranked_4.pdb      # 第五名模型
├── unrelaxed_model_*.pdb  # 未能量最小化的原始输出
├── result_model_*.pkl     # 包含pLDDT和PAE的pickle文件
└── predicted_aligned_error.json  # 人类可读的PAE矩阵

我个人习惯,在药物发现项目中,至少保留ranked_0到ranked_2这三个模型。因为AlphaFold的采样会生成多种可能的构象,尤其是柔性loop和结构域相对位置,不同rank之间可能有差异。保留多个模型,可以帮你评估构象多样性。

3.4.2 解析pLDDT分数

pLDDT直接存储在PDB文件的B-factor列里。你可以用任何PDB查看器,按B-factor着色,就能看到每个残基的可信度。

也可以用脚本批量提取:

from Bio import PDB

parser = PDB.PDBParser(QUIET=True)
structure = parser.get_structure("target", "ranked_0.pdb")
plddt_per_residue = {}
for model in structure:
    for chain in model:
        for residue in chain:
            # B-factor列就是pLDDT
            plddt = residue["CA"].get_bfactor()
            plddt_per_residue[residue.id[1]] = plddt

# 打印平均pLDDT
avg_plddt = sum(plddt_per_residue.values()) / len(plddt_per_residue)
print(f"Mean pLDDT: {avg_plddt:.2f}")

我在做虚拟筛选之前,一定会先算一下结合口袋周围的平均pLDDT。如果低于70,我就不敢用。你想想看,如果口袋本身都是低置信度区域,那筛选结果大概率是噪声。

3.4.3 解析PAE矩阵

PAE是一个N×N的矩阵,N是残基总数。PAE[i][j]表示,如果你把残基i对齐,残基j的预测坐标误差有多大。

我建议关注两点:

  • 域内PAE:通常很低(<3 Å)。说明结构域内部折叠稳定。
  • 域间PAE:如果>8 Å,说明这些结构域之间的相对位置不可信。

下面是一段解析PAE的代码,你可以快速生成一个热图:

import json
import numpy as np
import matplotlib.pyplot as plt

with open("predicted_aligned_error.json") as f:
    data = json.load(f)

pae = np.array(data["predicted_aligned_error"])
# pae.shape: (N, N)

# 打印域间PAE的平均值(比如残基1-100和残基200-300之间)
domain1 = slice(0, 100)
domain2 = slice(200, 300)
inter_domain_pae = pae[domain1, domain2].mean()
print(f"域间平均PAE: {inter_domain_pae:.2f} Å")
重要警告:千万不要直接拿PAE高的多结构域预测结构去做对接。我曾经见过一个案例,PAE显示两个结构域有15 Å的误差,结果用第一个结构域对接出来的化合物,在第二个结构域的结合位点完全找不到。一定要先用PAE评估域间可信度,或者用分子动力学模拟来松弛结构。

3.5 结构化数据读取的技巧

AlphaFold的pickle文件(.pkl)是Python序列化格式,包含了完整的预测数据。你可以用下面的方式加载:

import pickle

with open("result_model_1.pkl", "rb") as f:
    data = pickle.load(f)
    plddt = data["plddt"]  # 形状: (N,)
    pae = data["predicted_aligned_error"]  # 形状: (N, N)

我项目里的做法是,写一个简单的函数,输出每个结构域的平均pLDDT和域间PAE。这样可以快速决定:这个AlphaFold结构,值不值得花时间做后续处理。

3.6 避坑指南:实战经验总结

  • 不要只看整体pLDDT。整体pLDDT可能很高(85),但结合口袋区域的pLDDT可能只有60。一定要检查结合位点附近的局部置信度。
  • 多模型对比。AlphaFold的5个模型可能给出不同的构象。我通常把5个模型都保留下来,做聚类分析,找到最可能的构象集合。
  • PAE是域间定位的关键。曾经有一个多结构域磷酸酶项目,pLDDT全链80以上,但PAE显示域间误差12 Å。最终我们用了AlphaFold的预测结构做多构象对接,而不是单个结构。
  • 不信任低pLDDT区域的侧链。即使主链位置大概正确,低pLDDT区域的侧链方向也经常是错的。做对接时,建议把这些区域的侧链设为柔性,或者用Rotamer库优化。
核心思路:PDB是起点,AlphaFold是补充。PDB有结构时,优先用它。PDB不行时,AlphaFold能提供高置信度的替代方案,但必须用pLDDT和PAE来评价置信度。在药物发现中,结构越可信,筛选的假阳性率越低。记住,我们做的是药物,不是做结构预测本身。结构预测只是工具,解读工具的输出,才是真正决定成败的关键。