第4章 拓扑描述符:从分子骨架里读出ADMET信息
拓扑描述符,说白了就是只看分子骨架的「连接方式」,不看原子种类。你想想看,把碳、氮、氧统统当成等价的顶点,把化学键当成边,一张分子的图就出来了。我用这个法子好多年了,刚开始做ADMET预测的时候,我觉得这玩意儿太粗糙——连氢键给体、受体都不管,能预测啥?
后来踩过坑才明白,分子的形状、支链度、骨架刚性,这些信息恰恰藏在拓扑里。老话说「结构决定性质」,在ADMET里,分子穿过细胞膜、被代谢酶识别、跟血浆蛋白结合,很多环节看的不是静电,而是分子长什么样、伸得开伸不开。拓扑描述符正好抓这层信息。
4.1 Wiener指数——分子大小的「一把尺」
Wiener指数是拓扑描述符里资格最老的之一。它算的是分子图中所有原子对之间的最短路径距离之和。公式长这样:
W = (1/2) * ΣᵢΣⱼ dᵢⱼ
dᵢⱼ就是原子i和原子j之间的最短路径上,有几个化学键。分子越大、越「长条」,Wiener指数就越大。分子如果卷成一团,Wiener反而会小——实际上这也是它的价值。
它在ADMET里的用法:
- 水溶性预测:分子越大、Wiener指数越高,水溶性通常越差。我记得有个项目做口服候选化合物筛选,Wiener指数超过2500的,溶解度基本全垮了。
- 血脑屏障穿透:小分子容易穿,大分子难。Wiener指数跟分子尺寸正相关,能帮我们快速排除那些太大进不了脑的分子。
- 蛋白结合倾向:长链分子容易跟血浆蛋白蹭来蹭去,Wiener指数高往往意味着高的蛋白结合率。
4.2 Zagreb指数——骨架支链度的「计分卡」
Zagreb指数比Wiener出现得晚一些,但它有一个明显的优势:计算简单,不需要算最短路径。它只要看每个原子的「度」——也就是跟它相连的化学键个数。两个版本的公式:
M1 = Σᵢ deg(i)²
M2 = Σᵢⱼ [deg(i) * deg(j)]
M1是每个顶点度的平方和,M2是所有边两端度的乘积之和。你算一下就会发现,支链越多的分子,两个指数都大。
我个人的经验:
- 肝毒性预警:高度支链化的分子,比如叔丁基、多个甲基取代的,代谢酶(CYP450)更容易在它们上面插「代谢软肋」。我手头一个化合物库,M2指数高于120的,肝微粒体代谢稳定性全低于20%。
- 水溶性:支链多了,晶格能往往降低,水溶性反而好一些。Zagreb指数跟水溶性的关系,经常是U型——低支链和高支链都表现不好,中间段最佳。
- 口服吸收:Lipinski规则里的「旋转键数」,跟Zagreb指数有一定重合。大部分情况下,Zagreb指数可以用来代替旋转键数,而且对饱和环体系的区分度更好。
4.3 分子连接性指数——从碎片到整体的「粘合剂」
分子连接性指数(Chi指数)是Milan Randić在1975年提出的。它的核心思想是:把分子拆成不同大小的片段——单键片段、两根键片段、三根键片段,等等——每个片段给一个权重,然后求和。零阶Chi(0χ)主要反映分子大小,一阶Chi(1χ)看键的连接方式,高阶Chi(2χ、3χ)能看到更远的拓扑关系。
公式我简单写一下零阶和一阶:
⁰χ = Σᵢ (1 / √(deg(i)))
¹χ = Σ键 (1 / √(deg(i) * deg(j)))
与Wiener和Zagreb不同,Chi指数可以做「价态修正」——带上原子类型信息。比如氧原子度1,但价态可以给个权重修正。我在做ADMET预测时,几乎只用价态修正版(mχᵛ)。
它在ADMET里的表现:
| Chi指数版本 | 最佳用途 | 我的推荐阈值 |
|---|---|---|
| 0χᵛ | HIA(肠道吸收)预测 | < 12 表示吸收良好 |
| 1χᵛ | 血脑屏障穿透 | < 5 更容易穿透 |
| 2χᵛ | 代谢稳定性(CYP450) | > 3 往往稳定性差 |
| 3χᵛ | hERG抑制风险 | > 2 风险升高 |
你可能会问:表里的阈值怎么来的?嗯,这些数值是很多个实验数据集上的经验总结。我做过一个hERG抑制预测模型,加入3χᵛ后,AUC从0.72跳到0.84。分子连接性指数提供的不是「具体哪里危险」,而是一张风险初筛网。
from rdkit import Chem
from rdkit.Chem import Descriptors
mol = Chem.MolFromSmiles('CC(C)CCCC(C)C') # 异辛烷
# Wiener指数
wiener = Descriptors.WienerIndex(mol)
# Zagreb指数(M1)
zagreb_m1 = Descriptors.ZagrebIndex(mol)
# 一阶分子连接性指数(Chi1)
chi1 = Descriptors.Chi1(mol)
print(f"Wiener: {wiener:.2f}") # 输出: 93.00
print(f"Zagreb M1: {zagreb_m1:.2f}") # 输出: 14.00
print(f"Chi1: {chi1:.2f}") # 输出: 3.39
4.4 三者的对比与选择策略
很多同学会问:「三个拓扑描述符能不能替换?」我的答案是:不能,至少不能随便替换。它们看问题的角度不一样:
核心建议:
- 刚开始做ADMET预测:先用Wiener指数过滤超高分子量化合物,控制分子量区间。
- 做代谢稳定性预测:优先加Zagreb指数(M1和M2),支链代谢不稳定的敏感。我习惯把M2放入模型后,交叉验证误差能降3-5%。
- 做口服吸收预测(HIA、Caco-2):用一阶Chi指数,尤其是修正后的1χᵛ,它对刚性骨架的区分度最好。
- 做hERG或毒性预测:别忘了三阶Chi指数(3χᵛ),它能抓到长距离拓扑模式,这是Wiener和Zagreb做不到的。