363

分子胶发现:数据库挖掘与 AI 筛选策略

分子胶难以理性设计,发现主要靠数据挖掘与筛选。这篇给出可操作的挖掘策略、筛选设计与验证流程。

分子胶(见 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 目前能辅助挖掘与优化,从头设计新分子胶仍不现实。

延伸资源