案例 · 用户提交方向,已匿名
核心问题:常规网络药理学 degree-hub 流程从中药活性成分选出的核心靶点,是否比靶点数量匹配的随机化合物集选出的靶点更能命中未参与流程的缺血性卒中疾病基因?
本轮判定:confirmed · 标准 degree-hub 网络药理学流程给中药成分选出的核心靶点在预测未参与建模的卒中基因上的 AUROC(均值0.629)与靶点数量匹配的随机化合物零分布(均值0.606)在 700/400/900 三档 STRING 置信度下、3 个种子里经验 p 值全部 >0.05(0.10~0.62),统计不可区分——说明该流程选出的'核心靶点'主要由 PPI 网络度分布(研究热度/连接偏差)驱动,而非中药成分的特异性药理作用;用零分布做 z-score 背景校正(proposed 臂)也没有改善、反而在 3 个种子上都略微降低了 AUROC。
数据:CTD_chem_gene_ixns.tsv.gz (Homo sapiens 子集 1,327,615 行, 11,095 化合物); CTD_curated_genes_diseases.tsv.gz 过滤卒中 MeSH D002545/D020521/D000083242/D020244/D002546, 并集 131 个人工审编基因; STRING v12.0 human protein.physical.links (score>=400/700/900 三档) + protein.info 做 ENSP->symbol 映射。
真跑了:3 个噪声种子 · 纯 CPU 157 秒 · 代码/日志/原始结果全部随附

案例速览

判定:负结果

数据源与对照规模:CTD 化合物-基因互作人类子集(1,327,615 行 / 11,095 个化合物)+ CTD 人工审编卒中基因(5 个 MeSH 并集 131 个基因)+ STRING v12.0,3 个实验臂 × 3 个种子 × 3 档 STRING 置信度(400/700/900),每个条件跑满 1000 次零分布置换,CPU 157 秒

主要结论:预注册预测被证实:标准 degree-hub 网络药理学流程给中药成分选出的核心靶点,在预测未参与建模的留出卒中基因上的 AUROC(0.629)与靶点数量匹配的随机化合物零分布(0.606)在三档 STRING 置信度下都没有拉开差距。

这些结果不支持:不支持「中药成分对缺血性卒中无效」——本轮检验的是这套选靶流程的判别力,不是药效。不支持任何临床或实验层面的机制结论,也不支持对具体靶点的功能解读。

代码 / 原始结果 / 日志:代码、原始 results.json、运行日志、图齐全;报告每个实验数值标注了对应的 results.json 字段路径。

DeepGraph 免费层交付 · 网络药理学"核心靶点"的空模型对照

提交方向: 中药活性成分在缺血性卒中治疗中的应用及作用机制研究 交付时间: 2026-08-07 这一轮真跑了: CTD 化合物-基因互作(人类子集 1,327,615 行 / 11,095 个化合物)+ CTD 人工审编基因-疾病(卒中 MeSH D002545/D020521/D000083242/D020244/D002546,并集 131 个基因)+ STRING v12.0 人类物理互作网络;3 个臂 × 3 个随机种子(0/1/2)× 3 档 STRING 置信度(400/700/900),每个条件跑满 1000 次零分布置换;CPU 总耗时 157 秒。代码、日志、图、原始结果随附。

> 数字口径:本报告出现的每个实验数值都取自随附的 work/results.json,四舍五入到 3 位有效数字,表下标注了对应字段路径。第 5 节的文献检索数字来自 SCOPE.md,已单独标注,不是本轮实验结果。


0. 结论(先说结果)

我们的预测是否定性的:常规 degree-hub 网络药理学流程选出的"核心靶点",在预测未参与建模的卒中基因上,不会比"靶点数量匹配的随机化合物"更强。跑完的结果是预测被证实prediction_outcome: confirmed,同时 negative_result: true)——也就是说,这条路我们替你试了,标准流程这一环没通过对照

主阈值(STRING ≥700)下:中药成分臂 hold-out AUROC 均值 0.629,靶点数量匹配的随机化合物零分布均值 0.606,3 个种子的经验 p 值分别是 0.173 / 0.619 / 0.183;换到 400 和 900 档,9 个"阈值×种子"组合里没有一个达到 p<0.05(全部 p 在 0.10~0.62 之间)。真实成分与随机化合物选出的 top-20 靶点大量重叠(Jaccard 中位数 0.667 / 1.000 / 0.429)。我们额外试的零分布 z-score 背景校正没有救回来,3 个种子上 AUROC 反而都略低(0.590 vs 0.629)。

