网络药理学 / 论文验证

网络药理学 + 分子对接 + 分子动力学:论文验证部分怎么做

这页写给做中药或天然产物网络药理学论文的研究生。内容按审稿时会被核对的顺序排列:完整流程表、数据库现状、筛选阈值的出处、对接与分子动力学的验证做法,以及审稿人最常提的质疑和应对。数据库状态与软件版本于 2026-10-10 核实。

直接答案

网络药理学论文的验证部分要站得住,靠三层证据:成分和阈值有出处,计算验证有对照,核心成分-靶点有实验。对接要指定结合位点、先做重对接(RMSD ≤ 2 Å)、同条件对接阳性对照,用相对排序代替 −5 kcal/mol 这类没有出处的阈值;分子动力学对每个复合物跑至少 3 个独立副本,报告配体 RMSD、接触与氢键占有率的均值和标准差,MM/PBSA 只与阳性对照比较相对大小;最后对排名最前的成分-靶点对做分子水平结合实验或细胞、动物实验。

先看结论

审稿人看验证部分时,主要核对下面五件事。前三件在计算开始前就要定下来。

WFCMS《网络药理学评价方法指南》的解读文章统计了 CNKI 收录的网络药理学论文(截至 2021 年 6 月):对结果做过实验验证的不足 30%,其中约三分之一用了体内外实验,多数研究只通过文献推测结果。审稿人见过大量只做对接的稿件,对接已不被当作验证。

成分有化学依据

核心成分要能证明确实存在于所用药材或制剂中,并有含量数据:自测 UHPLC-HRMS,或引用同一药材的定量文献。只来自数据库成分表的成分,最容易被要求补证据。

阈值预先设定且写明出处

OB、DL、靶点预测分数、GeneCards 分数、STRING 置信度和核心靶点规则,在看到结果前定好,方法里写清数据库版本和检索日期。看到结果数量后再改阈值,是审稿人最容易发现的问题。

对接有阳性对照和重对接

定位点对接,先用共晶配体做重对接验证参数,再用已知抑制剂作阳性对照。成分的打分和阳性对照比较。

分子动力学有独立副本

每个复合物至少 3 条独立模拟,报告均值和标准差,阳性对照用同样方案模拟。单条轨迹的 RMSD 曲线不足以说明结合稳定。

核心成分-靶点有实验

计算结果最终要落到实验上:分子水平结合或酶活实验(SPR、MST、ITC、酶活抑制)验证直接作用,细胞或动物实验验证通路。Frontiers in Pharmacology 和 Drug Design, Development and Therapy 的投稿要求都把实验验证作为送审前提。

全流程

工具版本为 2026-10-10 的当前版本。第 1、9、10、12 步决定验证部分是否站得住,第 2 到 8 步审稿人主要检查阈值和版本。

步骤输入工具输出论文图
1 成分收集与确认药材或方剂名HERB 2.0、BATMAN-TCM 2.0、TCMSP、文献;有条件时 UHPLC-HRMS 自测成分表:名称、PubChem CID、InChIKey、来源、含量成分鉴定色谱图;成分来源表
2 ADME 筛选成分 SMILESTCMSP 的 OB/DL;SwissADME保留成分表与阈值说明成分筛选表
3 成分靶点成分 SMILESSwissTargetPrediction、BATMAN-TCM 2.0(已知与预测分开)、PharmMapper成分-靶点对(UniProt ID 转为基因符号)成分-靶点网络
4 疾病靶点MeSH 标准疾病名;GEO 数据集OMIM、DisGeNET curated、GeneCards;GEO 差异分析疾病基因表疾病基因来源韦恩图
5 取交集两个基因集合(统一为 HGNC 符号)R 或 Python交集基因成分靶点与疾病靶点韦恩图
6 PPI 与核心靶点交集基因STRING 12.5、Cytoscape 3.10.5 + stringApp 2.2网络 tsv、拓扑参数表PPI 网络图;核心靶点度值条形图
7 药材-成分-靶点-通路网络第 1 到 8 步结果Cytoscape网络文件多层网络图
8 GO/KEGG 富集交集基因 + 背景基因集clusterProfiler富集表(含校正后 P 值)气泡图或条形图
9 分子对接核心靶点 PDB 结构;核心成分与阳性对照的 3D 结构AutoDock Vina 1.2.7、Meeko打分表、对接姿态、重对接 RMSD打分热图(含阳性对照);2D/3D 相互作用图;重对接叠合图
10 分子动力学对接复合物(含阳性对照)GROMACS 2026;AmberTools/ACPYPE 或 OpenFF 生成配体参数每个复合物至少 3 条轨迹配体 RMSD、口袋 RMSF、氢键与接触占有率(均值 ± 标准差)
11 结合自由能MD 轨迹gmx_MMPBSA 1.7.0ΔG 分项与残基分解能量分项柱状图;残基贡献图
12 实验验证核心成分与核心靶点SPR、MST、ITC、酶活;细胞与动物实验实验数据结合曲线;Western blot 等

