Module 02 · EGFR 分子比较:表示、性质、结构警示、指纹相似性与共同子结构
数据来源:TeachOpenCADD 数据包(Volkamer Lab,固定提交 4efdbd36…),原始表来自 ChEMBL。
计算环境:RDKit 2025.09.6 / Python 3.11。
本文档为修订版:修订内容与原因见 REVISIONS.md。
阅读约定:下文每条结论都标注类型—— [实测] 由本模块代码在冻结输入上算出,可用
data/或figures/*.csv复核; [推测] 化学/软件常识的读法,本模块未提供独立证据; [边界] 方法适用范围、已知失败或未覆盖之处。
1. 数据与语义
| 冻结输入 | 文件 | 规模 | 角色 |
|---|---|---|---|
| T001 EGFR 活性表 | T001_query_chembl/data/EGFR_compounds.csv |
5568 | 全量 ChEMBL 查询集,含 IC50(nM) 与 pIC50 |
| T002 类药性子集 | T002_compound_adme/data/EGFR_compounds_lipinski.csv |
4635 | 上游 Ro5 通过集(本模块的分析批次) |
| T003 警示目录 | T003_compound_unwanted_substructures/data/unwanted_substructures.csv |
105 条 SMARTS | 结构警示分子式目录 |
| T005 最大簇 | T005_compound_clustering/data/molecule_set_largest_cluster.sdf |
145 | 冻结聚类参照(成员身份用于校验) |
路径与 SHA256 记录在 data/input_inventory.csv。原始输入只读。
[实测] pIC50 = −log10(IC50 / M) 逐行成立(pIC50 范围 1.602–11.523)。
[边界] 每个分子只有一条 ChEMBL IC50 记录;gefitinib 的 pIC50 = 6.29 是"这条记录",不是临床效力排名。
[实测+选择] "活性"沿用 T004 定义 pIC50 ≥ 6.3,即 IC50 ≤ 501 nM ≈ 0.50 µM;全量中 3256 个达到该线。这是人为选择,不是普适分界(图示为虚线)。
2. 结果
2.0 一图总览
A 筛选漏斗;B 两套警示目录的命中率;C 相似度对指纹表示的依赖;D 冻结 T005/T006 参照结果。
2.1 同一批例子的四种表示(图 A)
以 gefitinib(CHEMBL939) 为例:
| 表示 | 它是什么 | 关键区别 |
|---|---|---|
| SMILES | 一串字符 | [实测] 46 个字符,分子只有 31 个重原子;Cl 占两字符,括号与环闭合数字各成字符类别 |
| One-hot | 字符→向量(词表 12 × 位置 46) | 位置是字符位置,不是原子编号;长度随写法变化 |
| 分子图 | 原子=节点、键=边 | [边界] 图保留的是它所编码的属性(元素/键级/电荷/手性),不是三维构象 |
| 指纹 | 定长比特向量 | [边界] 有损摘要,不保留原子对应关系 |
[实测] gefitinib 的 MACCS 与 Morgan 恰好都是 60 位为 1——巧合,含义不同。MACCS = 预定义结构键;Morgan = 哈希后的环形环境。 [实测] MACCS 的 167 位里有 30 位在整批 4635 个分子中几乎不出现,故其置位偏靠后。
2.2 性质与类药性(图 B)
Ro5 采用 T002 参考过滤(500 Da / HBA 10 / HBD 5 / logP 5,允许至多一项违规)。
[实测] 按分子 ID 的过滤表比对(data/property_membership_check.csv):
| 项 | 结果 |
|---|---|
| T002 是否为重算 ≤1 集合的子集 | 是;唯一差异 27 个分子(重算接纳、上游排除) |
ExactMolWt / MolLogP |
完全一致 |
NumHDonors |
100% 一致 |
NumHAcceptors |
仅 76.2% 一致;上游系统性更高(差值 0~3,23.8% 的行上游更高) |
[推测] 首版称该差异源于"旧版 RDKit 的 HBA 定义"。本模块无独立版本证据:我检验并否定了一个具体机制假说("上游把某类氮计入受体",成立率仅 0.477)。因此成因未证实,仅能确认两套数值不同。 [边界] 上游未保留被排除分子的 HBA 值,该比对只能在 4635 个保留分子上进行;被排除的 933 个分子只能核对通过/不通过归属。 [实测] 大体积的 lapatinib(580 Da、logP 6.14)有 2 项违规而被排除——[推测] 这正是"规则是启发式、不等于疗效判决"的例证。
2.3 结构警示(图 C)
[实测] 警示在全量 5568 个分子上计算(覆盖 5568/5568,证据 data/alerts_all.csv 的 alert_checked 列);下表为 4635 个批次分子上的命中率:
| 目录 | 条目数 | 命中 |
|---|---|---|
| PAINS | 480 | 408(8.8%) |
| Brenk | 105 | 2454(52.9%) |
[实测] 随附 unwanted_substructures.csv(105 条)与 RDKit BRENK 在本批次上命中集合一致(一致率 1.000)。
[推测] 这不等于两者定义完全相同,也不能解释上游派生文件(_noPAINS)的命名与历史。
[实测] 最常见 Brenk 警示:Michael_acceptor_1 1252、Aliphatic_long_chain 507、Oxygen-nitrogen_single_bond 426。
[猜测→已降级] 首版把"迈克尔受体警示"等同于"共价 EGFR 抑制剂的药效团"。警示本身不能证明某个化合物具有实验验证过的共价机制;它只提示需要核查。
[实测] 带警示的分子里同样有高活性成员(图 C 箱线图),所以警示不是丢弃的理由。
2.4 指纹相似性(图 D)
[实测] 随机取 400 个分子(seed 0),计算 79,800 对:
| 量 | MACCS(167) | Morgan r2(2048) |
|---|---|---|
| Tanimoto 均值 | 0.441 | 0.158 |
| 相似度 = 1.00 的分子对 | 8 对(并列) | 0(除自身) |
[实测] gefitinib 的前 8 个近邻中,两种指纹下只有 4 个重合 → 相似性排序依赖表示。
[实测] Tanimoto c/(a+b−c) 与 Dice 2c/(a+b) 单调相关但数值不同(a、b 为各自为 1 的位数,c 为共同为 1 的位数),Dice 通常更大。
[实测] gefitinib 与 dacomitinib 最接近(Morgan 0.53),与 osimertinib 仅 0.17——与结构直觉一致。
2.5 冻结最大簇与共同子结构(图 E)
(a)忠实重建 T005 — [实测] 参照实现为 RDKit path 指纹 maxPath=5 + Butina 距离 0.2:1128 个簇,最大簇 145 个成员,与随附 SDF 的成员 Jaccard = 1.0000(完全一致)。
[边界] Butina 阈值只约束中心↔成员距离:冻结簇内仅 73.0% 的分子对满足距离 ≤0.2,最大簇内距离 0.33。
[边界] 参照说明明确:"Matching a cluster's size does not establish matching membership" —— 不能靠换指纹/阈值去凑数量。
(b)冻结集上的 MCS(T006) — [实测](data/frozen_mcs_records.csv,含每次搜索的 SMARTS、145 个成员 ID、约束与状态):
| 设置 | 原子/键 | 状态 |
|---|---|---|
support 1.0(共同于全部),RingMatchesRingOnly=True |
22 / 24 | 0.0 s 完成 |
support 0.8,RingMatchesRingOnly=True |
28 / 30 | 63.9 s 完成 |
support 0.8 + CompleteRingsOnly=True |
(28) | 60.5 s 被取消 |
[边界] CompleteRingsOnly 是额外约束(要求映射环的原子全部在场),与 RingMatchesRingOnly 不是同一选项;加上它,同一 support 在预算内无法完成。取消 ≠ 证明最大值(图中以斜纹柱与图注标示)。
(c)返回的查询图本身(不推断骨架名) — [实测] 22 原子 / 24 键,元素 C16 N4 O2,3 个六元环。
[实测] 在 145 个冻结成员上的基序支持:4-苯胺基喹唑啉基序 145/145、喹唑啉双环 145/145、酰胺 145/145(data/frozen_motif_support.csv,各含 SMARTS)。
[推测] 把该查询图读作"4-苯胺基喹唑啉核心 + 酰胺 + 醚连接"是化学解读;上文给出的是可核验的实测支持数。
2.6 聚类与 MCS 扩展(图 G,独立于冻结参照)
以下为本模块新增的探索,与 T005/T006 冻结参照严格分开,不能当作参照结果引用。
- [实测] 阈值敏感性(同为 path 指纹):距离 0.1→最大簇 70;0.2→145;0.3→282;0.4→(更大)。阈值越松,分组越松。
- [实测] 表示敏感性(同为距离 0.2):path 指纹→145;MACCS→305;Morgan r2→51。同一阈值下换指纹,簇规模差数倍。
- [实测] 多样子样本(无偏 20 个,support 0.7)公共片段仅 7 个原子。
- [边界] 抽样 20 个分子的公共片段小,不足以说明整库没有更大的共享骨架。
2.7 哪些分子值得继续研究(图 F)
[实测] 三条候选谓词的实际含义(data/candidate_rules.csv,alert_unchecked 均为 0):
| 规则 | 类药集合 | 无警示 | 且活性 pIC50≥6.3 |
|---|---|---|---|
| Ro5 违规 =0(严格) | 3056 | 1488 | 767 |
| Ro5 违规 ≤1(上游 T002 批次) | 4635 | 2088 | 1113 |
| Ro5 违规 ≤1(RDKit2025 重算) | 4662 | 2089 | 1114 |
[边界] 三条谓词的分母不同("至多一项违规"与"零违规"是不同规则),引用时必须写明用了哪一条。图 B 的 B 面板用严格规则。
[实测] 严格规则下 pIC50 最高的候选包括 CHEMBL35820(11.22, 387 Da)、CHEMBL53711(11.22, 343 Da)、CHEMBL66031(11.10, 339 Da)。
推荐等级(区分证据强度)
- 优先深入:违规 0 + 无警示 + 高 pIC50(上表第一行集合)——结构紧凑、性质友好。
- 值得优化:高活性但带 1 条警示(如
Michael_acceptor_1)——[推测] 这类基团在共价抑制剂中常见,但警示本身不证明共价机制,应核实而非直接丢弃。 - 需要谨慎:违规 ≥2(如 lapatinib 型大分子)——类药性风险更高。
[边界] 全部结论的适用范围:以上基于计算属性与结构规则。pIC50 来自 ChEMBL 单条 IC50 记录、未做实验重复;Ro5 与警示目录均为启发式;指纹相似度依赖所选指纹;共同子结构依赖簇与 support。这些结论支持"排优先级",不构成亲和力、选择性、成药性或临床有效性的证明。
3. 产物与复现
module-02/
├── REVISIONS.md # 修订记录(含本次补充)
├── README.md # 模块说明与命令
├── summary.json # 机器可读摘要
├── code/
│ ├── molkit.py # 化学工具库(输入目录可配置)
│ ├── figures_mod02.py # 8 组图 + 字形守卫
│ ├── run_module02.py # 单一命令入口(--input-dir/--out/--redraw)
│ ├── patch_alerts_and_mcs.py # 本次针对性修正脚本
│ └── build_report_html.py # 报告渲染
├── data/ # 全部派生表(含 input_inventory.csv 与各证据记录)
├── figures/ # 8 组图,每张 .png(+.pdf/.svg) 配同名 .csv
└── report/REPORT.md · REPORT.html
# 完整分析(新目录、全新进程)
python code/run_module02.py --input-dir <data pack> --out <new dir> --report-md report/REPORT.md
# 仅重绘(读取已存记录,不重跑聚类/MCS)
python code/run_module02.py --input-dir <data pack> --out <existing dir> --redraw
独立验证:本次已在一个新目录(module-02-cli-run/)中用全新进程执行上述命令(约 4.4 分钟),8 组图与全部数据表均由该命令产出;随后用 --redraw(约 32 s,不调用 MCS 搜索)套用图表修正。
依赖:python≥3.10、rdkit、numpy、pandas、matplotlib(--report 另需 markdown)。固定 seed=0。
4. 来源与许可
- 教学数据与章节结构:Volkamer Lab TeachOpenCADD(各章节作者与贡献者),固定提交
4efdbd36723b5d07960142e15df393d7c6df2ba1,CC BY 4.0。 - ChEMBL 数据及其整理表:保留数据库标识与版本,CC BY-SA 3.0。
- 实现:RDKit(BSD-3)。方法学参考 RDKit Book。
- 本模块的适配、计算、修订与中文解读为本次课程新做,不改变第三方材料的授权条款。