# 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 0 | seed 1 | seed 2 | 均值 ± 标准差 |
|---|---|---|---|---|
| `baseline-degree-hub`（中药成分，标准流程） | 0.554 | 0.674 | 0.659 | **0.629 ± 0.0532** |
| `null-random-compounds`（靶点数匹配的随机化合物，1000 次零分布的均值） | 0.519 | 0.683 | 0.614 | **0.606 ± 0.0674** |
| `proposed-null-corrected`（用零分布做 z-score 背景校正后重排序） | 0.538 | 0.619 | 0.613 | **0.590 ± 0.0369** |
| **经验 p 值**（baseline 相对零分布，`(r+1)/(n+1)`） | **0.173** | **0.619** | **0.183** | — |
| 候选基因数 | 913 | 870 | 852 | — |

> 字段路径：`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.py` 中 `null_mean` 的赋值），不是 `proposed-null-corrected` 臂的 0.590，读 JSON 时别对错。

### 次指标：precision@K（功效很弱，仅供参考）

| 臂 | 指标 | seed 0 | seed 1 | seed 2 | 均值 ± 标准差 |
|---|---|---|---|---|---|
| baseline | P@10 | 0 | 0 | 0.100 | 0.0333 ± 0.0471 |
| null | P@10 | 0 | 0 | 0.0649 | 0.0216 ± 0.0306 |
| proposed | P@10 | 0 | 0.100 | 0 | 0.0333 ± 0.0471 |
| baseline | P@20 | 0 | 0 | 0.100 | 0.0333 ± 0.0471 |
| null | P@20 | 0 | 0 | 0.0578 | 0.0193 ± 0.0272 |
| proposed | P@20 | 0 | 0.0500 | 0 | 0.0167 ± 0.0236 |
| baseline | P@50 | 0 | 0.0200 | 0.0800 | 0.0333 ± 0.0340 |
| null | P@50 | 0.00018 | 0.0245 | 0.0424 | 0.0223 ± 0.0173 |
| proposed | P@50 | 0 | 0.0400 | 0.0600 | 0.0333 ± 0.0249 |

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

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

| 臂 | seed 0 | seed 1 | seed 2 | 均值 ± 标准差 |
|---|---|---|---|---|
| baseline top-K vs 1000 次随机 top-K（Jaccard 中位数，越低越特异） | 0.667 | 1.000 | 0.429 | 0.698 ± 0.234 |
| proposed（z 校正）top-K vs 随机 top-K | 0 | 0 | 0 | 0 ± 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 种子） |
|---|---|---|---|---|
| ≥400 | 0.695 / 0.720 / 0.699 | 0.681 / 0.715 / 0.677 | 0.103 / 0.412 / 0.232 | 1944 / 1644 / 1513 |
| ≥700（主） | 0.554 / 0.674 / 0.659 | 0.519 / 0.683 / 0.614 | 0.173 / 0.619 / 0.183 | 913 / 870 / 852 |
| ≥900 | 0.659 / 0.628 / 0.605 | 0.635 / 0.603 / 0.590 | 0.145 / 0.434 / 0.280 | 443 / 424 / 449 |

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

---

## 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 阈值筛出的上百个成分只会更弱。

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

- **种子数**：只有 3 个。加到 20-30 个种子、报告 p 值分布，才谈得上稳定的显著性判断。
- **正例太少**：131 个卒中基因分半后，能评估的正例只有几十个，这直接导致 precision@K 在 0 和 0.1 之间跳。换更大的疾病基因集（如纳入 CTD inferred 关联、DisGeNET）会明显改善功效。
- **候选基因池随阈值剧烈变化**：≥400 时 1513-1944 个，≥900 时只剩 424-449 个。AUROC 的绝对值随之变化（≥400 档普遍更高），但**三档的显著性结论一致**，这是本轮结论最硬的一面。

### `deviations` 里的四条偏离，逐条交代