数据库

下表按 2026-10-10 实际访问结果整理。方法部分对每个数据库写三项:版本或网址、检索日期、筛选条件。

WFCMS 指南解读文章检索了 CNKI 中以人参为对象的 13 篇网络药理学论文:即使用同一个数据库、同一组阈值,纳入的成分数也不一致,原因包括阈值改动和文献补充成分未说明。TCMSP 中 OB > 30% 且 DL > 0.18 的人参成分共 22 个,其中有预测靶点的 17 个。保存原始导出表并在附件中提供,是让别人能复现你的成分数和靶点数的最直接做法。

数据库2026-10 现状使用经验可替代或补充
TCMSPtcmsp-e.com 改为门户页:旧版在 old.tcmsp-e.com(页脚版本 2.3,更新日志最近一条为 2025-04-20);新版 TCMSP 9.0.1 在 next.tcmsp-e.com,完整分析工具需会员新版生成的方法段默认 OB ≥ 15%、DL ≥ 0.11,和旧版论文常用的 30%/0.18 不同,同一篇论文不要混用两版数据;旧版靶点表只能逐页复制,经验帖多用脚本整理,导出后核对靶点数HERB 2.0、BATMAN-TCM 2.0
HERB 2.0herb.ac.cn/v2,2024 年 11 月发表于 NAR新增 8,558 项临床试验和 8,032 项 meta 分析的整理,适合给药材或成分找临床与实验证据,回应“成分是否有依据”的质疑TCMSP、文献
BATMAN-TCM 2.0bionet.ncpsb.org.cn/batman-tcm,NAR 2024已知成分-靶点相互作用 17,068 条,预测约 232 万条;Download 页可批量下载,论文中把已知和预测靶点分开报告SwissTargetPrediction
SwissTargetPrediction可访问,最近一次方法更新为 2019 年只支持人、大鼠、小鼠;输入用 PubChem 的 SMILES,比按名称检索更不容易出错;Probability 的含义见下一节BATMAN-TCM 2.0 预测部分
PharmMapperlilab-ecust.cn/pharmmapper 可访问,最近一次方法更新为 2017 年基于药效团反向匹配,任务需要排队;结果是 UniProt ID,用 UniProt ID mapping 转基因符号时只保留人源 reviewed 条目SwissTargetPrediction
GeneCards可访问,搜索结果页 Export 可导出 CSVRelevance score 是搜索相关性得分,不同疾病检索之间不可比;检索前先在 MeSH 确认疾病标准名,同义词分别检索后合并OMIM、DisGeNET curated、GEO 差异基因
OMIM网页检索可用批量下载 genemap2 需先申请 API key,审核可能要几个工作日,赶进度时直接网页检索导出;以孟德尔遗传为主,复杂病基因数少,检索不到属正常DisGeNET curated
DisGeNETdisgenet.org 已跳转到 disgenet.com免费学术账号只能看到 curated 数据,旧教程“全部来源 + score 阈值”的结果用免费账号无法复现;方法中写明用的是 curated 数据OMIM、GeneCards
STRING当前版本 12.5用 version-12-5.string-db.org 固定版本,避免投稿后升级导致结果对不上;combined score 表示相互作用为真的可能性,不表示作用强度—
Cytoscape 与插件Cytoscape 3.10.5(2026-09-29);stringApp 2.2.0;cytoHubba 的 App Store 最新版发布于 2017 年,CytoNCA 为 2014 年,MCODE 2.0.3 为 2023 年stringApp 2.2.0 的发布说明称这一版本用于保证 2024-12-31 之后继续可用,导入失败先升级 stringApp;度值等基本拓扑参数用内置 Analyze Network 即可得到Python networkx、R igraph

阈值

多数阈值没有统一标准。可靠的做法是选一个有出处的值,在看到结果前固定,并在方法中写明理由。

