跳转至

343_药物重定位计算方法


一句话说明

药物重定位(Drug Repositioning)就是"老药新用"——用计算方法找出现有药物能不能治疗其他疾病,省下十几年和几十亿的新药研发成本。


核心知识点

要点1:为什么要计算重定位?

白话类比:就像你发现家里的感冒药顺手治好了头痛,研究者想系统化地找出"老药还能治什么新病"。 专业解释:传统新药研发平均需要12年、26亿美元,而重定位药物已有安全性数据,审批快3-5年。通过基因组学、网络药理学和机器学习,可大规模预测药物-疾病匹配。

要点2:基于基因组学的方法(CMap/LINCS)

白话类比:如果某个药让基因表达"逆转"了疾病状态,这个药可能有效。 专业解释:Connectivity Map(CMap/LINCS)数据库收录了数千种药物处理后的基因表达谱。通过计算药物处理和疾病差异表达的反向相关性(GSEA/KS评分),找候选药物。

要点3:网络药理学方法

白话类比:疾病和药物都在一张"人际关系网"里,共享"朋友"的药可能有效。 专业解释:构建疾病基因-蛋白互作网络(PPI),再将药物靶点投影到网络上,计算药物与疾病的网络接近度(Network Proximity Score)。Z-score < -1.5通常视为候选。

要点4:机器学习与深度学习

白话类比:让AI从已知有效的"老药新用"案例中学习规律,再去预测新的组合。 专业解释:特征包括药物化学结构(Morgan指纹)、靶点相似性、副作用相似性等。算法包括:矩阵分解(协同过滤)、图神经网络(GNN)、知识图谱嵌入(TransE、RotatE)。

要点5:药物基因组工具链

白话类比:从基因变异推断"这个患者对哪种药反应好",再结合疾病反推哪种药可以转用。 专业解释:PharmCAT从VCF解析药物基因组表型;Stargazer(现为PyPGx)处理CYP2D6等复杂基因的拷贝数;结合ClinVar、PharmGKB注释药物-基因关联。


实战命令/代码

# ========== 方法1:CMap/LINCS 基因组学重定位 ==========

# 安装 cmapR(R包,读取LINCS GCT格式)
# install.packages("BiocManager")
# BiocManager::install("cmapR")

# Python版:使用 clue.io API 查询药物特征谱
pip install cmapPy  # 安装cmapPy包

python3 << 'EOF'
import cmapPy.pandasGEXpress.parse as pe  # 导入解析模块

# 读取LINCS Level5基因表达数据(GCTx格式)
ds = pe.parse("GSE70138_Broad_LINCS_Level5_COMPZ.MODZ_n118050x12328.gctx")

# 提取特定药物的基因表达变化(示例:伊马替尼imatinib)
drug_sig = ds.data_df["imatinib_PC3_6H_10um"]

print("药物处理基因数:", len(drug_sig))  # 输出基因数量
EOF
# ========== 方法2:网络接近度计算 ==========
import networkx as nx       # 图网络分析
import numpy as np          # 数值计算

def network_proximity(G, drug_targets, disease_genes):
    """
    计算药物靶点与疾病基因的网络接近度
    G: 蛋白互作网络图
    drug_targets: 药物靶点列表
    disease_genes: 疾病相关基因列表
    """
    # 过滤不在网络中的节点
    dt = [n for n in drug_targets if n in G]
    dg = [n for n in disease_genes if n in G]

    if not dt or not dg:
        return None

    # 计算所有药物靶点到疾病基因的最短路径
    distances = []
    for t in dt:
        for g in dg:
            try:
                d = nx.shortest_path_length(G, t, g)  # 最短路径
                distances.append(d)
            except nx.NetworkXNoPath:
                pass  # 不连通则跳过

    # 平均最短路径距离
    if distances:
        return np.mean(distances)
    return float('inf')