1. **20 味成分里有 2 味做了同族替换**：黄芪甲苷（Astragaloside IV）和芍药苷（paeoniflorin）在 CTD 里查不到人类互作记录，分别替换为 **astragaloside A** 和 **benzoylpaeoniflorin**。后者只有 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` 第 0 节的判断在实验做完后依然成立——单独发的难度反而更高，审稿人会问"那你的改进方法在真实药物上验证了吗"，而我们这轮恰恰得到的是"改进方法（z 校正）也没提高预测"。
- **别在没有对照的情况下再产一篇 degree-hub + 分子对接的模板文**。这条细分线上近两年平均每三天出一篇同类文章（`SCOPE.md` 第 1 节），novelty 已经很难靠机制新颖性取胜，扎实度是唯一的差异点。

**审稿人最可能打的三个点**（前两条来自 `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.png` | K=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，无 GPU**，`OMP_NUM_THREADS=2`。种子固定为 0/1/2，重跑数字应完全一致（我们端到端重跑过一次，两次结果相同）。

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

---

## 5. 方向判断与文献（摘自随附的 `SCOPE.md`）

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

- **你的命题本体我们做不了**：机制证据必须来自 MCAO / OGD-R / WB / qPCR / 免疫组化，我们只有 CPU，一个都做不了。我们只碰你几乎一定会用到的前置环节——网络药理学筛靶点。
- **领域现状不是缺研究，是缺能被复现的研究**：`network pharmacology + (stroke OR cerebral ischemia)` 全库 500 篇，其中 237 篇在 2025-2026——这条细分线上近两年平均每三天出一篇同类文章。
- **审稿人的默认参照系**：成分层面是丹参酮 IIA、黄芩苷/黄芩素、人参皂苷、川芎嗪；方剂层面是补阳还五汤；机制层面铁死亡（Nrf2/GPX4）、神经炎症、血脑屏障、自噬、PI3K/Akt 五条在 2025 年已被写透。
- **公认难点不是找不到靶点，是候选靶点太多且不可证伪**：同一个方剂换个数据库、换个 OB/DL 阈值，核心靶点列表就变。
- **三个还开着的缺口**：① 网络药理学几乎从不做空模型对照（本轮做的就是这个）；② 成分-靶点数据库之间的一致性从没被量化（TCMSP 无稳定下载接口，工程量超本轮预算）；③ 卒中分期（急性期/亚急性期/恢复期）与靶点的对应关系（需要 GEO 的 MCAO 时间序列，超本轮预算，但价值最高）。
- **对三四区目标而言，方法学扎实度比 novelty 重要得多**：这个档位的审稿人一般不会因为"机制不新"毙你，但会因为"结果不可复现 / 无对照"毙你。

### 参考来源（全部保留）

- [Trends and Pitfalls in the Progress of Network Pharmacology Research on Natural Products. *Pharmaceuticals* 2025;18(4):538](https://pmc.ncbi.nlm.nih.gov/articles/PMC12030339/) — 天然产物网络药理学的方法学陷阱（PMID 40283973）
- [Evaluating current status of network pharmacology for herbal medicine focusing on identifying mechanisms and therapeutic effects. *J Adv Res* 2025](https://doi.org/10.1016/j.jare.2024.12.040) — 缺乏统一标准与对照的现状评估（PMID 39730024）
- [Ferroptosis regulation by traditional Chinese medicine for ischemic stroke intervention based on network pharmacology and data mining. *PLoS One* 2025](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0321751) — 本方向 2025 年的典型模板文（PMID 40238820）
- [Elucidating the mechanism of Buyang Huanwu Decoction in the treatment of ischemic stroke: A network pharmacology and molecular docking study. *Medicine (Baltimore)* 2026](https://pubmed.ncbi.nlm.nih.gov/42470003/) — 补阳还五汤这条默认参照系仍在持续产出（PMID 42470003）
- [Traditional Chinese herbal medicines for the treatment of ischemic stroke in China. *Ageing Res Rev* 2025;108:102803](https://pubmed.ncbi.nlm.nih.gov/40516828/) — 国内中药治缺血性卒中的整体综述（PMID 40516828）
- [Application of Traditional Chinese Medicine in the different pathological stages of ischemic stroke: Target immune cells. *Ageing Res Rev* 2025;112:102866](https://pubmed.ncbi.nlm.nih.gov/40784530/) — 分期视角（对应第 2 节缺口 3）（PMID 40784530）
- [A systematic review and meta-analysis of RCTs on the efficacy and safety of tanshinone IIA sodium sulfonate injection as adjunctive therapy for stroke. *J Ethnopharmacol* 2025](https://pubmed.ncbi.nlm.nih.gov/40816584/) — 丹参酮 IIA 作为标准对照的临床证据（PMID 40816584）
- [Procedural and Methodological Quality in Preclinical Stroke Research — A Cohort Analysis of the Rat MCAO Model Comparing Periods Before and After STAIR/ARRIVE. *Front Neurol* 2022;13:834003](https://pubmed.ncbi.nlm.nih.gov/35707032/) — 卒中临床前研究的质量规范（PMID 35707032）
- [The STRING database in 2023. *Nucleic Acids Res* 2023;51:D638-D646](https://pubmed.ncbi.nlm.nih.gov/36370105/) — 本轮 PPI 网络来源（PMID 36370105）
- [Comparative Toxicogenomics Database's 20th anniversary: update 2025. *Nucleic Acids Res* 2025;53:D1328-D1334](https://pubmed.ncbi.nlm.nih.gov/39385618/) — 本轮化合物-基因、基因-疾病数据来源（PMID 39385618）
- 数据直链（均已实测可访问，2026-08-07）：[CTD downloads](https://ctdbase.org/downloads/) · [STRING v12.0 downloads](https://string-db.org/cgi/download)

---

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