参数常见经验做法出处问题建议写法
OB / DLOB ≥ 30%、DL ≥ 0.18;成分太少时降到 OB ≥ 20%DL 0.18 是 TCMSP 定义的“类药”水平;TCMSP 参数说明页建议的筛选标准是 OB ≥ 20%、DL ≥ 0.1;TCMSP 原始论文的甘草示例用 OB ≥ 40%、DL ≥ 0.18OB 是口服生物利用度的预测值,注射剂和外用制剂不适用;按成分数量调阈值属于事后选择写明 TCMSP 版本和阈值来源;对保留的核心成分补充药代动力学或血中成分文献
SwissTargetPrediction Probability每个成分取前 15 位;或 Probability ≥ 0.1、> 0Probability 是“一个活性分子以该蛋白为靶点”的概率,不是化合物有活性的概率;外部测试中 72% 的分子在前 15 位里至少命中一个已知靶点,第 1 位命中 28%前 15 位里多数是假阳性对所有成分统一取前 15 位,并与 BATMAN-TCM 已知靶点比对
GeneCards Relevance score≥ 1、≥ 中位数、≥ 2 倍中位数无;分数来自 GeneCards 搜索引擎的文本相关性分数高只说明基因条目里提到该疾病的程度高,不表示因果关系;不同检索之间不可比以 OMIM、DisGeNET curated 或疾病 GEO 差异基因为主,GeneCards 只作补充,写明检索词
STRING combined score0.4 或 0.9,并去掉 Textmining 通道STRING 把 ≥ 0.400 称为 medium confidence高分边可能只有文本挖掘证据(见下一节实测)写明 STRING 版本、阈值和使用的证据通道
核心靶点度值 ≥ 中位数;或度值、介数、紧密度都 ≥ 中位数;cytoHubba MCC 前 10经验做法;WFCMS 指南解读指出拓扑筛选条件“较为混乱,缺少参考依据”度值偏向被研究得多的基因;小网络中中位数处大量并列预先确定一种方法,并用疾病组学数据或文献对核心靶点做独立核对

PPI 网络

常规做法是把成分靶点和疾病靶点统一为 HGNC 基因符号后取交集,交集基因提交 STRING,在 Cytoscape 中计算拓扑参数,取度值不低于中位数的节点作核心靶点。

这样得到的核心靶点高度同质。Diao 等 2026 年统计了 1,038 篇天然产物网络药理学研究(2023 年 10 月至 2024 年 6 月发表):AKT1 出现在 48.8% 研究的核心靶点中,TNF 为 39.1%,EGFR 为 34.8%;只依赖数据库的研究中 AKT1 占 54.9%,整合了组学或实验数据的研究中为 19.6%。槲皮素在两类研究中分别占 71.9% 和 42.3%。

原因之一是 STRING 的文本挖掘证据偏向被研究得多的基因。下面的脚本先用 get_string_ids 核对每个基因符号映射到的蛋白,再从固定版本的 STRING API 取网络,标出只有文本挖掘证据的边,并按度值中位数列出核心靶点。本页实测(2026-10-10,STRING 12.5 API,Python 3 标准库):输入 AKT1、TNF、IL6、PTGS2、ESR1、STAT3、MAPK1、CASP3、BCL2、VEGFA 10 个网药高频基因,required_score=700 时得到 33 条边,其中 5 条只有文本挖掘证据,AKT1–IL6 的 0.88 分全部来自文本挖掘;9 个有连接的节点度中位数为 8,有 5 个节点并列达到中位数。

同一次实测发现:STRING 12.0 和 12.5 中查询 VEGFA 返回的是 COL18A1(9606.ENSP00000352798),不报错;用 UniProt 号 P15692 或 Entrez ID 7422 查询无结果,STRING 11.5 中 VEGFA 仍能正常匹配。直接把基因列表提交到 network 接口时,VEGFA 会被当作 COL18A1 进入网络(required_score=400 时 COL18A1 带着 3 条边出现)。VEGFA 是网药论文中的高频核心靶点,提交前先核对映射结果,映射不一致的基因在方法中单独说明。

降低同质性的做法:用疾病转录组或蛋白组数据核对核心靶点在疾病中是否有变化;除度值外同时报告介数等其他指标;在附件中给出完整靶点列表,便于审稿人判断。

string_hubs.py(只依赖 Python 标准库)python
# 用法:python3 string_hubs.py overlap_genes.txt 700
# overlap_genes.txt:每行一个交集基因符号;第二个参数为 required_score(0-1000)
import sys, csv, io, statistics, urllib.parse, urllib.request
from collections import defaultdict