下一步该往哪拐:不要把这当成"中药无效"(本轮完全测不到药效),而是把它当成你论文里方法学部分的一块补丁——先承认 degree 排名过不了随机对照,再用别的证据(湿实验、分期表达、剂量-反应)承载机制主张。具体路径见第 3 节。


1. 我们替你跑了什么

一句话设计:把 131 个 CTD 人工审编的卒中基因随机分半,一半(D_seed)参与流程、一半(D_hold)藏起来当考题;20 味中药活性成分的人类靶点并集与 D_seed 取交集作为种子节点,在 STRING 物理互作网络里取种子节点 + 一阶邻居构成子网络,按子网络内节点度数(hub score)给全部候选基因排序,再看这个排序能不能把藏起来的那一半卒中基因排到前面。

baseline 是什么baseline-degree-hub 就是文献里最标准的那条流程本身(成分→靶点→与疾病靶点取交集→建 PPI→按 degree 取 top hub)。我们不是发明一个新方法去跟弱基线比,我们是把现行标准做法放到对照下检验。

为什么这个对照是公平的:三个臂共用同一份 D_seed/D_hold 分半、同一张 PPI 网络、同一套阈值、同一个候选基因池,唯一差别是输入的化合物集合。随机化合物按靶点数量分层匹配抽取(真实成分靶点数 ≥50 的,从 CTD ≥50 靶点池 n=1036 里抽;其余从 ≥20 靶点池 n=1972 里抽),因此排除了"随机组因为靶点太少所以吃亏"这种平凡解释。20 味成分的靶点并集共 9,129 个人类基因。

主结果表(主阈值 STRING ≥700,主指标 hold-out AUROC)

