分子胶(见 357《分子胶 Molecular Glue》)无法像 PROTAC 那样模块化组装,发现主要依赖筛选与数据挖掘。这篇给出几条可操作的策略。
策略一:从公开数据中挖掘候选
核心思路:找出「细胞活性强、但没有已知靶点」的化合物——这类分子可能通过尚未阐明的机制起效,其中部分可能是分子胶。
import pandas as pd
import numpy as np
# 数据源:
# PRISM Repurposing(见 267):约 500 细胞系 × 4500 化合物
# GDSC(见 266)、CTRP
# PubChem BioAssay(见 227)
def find_orphan_actives(activity_matrix, compound_meta,
potency_threshold=-1.0, selectivity_max=0.3):
"""找出有选择性活性但机制未知的化合物"""
# 1) 有强活性
strong = (activity_matrix < potency_threshold)
n_active = strong.sum(axis=0)
# 2) 但不是普遍细胞毒(选择性活性)
frac_active = strong.mean(axis=0)
selective = (n_active >= 10) & (frac_active < selectivity_max)
# 3) 机制未知
known_moa = compound_meta.set_index("compound_id")["moa"]
unknown = known_moa.isna() | (known_moa == "unknown")
candidates = activity_matrix.columns[
selective & unknown.reindex(activity_matrix.columns).fillna(True)]
return list(candidates)
# 4) 进一步:活性谱与已知分子胶(如 IMiDs)相似的化合物
# 可能通过类似机制起效
from scipy.spatial.distance import cosine
def similar_activity_profile(matrix, reference_compound, top_n=50):
ref = matrix[reference_compound].dropna()
sims = {}
for col in matrix.columns:
if col == reference_compound:
continue
common = ref.index.intersection(matrix[col].dropna().index)
if len(common) < 50:
continue
sims[col] = 1 - cosine(ref[common], matrix.loc[common, col])
return sorted(sims.items(), key=lambda x: -x[1])[:top_n]
策略二:关联依赖性数据
# 思路:如果某化合物的活性谱与某个基因的依赖性谱高度相关,
# 提示该化合物可能作用于该基因产物
import pandas as pd
from scipy import stats
def correlate_with_dependency(drug_response, gene_dependency, min_overlap=100):
"""药物响应谱 vs 基因依赖性谱的相关性
drug_response: 细胞系 × 药物
gene_dependency: 细胞系 × 基因(DepMap,见 264)
"""
results = []
common_cells = drug_response.index.intersection(gene_dependency.index)
if len(common_cells) < min_overlap:
return None
dr = drug_response.loc[common_cells]
gd = gene_dependency.loc[common_cells]
for drug in dr.columns:
d = dr[drug].dropna()
for gene in gd.columns:
g = gd[gene].dropna()
idx = d.index.intersection(g.index)
if len(idx) < min_overlap:
continue
r, p = stats.pearsonr(d[idx], g[idx])
if abs(r) > 0.4:
results.append({"drug": drug, "gene": gene,
"r": r, "p": p, "n": len(idx)})
return pd.DataFrame(results).sort_values("p")
# 强正相关(药物有效的细胞系也依赖该基因)
# → 化合物可能作用于该基因产物
# 对分子胶而言,也要看是否与某个 E3 的依赖性相关
# → 提示该化合物依赖那个 E3 起效
策略三:降解组学筛选(最直接)
# 实验设计(关键在对照)
# 1) 化合物处理细胞(多浓度 × 多时间点)
# 2) 定量蛋白组学(TMT / LFQ + LC-MS/MS)
# 3) 找显著下调的蛋白
# 必备对照 —— 缺一不可:
# a) 蛋白酶体抑制剂(MG132/硼替佐米)共处理
# → 降解被阻断 = 蛋白酶体依赖
# b) NEDD8 激活酶抑制剂(MLN4924)共处理
# → 降解被阻断 = CRL 类 E3 依赖
# c) E1 泛素激活酶抑制剂
# → 确认泛素依赖
# d) 候选 E3 敲除/敲低细胞
# → 确认依赖哪个 E3
# e) 转录组对照(RNA-seq 或 qPCR)
# → 排除是转录下调而非蛋白降解
# 第 e 条最容易被忽略:蛋白水平下降
# 也可能是转录减少,这不是分子胶机制
策略四:结构导向的候选筛选
# 若目标是找某个已知 E3 的新分子胶:
# 1) 分析该 E3 的底物识别表面
# - 用已知结构找出浅而宽的表面凹陷
# - 这类表面难以被常规抑制剂占据,但适合分子胶「垫」在中间
# 2) 虚拟筛选结合该表面的小分子
# - 常规对接方法(见 336)
# - 但注意:分子胶对 E3 的亲和力可能很弱(μM 甚至更弱),
# 对接打分的区分度有限
# 3) 预测可能的新底物
# - 分析化合物结合后 E3 表面性质如何改变
# - 用蛋白-蛋白对接筛选可能被招募的底物
# - 这一步目前可靠性很低
# 4) 共价片段筛选
# 许多 E3 表面有可及的半胱氨酸,
# 共价片段库筛选是发现新 E3 配体的有效手段
验证流程
- 1. 确认是降解而非转录抑制:蛋白与 mRNA 水平同时测。
- 2. 确认蛋白酶体依赖:蛋白酶体抑制剂共处理应阻断效应。
- 3. 确认泛素化:免疫沉淀 + 泛素 Western,或质谱检测泛素化位点。
- 4. 鉴定 E3:CRISPR 筛选或候选 E3 敲低。
- 5. 证明三元复合物:TR-FRET、AlphaLISA 或共免疫沉淀。
- 6. 结构确证:三元复合物的共晶结构是最强证据。
- 7. 选择性评估:全蛋白组学看还降解了什么(脱靶降解)。
AI 目前能做什么
| 任务 | 成熟度 |
|---|---|
| 从活性数据挖掘候选 | 可行,主要是数据分析 |
| 机制去卷积(关联依赖性/转录组) | 可行,见 268《LINCS L1000》 |
| 已知分子胶的 SAR 优化 | 可行,常规 QSAR |
| 三元复合物结构预测 | 探索中,可靠性有限 |
| 预测新底物(neosubstrate) | 不成熟 |
| 从头设计新分子胶 | 不成熟 |
关键要点
- 「活性强但机制未知」的化合物是分子胶候选的重要来源;
- 把药物响应谱与 DepMap 依赖性谱关联,是机制去卷积的实用方法;
- 降解组学筛选必须配齐对照,尤其是转录组对照排除转录抑制;
- AI 目前能辅助挖掘与优化,从头设计新分子胶仍不现实。