API = "https://version-12-5.string-db.org/api/tsv"


def post(method, **params):
    params.update({"species": 9606, "caller_identity": "np_validation_tutorial"})
    data = urllib.parse.urlencode(params).encode()
    with urllib.request.urlopen(f"{API}/{method}", data=data) as r:
        return list(csv.DictReader(io.StringIO(r.read().decode()), delimiter="\t"))


genes = [g.strip() for g in open(sys.argv[1]) if g.strip()]
score = int(sys.argv[2]) if len(sys.argv) > 2 else 400

# 1. 先核对基因符号映射:STRING 会把查不到的符号静默映射到别的蛋白
mapped = post("get_string_ids", identifiers="\r".join(genes), echo_query=1, limit=1)
hit = {m["queryItem"]: m for m in mapped}
for g in genes:
    if g not in hit:
        print(f"WARNING not found in STRING: {g}")
    elif hit[g]["preferredName"].upper() != g.upper():
        print(f"WARNING {g} mapped to {hit[g]['preferredName']} ({hit[g]['stringId']})")
ids = [hit[g]["stringId"] for g in genes if g in hit and hit[g]["preferredName"].upper() == g.upper()]

# 2. 只用映射一致的 STRING ID 取网络
rows = post("network", identifiers="\r".join(ids), required_score=score)

edges = {}
for x in rows:
    key = tuple(sorted((x["preferredName_A"], x["preferredName_B"])))
    other = max(float(x[c]) for c in ("nscore", "fscore", "pscore", "ascore", "escore", "dscore"))
    edges[key] = (float(x["score"]), float(x["tscore"]), other)

tm_only = [k for k, (s, t, o) in edges.items() if o == 0]
print(f"edges={len(edges)}  textmining_only={len(tm_only)}")
for a, b in tm_only:
    print(f"  textmining only: {a}-{b} score={edges[(a, b)][0]}")

deg = defaultdict(int)
for a, b in edges:
    deg[a] += 1
    deg[b] += 1
med = statistics.median(deg.values())
print(f"nodes={len(deg)}  median_degree={med}")
for g, d in sorted(deg.items(), key=lambda kv: -kv[1]):
    print(f"{g}\t{d}\t{'>=median' if d >= med else ''}")
运行bash
python3 string_hubs.py overlap_genes.txt 700

富集分析

富集分析的两个常见漏洞是没有交代背景基因集和没有做多重检验校正。

Wijesooriya 等 2022 年审查了 186 篇使用富集分析的文章:95% 的过表达分析没有使用或没有说明合适的背景基因集,43% 没有做多重检验校正。在网药研究里,AGE-RAGE 和 PI3K-Akt 通路分别出现在 54.9% 和 54.7% 的研究中(Diao 等 2026)。

可行的做法是用全部成分靶点与疾病靶点的并集作背景,并在方法中写明背景大小、校正方法和 KEGG 访问日期。clusterProfiler 的 enrichGO() 中 ont 参数默认是 "MF",不写只会得到分子功能;enrichKEGG() 默认在线下载当前 KEGG 数据,因此要记录访问日期。

本页实测(2026-10-10,R 4.5.3,clusterProfiler 4.18.4,org.Hs.eg.db 3.22.0,macOS arm64):上面 10 个基因作交集基因,以它们在 STRING 12.5 中的互作伙伴共 191 个基因作背景,脚本运行通过。使用该背景时显著的 GO BP 条目为 170 个、KEGG 通路 20 个;不设 universe(默认以全部有注释的基因为背景)时分别为 1,493 个和 132 个;不写 ont 时得到的是 77 个 MF 条目。两种背景下排名第一的 KEGG 通路都是 AGE-RAGE signaling pathway in diabetic complications。示例背景只用于演示,实际分析用全部成分靶点与疾病靶点的并集。

enrichment.Rr
# 依赖:BiocManager::install(c("clusterProfiler", "org.Hs.eg.db"))
library(clusterProfiler)
library(org.Hs.eg.db)

hits <- readLines("overlap_genes.txt")     # 交集基因(基因符号)
bg   <- readLines("background_genes.txt")  # 背景:全部成分靶点与疾病靶点的并集