seed 0seed 1seed 2均值 ± 标准差
baseline-degree-hub(中药成分,标准流程)0.5540.6740.6590.629 ± 0.0532
null-random-compounds(靶点数匹配的随机化合物,1000 次零分布的均值)0.5190.6830.6140.606 ± 0.0674
proposed-null-corrected(用零分布做 z-score 背景校正后重排序)0.5380.6190.6130.590 ± 0.0369
经验 p 值(baseline 相对零分布,(r+1)/(n+1)0.1730.6190.183
候选基因数913870852

> 字段路径:arms[*].metrics.holdout_auroc.{per_seed,mean,std};p 值与候选基因数见 threshold_sensitivity["700"].{empirical_p_per_seed,n_candidate_genes_per_seed}。 > headline 里的 delta = 0.0234 就是第 1 行减第 2 行(0.629 − 0.606)。注意 headline.proposed_mean 这个字段名存的其实是零分布臂的均值(见 work/summarize.pynull_mean 的赋值),不是 proposed-null-corrected 臂的 0.590,读 JSON 时别对错。

次指标:precision@K(功效很弱,仅供参考)

指标seed 0seed 1seed 2均值 ± 标准差
baselineP@10000.1000.0333 ± 0.0471
nullP@10000.06490.0216 ± 0.0306
proposedP@1000.10000.0333 ± 0.0471
baselineP@20000.1000.0333 ± 0.0471
nullP@20000.05780.0193 ± 0.0272
proposedP@2000.050000.0167 ± 0.0236
baselineP@5000.02000.08000.0333 ± 0.0340
nullP@500.000180.02450.04240.0223 ± 0.0173
proposedP@5000.04000.06000.0333 ± 0.0249

> 字段路径:arms[*].metrics.precision_at_{10,20,50}。这些数在 0 和 0.1 之间跳,是因为 K 很小、正例只有几十个——不要用它下任何结论,我们放在这里是为了完整披露。

模板化程度:top-K 名单与随机化合物的重叠

seed 0seed 1seed 2均值 ± 标准差
baseline top-K vs 1000 次随机 top-K(Jaccard 中位数,越低越特异)0.6671.0000.4290.698 ± 0.234
proposed(z 校正)top-K vs 随机 top-K0000 ± 0

> 字段路径:arms[*].metrics.topk_jaccard_vs_null;报告口径为 K=20(见 work/summarize.py 中取 jaccard_*_vs_null_median["20"])。seed 1 出现 1.000,意思是那一次真实成分选出的 top-20 与随机化合物选出的 top-20 完全一致

三档 STRING 置信度的敏感性(结论不依赖网络稀疏度)

阈值baseline AUROC(3 种子)零分布均值 AUROC(3 种子)经验 p(3 种子)候选基因数(3 种子)
≥4000.695 / 0.720 / 0.6990.681 / 0.715 / 0.6770.103 / 0.412 / 0.2321944 / 1644 / 1513
≥700(主)0.554 / 0.674 / 0.6590.519 / 0.683 / 0.6140.173 / 0.619 / 0.183913 / 870 / 852
≥9000.659 / 0.628 / 0.6050.635 / 0.603 / 0.5900.145 / 0.434 / 0.280443 / 424 / 449

> 字段路径:threshold_sensitivity.{400,700,900}。三档下 baseline 均高于或接近零分布均值,但没有一档、没有一个种子跨过 p<0.05。


主结果图
主结果图(本轮实验的关键对比)。原图见随附 figs/ 目录。

2. 怎么读这个结果

这些数支持什么

在这套数据、这条流程、这个评价口径下,degree-hub 排名相对于靶点数量匹配的随机化合物,检测不到成分特异性。 results.json 的原话是"统计不可区分"——排出来的"核心靶点"主要由 PPI 网络的度分布(研究热度 / 连接偏差)驱动。top-20 名单的高重叠(均值 0.698,其中一个种子 1.000)是这句话最直观的证据:换成一组跟中药毫无关系的随机化合物,你会选出很大程度上相同的那批 hub。

这些数支持什么(请务必不要外推)

  1. 不能说中药成分没有药理作用。 本轮完全不测药效,只测"靶点排名是否超出随机基线"。丹参酮 IIA 的临床证据(见第 5 节)跟本轮结论不冲突——被质疑的是选靶方法,不是药。
  2. 不能说"已证明二者等价"。 p>0.05 是"没检出差异",不是"证明没有差异"。3 个种子的统计功效很弱,这是本轮规模限制,不是结论强度。
  3. 不能说 z-score 背景校正是更好的选靶方法。 它确实彻底改变了名单(与随机臂的 Jaccard 归零),但 AUROC 在 3 个种子上都没有提高(0.590 vs 0.629)。它只能用来说明"名单可以去模板化",不能用来说明"名单更准了"。
  4. 不能推广到 TCMSP 那类 OB/DL 筛出的全成分列表。 本轮只覆盖 CTD 里有人类实验记录的 20 味单体成分。反向推断是成立的:连证据最扎实的这 20 味都通不过对照,靠 OB/DL 阈值筛出的上百个成分只会更弱。

哪些是规模限制导致的、放大后可能变

deviations 里的四条偏离,逐条交代

  1. 20 味成分里有 2 味做了同族替换:黄芪甲苷(Astragaloside IV)和芍药苷(paeoniflorin)在 CTD 里查不到人类互作记录,分别替换为 astragaloside Abenzoylpaeoniflorin。后者只有 2 条靶点记录,对并集贡献极小。如果你的论文主打这两味,本轮结论对它们的代表性要打折。
  2. 随机化合物分层匹配简化为两档:靶点数 ≥50 的真实成分从 ≥50 靶点池抽(计划口径 n=1045,排除 20 味真实成分后 n=1036),其余(含 6 味 <20 靶点的成分)统一从 ≥20 靶点池抽(计划口径 n=1986,排除后 n=1972),没有为 <20 靶点档单独建池。这会让那 6 味低靶点成分的随机对照略"偏强",方向上是让对照更难被超越——即对我们自己的结论更保守,不是更宽松。
  3. "STRING 子网"的操作化定义只测了一种:种子节点的一阶邻居闭包 + 诱导子图内度数排序。这是网络药理学教程里最常见的构造方式,但不是唯一的;未测试 2-hop 等更深邻域。如果换成 2-hop 或加权度数,结论是否仍成立,本轮回答不了。
  4. 算力比预算宽裕,跑得比原计划更满:原计划留了"时间不够就缩小 null_reps"的预案,实际没有触发——三档阈值全部以完整 1000 次零分布跑满(runtime_sec 总计 157 秒,各档分别约 90.7 / 33.0 / 20.3 秒)。这条偏离的方向是比原计划更充分

3. 你现在可以拿它做什么

值得投的一步:把这份对照作为主论文的方法学补充分析。 你写 MCAO / OGD-R / WB 的主线不变,在方法或讨论里加一段:我们用靶点数量匹配的随机化合物集跑了同一条流程 1000 次,报告经验 p 值与 top-K 重叠率,说明 degree 排名本身不足以支撑"核心靶点"的说法,因此我们最终的 3-5 个靶点是基于 X(湿实验证据 / 已有药代文献 / 分期表达)而非仅凭 degree 选定的。这把 SCOPE.md 第 3 节第①条(三四区最常见的实质性质疑:"TNF、IL6、AKT1 出现在几乎每一篇中药网络药理学论文里,请说明它们是你研究对象的特异靶点")从一个可能的拒稿理由,变成你已经主动处理过的一节。本轮代码可以直接换成你自己的成分列表重跑。

先别投的两步

审稿人最可能打的三个点(前两条来自 SCOPE.md 第 3 节,第三条是本轮实验新增的):

  1. "你的核心靶点是随机的吗?" —— 本轮直接给了答案与代码,是你现在最能防住的一条。
  2. "OB≥30%、DL≥0.18 的依据是什么?" —— 本轮数据源不含 OB/DL 字段,没做这个敏感性分析。建议你自己补:OB 取 20/30/40、DL 取 0.1/0.18/0.3,报告核心靶点列表的变化。对糖苷类成分(人参皂苷、梓醇、天麻素)这个问题尤其致命——它们口服生物利用度极低却经肠道菌群代谢起效,用默认 OB 阈值会直接筛掉。
  3. "你的成分覆盖只有 20 个单体,代表性够吗?" —— 这是本轮实验自己的软肋(见第 2 节限制 4),你引用时要主动写明这个边界,别让审稿人先说出来。

如果你做分子对接,同一个逻辑照搬:同时对 20-50 个无关蛋白做同样的对接,给出分数的背景分布,再说"我们的靶点位于背景分布的前 5%"。这一句能把对接从装饰变成证据。纯 CPU 可做,本轮因受体结构准备不稳定没有纳入。


4. 随附材料

文件是什么
work/run.sh一条命令复现全部结果bash run.sh。自动下载 4 个公开数据文件(已存在则跳过)→ 跑实验 → 生成 results.json → 出图。
work/run_experiment.py主实验代码:加载 CTD / STRING、构建子网络、三个臂、1000 次零分布、经验 p 值。随机数由 numpy.random.default_rng(threshold, seed[, rep]) 确定性播种。
work/summarize.py把原始输出汇总成 results.json,内含断言:每个 mean 都从 per_seed 重算并校验一致(<1e-9)。
work/make_figures.py出图脚本。
work/results.json结构化最终结果,本报告所有实验数字的唯一来源。
work/raw_results.json每个"阈值×种子"组合的原始逐项输出(含本报告未展开的中间量)。
work/logs/run.log完整运行日志,带时间戳,每个种子的 AUROC / p 值 / 候选基因数都在里面,可与 results.json 逐行对照。
work/figs/auroc_vs_null.png图 A:主阈值下三个种子的 baseline / z 校正点位叠在 1000 次零分布的小提琴图上;图 B:三档阈值下经验 p 值与 p=0.05 线的关系(三条线全部远在红线之上)。
work/figs/topk_jaccard.pngK=10/20/50 下,真实成分 top-K 与随机化合物 top-K 的 Jaccard 中位数柱状图。
work/data/本轮实际使用的数据文件(CTD 两份 + STRING 两份)。
SCOPE.md本轮之前做的方向判断与文献查新(第 5 节是它的摘要)。

环境:Python 3.12.3、torch 2.13.0+cpu(results.json.env),纯 CPU,无 GPUOMP_NUM_THREADS=2。种子固定为 0/1/2,重跑数字应完全一致(我们端到端重跑过一次,两次结果相同)。

关于数据我们不要你的数据、不要你的代码、不要你的稿子。 本轮全部证据用公开数据集自己造——CTD 与 STRING v12.0,免注册、直链可下载,run.sh 里写死了 URL。任何人(包括审稿人)都能拿这套代码复查我们的每一个数,也能推翻它。


5. 方向判断与文献(摘自随附的 SCOPE.md

> 本节数字来自 SCOPE.md 的 2026-08-07 PubMed 实时检索,不是本轮实验结果;实验数字全部在第 1 节。

参考来源(全部保留)


本文档由 JouleBeat · DeepGraph 出具。实验代码、日志与原始结果随附,结论可被复查与反驳。

随附材料(点开即看,不用下载)

打包下载全部材料(.zip)
口径与边界。这些限制与负结果均保留在原始材料中。
本案例源自一位研究者通过公开表单提交的方向,已隐去其姓名、单位与一切可定位信息。结论与代码可复查、可反驳。
← 全部案例 · JouleBeat · DeepGraph