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/GUILD | PPI网络 | 考虑系统生物学 | 网络不完整 |
| 机器学习 | DeepDTA/DTINet | 多组学 | 可整合多种特征 | 需要大量标注数据 |
| 知识图谱 | Hetionet/OpenTargets | 多数据库 | 利用先验知识 | 图谱覆盖度 |
| 药物基因组 | PharmCAT/PyPGx | 基因型 | 个体化用药 | 仅覆盖已知变异 |
| 关键数据库 | 内容 | 网址 |
|---|---|---|
| LINCS L1000 | 药物基因表达特征 | lincsproject.org |
| PharmGKB | 药物基因关联 | pharmgkb.org |
| ClinPGx/CPIC | 用药指南 | cpicpgx.org |
| DGIdb | 药物靶点 | dgidb.org |
| OpenTargets | 靶点-疾病 | opentargets.org |