hits_id <- bitr(hits, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = org.Hs.eg.db)$ENTREZID
bg_id   <- bitr(bg,   fromType = "SYMBOL", toType = "ENTREZID", OrgDb = org.Hs.eg.db)$ENTREZID

ego <- enrichGO(gene = hits_id, universe = bg_id, OrgDb = org.Hs.eg.db,
                keyType = "ENTREZID", ont = "BP",  # ont 默认是 "MF"
                pAdjustMethod = "BH", pvalueCutoff = 0.05, qvalueCutoff = 0.2,
                readable = TRUE)
ekegg <- enrichKEGG(gene = hits_id, universe = bg_id, organism = "hsa",
                    keyType = "kegg", pAdjustMethod = "BH",
                    pvalueCutoff = 0.05, qvalueCutoff = 0.2)

write.csv(as.data.frame(ego),   "go_bp.csv", row.names = FALSE)
write.csv(as.data.frame(ekegg), "kegg.csv",  row.names = FALSE)
writeLines(c(paste("hits", length(hits_id)),
             paste("background", length(bg_id)),
             paste("KEGG accessed", Sys.Date())), "enrichment_meta.txt")

分子对接

分子对接在网药论文中的作用是为核心成分和核心靶点提供结构层面的合理性。对接打分不能证明结合。

Che 和 Zhang 2025 年审查了 35 篇 2024 年发表的网药论文:约 15 篇用 −5.0 kcal/mol 作亲和力阈值,其他从 −1.2 到 −7.0 不等,都没有可追溯的出处;不同对接软件的打分不能互相比较;35 篇中没有一篇设阳性对照;4 篇明确使用盲对接,另有 13 篇不同配体对接到蛋白不同区域,疑似盲对接。他们在 CASF-2016 的 285 个复合物上测试:Vina 指定位点对接的打分与实验亲和力相关系数 0.604,盲对接为 0.387;盲对接时 exhaustiveness 为 8 的中位 RMSD 为 3.37 Å,提高到 64 降到 2.21 Å,耗时约为 8 倍。

受体与配体准备、盒子设置和完整命令见 /learn/autodock-vina-docking。

  1. 01

    选结构

    优先选人源、含共晶配体、结合口袋完整的晶体结构,写明 PDB ID 和分辨率。只有预测结构时,先检查口袋残基的 pLDDT(判读方法见 /learn/alphafold-results)。

  2. 02

    定位点

    用共晶配体位置或文献报道的功能残基定义对接盒子。位点未知时先做口袋预测,再用第二个对接程序交叉核对。

  3. 03

    重对接

    取出共晶配体后用同一套参数重新对接,最优姿态与晶体姿态的重原子 RMSD ≤ 2 Å,说明这套参数能复现已知结合模式(PoseBusters 采用同一标准)。

  4. 04

    阳性对照

    在同一盒子、同一参数下对接该靶点的已知抑制剂或共晶配体。成分打分与阳性对照比较,接近或优于阳性对照的成分才进入 MD。

  5. 05

    报告参数

    写明盒子中心和尺寸、exhaustiveness、随机种子和 Vina 版本,附 2D/3D 相互作用图和重对接叠合图。

Vina 打分(kcal/mol)按 ΔG 换算的 Kd(298.15 K)论文中的常见说法
−4.25约 770 μM“有结合活性”
−5.0约 216 μM“结合良好”
−7.0约 7.4 μM“结合很强”
−9.0约 0.25 μM—
换算按 ΔG = RT ln Kd,1 M 标准态。Vina 打分是经验打分函数的输出;CASF-2016 上指定位点对接的打分与实验亲和力 Pearson r 约 0.60。

分子动力学

分子对接和分子动力学是先后两步:对接在近似刚性的受体上搜索配体姿态并打分,分子动力学在显式溶剂中检验这个姿态随时间能否保持。对接位点错了,MD 无法纠正。

时长没有统一标准。Communications Biology 2023 年发表的分子动力学可靠性清单要求的是收敛证据和每个条件至少 3 次独立模拟,没有规定固定纳秒数。判断平衡的经验做法是:先把每帧按蛋白骨架最小二乘叠合到参考结构,再算 RMSD,对曲线做滑动平均,从某个时间点起不再有整体上升或下降,才算结构平衡。