# 示例:加载STRING数据库的蛋白互作网络
# G = nx.read_edgelist("string_interactions.tsv", delimiter='\t')
# ========== 方法3:PharmCAT分析药物基因组 ==========
# 前提:已运行PharmCAT生成JSON报告

library(jsonlite)   # 读取JSON
library(dplyr)      # 数据处理

# 读取PharmCAT输出的药物基因组报告
report <- fromJSON("pharmcat_output.json")

# 提取基因-表型信息
gene_phenotypes <- report$phenotypes  # 各基因表型汇总

# 查看CYP2D6表型
cyp2d6 <- gene_phenotypes[gene_phenotypes$gene == "CYP2D6", ]
print(paste("CYP2D6表型:", cyp2d6$phenotype))  # 输出代谢型
# ========== 方法4:PyPGx处理CYP2D6复杂基因型 ==========

# 安装PyPGx(Stargazer的继任者)
pip install pypgx

# 从BAM文件分析CYP2D6基因型(包含CNV检测)
pypgx run-ngs-pipeline \
    --bam sample.bam \           # 输入BAM文件
    --gene CYP2D6 \              # 指定目标基因
    --assembly GRCh38 \          # 参考基因组版本
    --output-dir cyp2d6_results  # 输出目录

# 查看星等位基因结果
cat cyp2d6_results/genotypes.tsv  # 基因型和代谢型预测

面试常问点

★ Q1:药物重定位和传统新药研发相比,优势在哪里?

重定位药物已有I期临床安全数据,降低约40%的失败风险;研发周期从平均12年缩短至3-5年;成本降低约60%。典型成功案例:西地那非(原治心绞痛→治疗勃起功能障碍)、沙利度胺(原镇静药→治疗多发性骨髓瘤)。

★ Q2:CMap方法的核心假设是什么?局限性有哪些?

核心假设:如果药物的基因表达特征与疾病特征"方向相反",则药物可能逆转疾病状态(反向关联)。局限性:①LINCS数据主要来自癌细胞系,组织特异性差;②不能反映长期用药效果;③高假阳性率,需要实验验证。

★ Q3:网络接近度分数如何解读?

Z-score越小(越负),药物靶点在PPI网络中与疾病基因越接近,重定位潜力越大。一般Z-score < -1.5作为候选阈值。还需结合富集分析和数据库(DGIdb、PharmGKB)确认靶点功能关联。

★ Q4:PharmCAT和PyPGx的分工是什么?

PharmCAT负责整合多基因的药物基因组注释,输出综合用药建议报告(对接CPIC指南)。PyPGx(原Stargazer)专门处理CYP2D6等有复杂拷贝数变异(CNV)的基因,因为这类基因标准VCF格式无法准确表达基因型,需要从BAM级别分析。通常流程是PyPGx输出CYP2D6基因型→输入PharmCAT生成完整报告。

★ Q5:知识图谱在药物重定位中如何应用?

知识图谱整合药物、靶点、通路、疾病、副作用等实体及其关系,通过图嵌入模型(TransE、RotatE、ComplEx)学习实体向量,再预测"药物-疾病"关系的可能性分数。代表工具:Hetionet(异质信息网络)、OpenTargets。


速查表

方法工具数据类型优点局限
转录组相似性CMap/LINCS基因表达直接反映分子机制细胞系偏差
网络接近度NetworkX/GUILDPPI网络考虑系统生物学网络不完整
机器学习DeepDTA/DTINet多组学可整合多种特征需要大量标注数据
知识图谱Hetionet/OpenTargets多数据库利用先验知识图谱覆盖度
药物基因组PharmCAT/PyPGx基因型个体化用药仅覆盖已知变异
关键数据库内容网址
LINCS L1000药物基因表达特征lincsproject.org
PharmGKB药物基因关联pharmgkb.org
ClinPGx/CPIC用药指南cpicpgx.org
DGIdb药物靶点dgidb.org
OpenTargets靶点-疾病opentargets.org