MM/PBSA 的已知局限(Genheden 和 Ryde 2015):算出的能量通常偏大;两个配体亲和力相差小于 12 kJ/mol(约 2.9 kcal/mol)时排序常不可靠;在整个 PDBbind 上与实验的 r² 约 0.3,单个蛋白在 0 到 0.8 之间;熵项统计误差最大,大规模测试中加入熵项并不改善结果,因此常被省略;溶质介电常数取 2 到 4 时结果往往最好;单轨迹法通常比三轨迹法准确。论文中写明是否计算熵项和所用介电常数。

gmx_MMPBSA 当前版本 1.7.0。照抄旧教程要注意:&gb 中 extdiel 自 1.5.0 起默认 78.5(此前为 80.0);用 Interaction Entropy 时要报告 σIE,σIE 大于约 3.6 kcal/mol 时结果不可靠。体系搭建、mdp 参数和命令见 /learn/gromacs-protein-ligand,RMSD、RMSF、氢键与 SASA 的计算和作图见 /learn/md-trajectory-analysis。

指标回答的问题常见错误
配体 RMSD(按蛋白骨架叠合后计算)配体是否留在原结合姿态按配体自身叠合计算,看不到配体整体漂移
蛋白骨架 RMSD蛋白整体结构是否稳定用它代替配体 RMSD 作为“结合稳定”的证据
口袋残基 RMSF结合区的柔性只给全蛋白 RMSF 曲线,不标出口袋残基
氢键与接触占有率哪些相互作用持续存在只画氢键数量随时间的曲线,不给具体残基
Rg、SASA蛋白是否展开或塌缩把 Rg、SASA 平稳当作配体结合稳定的证据
MM/PBSA 或 MM/GBSA与阳性对照相比的相对结合强弱把绝对值当作结合自由能,直接和实验 ΔG 比较
  • 每个复合物至少 3 条独立模拟(不同初始速度随机种子),报告均值与标准差。
  • 给出被分析性质已平衡的证据,说明平衡段和分析段如何划分。
  • 至少一条从不同初始构象(例如对接第二名姿态)出发的模拟,说明结论不依赖初始构象。
  • 提供体系设置表:盒子尺寸、总原子数、水分子数、盐浓度、力场与水模型、质子化状态。
  • 写明软件版本,附初始坐标、输入参数文件和最终坐标。
  • 阳性对照复合物用同样方案模拟。

审稿意见

下表的质疑来自期刊审稿要求和方法学审查文章,应对做法可以在投稿前完成。

质疑应对做法依据
只有计算,没有实验对排名最前的成分-靶点对做分子水平结合或酶活实验,再用细胞或动物实验验证关键通路Frontiers in Pharmacology Four Pillars;DDDT 投稿说明
成分在药材中是否存在、含量够不够UHPLC-HRMS 自测药材或制剂成分,或引用同一药材的定量文献;优先选入血成分Four Pillars 对化合物鉴定与含量的要求
槲皮素、山柰酚等是泛靶点成分给出该成分在本药材中的含量和特异性证据,或把它降为次要成分讨论Four Pillars;Diao 等 2026(槲皮素见于 71.9% 的数据库型研究)
OB/DL 等阈值为什么这样设引用阈值出处,说明阈值在分析前设定;非口服制剂说明为何不用 OBTCMSP 参数说明页;WFCMS 指南对合理性的要求
核心靶点又是 AKT1、TNF、IL6用疾病组学数据核对核心靶点;报告完整靶点列表;同时报告度值以外的拓扑指标Diao 等 2026
富集分析背景不清、未校正写明背景基因集、校正方法、软件版本和 KEGG 访问日期Wijesooriya 等 2022
盲对接、无阳性对照、阈值无依据定位点对接,重对接 RMSD ≤ 2 Å,同条件对接阳性对照,用相对排序代替固定阈值Che 和 Zhang 2025
MD 只有一条轨迹每个复合物至少 3 个独立副本,报告均值 ± 标准差Communications Biology 2023 可靠性清单
MM/PBSA 数值偏大或与实验不符只和阳性对照比较相对大小,说明熵项和介电常数设置Genheden 和 Ryde 2015
数据库版本和检索日期不清,结果无法复现附检索日期、版本、原始导出表和全部脚本WFCMS 指南对数据溯源的要求
复方或提取物组成不清写明组成比例、提取工艺、批号和化学表征Four Pillars 对组成的要求

国内做法

旧版 TCMSP 的靶点表给出的是蛋白名(target_name 列),做交集和富集前要转成基因符号。国内经验帖的通用做法是下载 UniProt 人源、reviewed 条目,按蛋白名匹配基因名(Excel VLOOKUP 或 R 脚本)。下面给出这一步的实测结果和需要人工处理的情况,以及 Cytoscape 导入时的常见问题。

tcmsp2symbol.py:TCMSP 靶点名转基因符号,并标出需要人工核对的条目python
# 用法:python3 tcmsp2symbol.py tcmsp_targets.txt > target_symbol.tsv
# tcmsp_targets.txt:每行一个 TCMSP 靶点名(target_name 列,去重后)
# 只依赖 Python 3 标准库;运行时从 UniProt 下载人源 reviewed 条目(约 2 万行)
import csv, io, re, sys, urllib.request

URL = ("https://rest.uniprot.org/uniprotkb/stream?query=organism_id:9606+AND+reviewed:true"
       "&fields=accession,protein_name,gene_primary&format=tsv")
rec, alt = {}, {}
with urllib.request.urlopen(URL, timeout=600) as r:
    for row in csv.DictReader(io.StringIO(r.read().decode()), delimiter="\t"):
        gene = row["Gene Names (primary)"]
        if not gene:
            continue
        pn = row["Protein names"].split(" [Cleaved")[0]   # 去掉切割产物说明
        rec.setdefault(re.sub(r"\s*\(.*$", "", pn).strip().lower(), set()).add(gene)  # 推荐名
        for name in re.findall(r"\(([^()]*)\)", pn):      # 括号中的别名
            alt.setdefault(name.strip().lower(), set()).add(gene)

names = [l.strip() for l in open(sys.argv[1], encoding="utf-8") if l.strip()]
n_rec = n_alt = 0
print("target_name\tsymbols\tmatch")
for n in dict.fromkeys(names):
    key = n.lower()
    if key in rec:
        genes, how = rec[key], "recommended"; n_rec += 1
    elif key in alt:
        genes, how = alt[key], "alternative"; n_alt += 1   # 别名匹配:逐条人工核对
    else:
        genes, how = set(), "none"                          # 未匹配:人工查 UniProt
    flag = "ambiguous" if len(genes) > 1 else how
    print(f"{n}\t{'/'.join(sorted(genes))}\t{flag}")
print(f"targets={len(dict.fromkeys(names))} recommended={n_rec} alternative={n_alt} "
      f"unmatched={len(dict.fromkeys(names)) - n_rec - n_alt}", file=sys.stderr)

只做精确匹配会丢掉约三成靶点

本页实测(2026-10-10,旧版 TCMSP 2.3,UniProt REST 接口):黄芩(Scutellariae Radix)中 OB ≥ 30%、DL ≥ 0.18 的 36 个成分对应 507 个成分-靶点对、124 个不重复的靶点名。与 UniProt 推荐名精确匹配的有 85 个;加上括号中的别名再匹配 15 个,共 100 个;24 个两种方式都匹配不上。经验帖中的 R 脚本也要把连字符换成空格、去掉括号部分再匹配几轮,原因相同。

匹配不上和别名匹配的条目要逐条看

同一次实测中未匹配的原因有四类:UniProt 改了推荐名(VEGFA 现名 Vascular endothelial growth factor A, long form);TCMSP 名称是切割产物(Thrombin 属于 F2 编码的 Prothrombin);名称对应一个基因家族(Calmodulin 对应 CALM1、CALM2、CALM3,Heat shock protein HSP 90 对应 HSP90AA1 等);以及“mRNA of …”这类条目。别名匹配中,Beta-lactamase 被匹配到人的 DPEP1;TCMSP 表中的 Beta-lactamase 是细菌的 β-内酰胺酶,Cytochrome P450-cam 是恶臭假单胞菌的 CYP101,两者都应删除,不能计入人源靶点。

Cytoscape 导入报错与节点异常

经验帖中导入网络文件报 Could not initialize preview 的处理:Excel 另存为“CSV UTF-8”格式再导入,并替换掉单元格中的换行符、逗号、分号等特殊字符;中文版 Excel 的“CSV(逗号分隔)”按 GBK 编码保存,节点名含中文时导入会乱码。同一基因的写法要统一,HIF1A 和 Hif1a 会被当成两个节点。PPI 图中出现没有连线的孤立靶点,常见原因是前一步基因名转换出错,先回到映射表核对。经验帖里“节点太多就提高 SwissTargetPrediction 阈值让同心圆好看”的做法,属于看到结果后改阈值;节点多时改用只画核心靶点的子网络。

交给 Agent

计算部分的步骤固定、文件多、跑得久,适合交给科学智能体执行,判断和实验仍由你负责。

一句话指令示例:「以黄芩为研究对象、溃疡性结肠炎为疾病:从 HERB 2.0 和 BATMAN-TCM 2.0 收集成分与靶点,按 OB ≥ 30%、DL ≥ 0.18 和 SwissTargetPrediction 前 15 位筛选;疾病靶点用 OMIM、DisGeNET curated 和 GEO 差异基因;构建 STRING 12.5 网络并标出只有文本挖掘证据的边;以全部成分靶点与疾病靶点的并集为背景做 GO/KEGG 富集;对前 5 个核心靶点做定位点对接、重对接和阳性对照;对得分最高的 3 个复合物和阳性对照各跑 3 个 100 ns 副本,做 MM/GBSA 并出图。」

  1. 01

    检索与记录

    访问各数据库,保存原始导出表,记录版本和检索日期。

  2. 02

    网络与富集

    运行 Python 和 R 脚本完成交集、PPI、核心靶点和富集分析,输出表格和图。

  3. 03

    对接

    下载 PDB 结构,准备受体和配体,完成重对接、成分对接和阳性对照对接,输出打分表和相互作用图。

  4. 04

    分子动力学

    在预装 GROMACS、AmberTools、ACPYPE 的环境中搭建体系,按需租用 GPU 跑多副本,完成轨迹分析和 gmx_MMPBSA 计算。

  5. 05

    对抗审阅

    检查任务是否真正完成,例如重对接 RMSD 是否 ≤ 2 Å、每个复合物的副本是否齐全、图中是否标注均值和标准差。

  • 工作区保留:成分表、靶点表、网络 tsv、富集结果、对接日志与姿态、MD 输入文件与分析结果、全部脚本和图。
  • 你仍需核对:核心成分是否确实存在于所用药材及其含量、阈值是否符合你的研究设计、PDB 结构和阳性对照的选择是否合适。
  • 实验验证的设计和湿实验由你完成。

参考资料

常见问题

只做网络药理学、分子对接和分子动力学,不做实验能发表吗?

投 Frontiers in Pharmacology、Drug Design, Development and Therapy 这类期刊很难通过:前者要求网络分析结合体外或体内实验,后者要求至少有分子水平的体外实验验证配体-靶点相互作用。分子动力学也属于计算,不能代替实验。条件有限时,优先对排名最前的一个成分-靶点对做结合或酶活实验。

分子对接和分子动力学模拟有什么区别和关系?

分子对接在近似刚性的受体上搜索配体姿态并用经验打分函数打分;分子动力学在显式溶剂中模拟复合物随时间的运动,用来检验对接姿态能否保持。论文中的顺序是先对接,再用 MD 检验最优姿态,最后用 MM/PBSA 与阳性对照比较相对结合强弱。

对接结合能低于 −5 kcal/mol 就说明结合良好吗?

不能。−5 kcal/mol 没有可追溯的出处,即使把 Vina 打分当作真实 ΔG,也只相当于约 216 μM 的弱结合。更可靠的做法是定位点对接、重对接验证参数,再把成分打分和同条件下的阳性对照比较。

TCMSP 现在还能用吗?

能。旧版在 old.tcmsp-e.com,页脚版本 2.3,可以检索;新版 TCMSP 9.0.1 在 next.tcmsp-e.com,完整分析工具需要会员。新版默认阈值是 OB ≥ 15%、DL ≥ 0.11,和旧版论文常用的 30%/0.18 不同,论文中写明用的是哪一版。

分子动力学要跑多长时间、几个副本?

时长没有统一标准,需要用收敛证据说明所分析的性质已经平衡。副本数按 Communications Biology 2023 年的可靠性清单,每个复合物至少 3 次独立模拟并报告均值和标准差,阳性对照用同样方案模拟。

DisGeNET 现在还能免费用吗?

disgenet.org 已跳转到 disgenet.com。免费学术账号只能看到 curated 数据,不含文献挖掘数据,旧教程中“全部来源 + score 阈值”的做法无法用免费账号复现。方法中写明使用的是 curated 数据,并用 OMIM 或疾病 GEO 差异基因补充。

把网络药理学验证流程交给 Scientify

给出药材、疾病和筛选阈值,科学智能体在隔离云电脑中完成数据库检索、网络与富集分析、对接和多副本分子动力学,保留全部脚本、参数文件和日志。新注册用户免费获得 5 美元等值额度。