{
  "task_slug": "tcm-stroke-network-pharm-null-control",
  "question": "常规网络药理学 degree-hub 流程从中药活性成分选出的核心靶点，是否比靶点数量匹配的随机化合物集选出的靶点更能命中未参与流程的缺血性卒中疾病基因？",
  "falsifiable_prediction": "预测:中药成分臂的 holdout_auroc 相对随机化合物零分布的经验 p > 0.05(即无成分特异性,核心靶点主要由 PPI 度分布决定)。推翻条件:3 个种子中至少 2 个给出经验 p < 0.05 且 AUROC 相对零分布中位数的提升方向在 3 个种子中一致。",
  "prediction_outcome": "confirmed",
  "negative_result": true,
  "dataset": "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 映射。",
  "env": {
    "python": "3.12.3",
    "torch": "2.13.0+cpu",
    "extra_packages": []
  },
  "seeds": [
    0,
    1,
    2
  ],
  "arms": [
    {
      "name": "baseline-degree-hub",
      "is_baseline": true,
      "what": "20 味中药活性成分(CTD 人类互作记录)靶点并集 ∩ D_seed 作为种子节点，在 STRING physical-links (score>=700) 网络中取种子节点+一阶邻居为子网络，子网络内按节点度数(hub score)排序全部候选基因。",
      "metrics": {
        "holdout_auroc": {
          "per_seed": [
            0.5542596348884381,
            0.6741934013853447,
            0.6585471567267683
          ],
          "mean": 0.6290000643335171,
          "std": 0.05323407485314347
        },
        "precision_at_10": {
          "per_seed": [
            0.0,
            0.0,
            0.1
          ],
          "mean": 0.03333333333333333,
          "std": 0.047140452079103175
        },
        "precision_at_20": {
          "per_seed": [
            0.0,
            0.0,
            0.1
          ],
          "mean": 0.03333333333333333,
          "std": 0.047140452079103175
        },
        "precision_at_50": {
          "per_seed": [
            0.0,
            0.02,
            0.08
          ],
          "mean": 0.03333333333333333,
          "std": 0.0339934634239519
        },
        "topk_jaccard_vs_null": {
          "per_seed": [
            0.6666666666666666,
            1.0,
            0.42857142857142855
          ],
          "mean": 0.6984126984126983,
          "std": 0.23436227079735558
        }
      }
    },
    {
      "name": "null-random-compounds",
      "is_baseline": false,
      "what": "把 20 个真实中药成分替换成靶点数量匹配的随机 CTD 化合物(靶点>=50 的真实成分从 >=50 靶点池抽样，其余从 >=20 靶点池抽样)，重复 1000 次跑同一条流程，得到 AUROC/precision 的经验零分布(此处报告零分布均值)。",
      "metrics": {
        "holdout_auroc": {
          "per_seed": [
            0.5190857197522971,
            0.6834531265368637,
            0.6141923819447531
          ],
          "mean": 0.6055770760779713,
          "std": 0.0673786747898495
        },
        "precision_at_10": {
          "per_seed": [
            0.0,
            0.0,
            0.0649
          ],
          "mean": 0.021633333333333334,
          "std": 0.030594153399337954
        },
        "precision_at_20": {
          "per_seed": [
            0.0,
            0.0,
            0.0578
          ],
          "mean": 0.019266666666666665,
          "std": 0.027247181301721633
        },
        "precision_at_50": {
          "per_seed": [
            0.00018,
            0.024460000000000003,
            0.04236
          ],
          "mean": 0.022333333333333334,
          "std": 0.017285449243671844
        }
      }
    },
    {
      "name": "proposed-null-corrected",
      "is_baseline": false,
      "what": "对 baseline 子网络里每个候选基因，用 1000 次零分布里该基因在对应随机子网络中的度数算 z-score((真实度数-零分布均值)/零分布标准差)，按 z-score 重新排序同一批候选基因。",
      "metrics": {
        "holdout_auroc": {
          "per_seed": [
            0.537973942892807,
            0.6193492526430915,
            0.6126907073509015
          ],
          "mean": 0.5900046342956,
          "std": 0.03689154096575117
        },
        "precision_at_10": {
          "per_seed": [
            0.0,
            0.1,
            0.0
          ],
          "mean": 0.03333333333333333,
          "std": 0.047140452079103175
        },
        "precision_at_20": {
          "per_seed": [
            0.0,
            0.05,
            0.0
          ],
          "mean": 0.016666666666666666,
          "std": 0.023570226039551587
        },
        "precision_at_50": {
          "per_seed": [
            0.0,
            0.04,
            0.06
          ],
          "mean": 0.03333333333333333,
          "std": 0.024944382578492942
        },
        "topk_jaccard_vs_null": {
          "per_seed": [
            0.0,
            0.0,
            0.0
          ],
          "mean": 0.0,
          "std": 0.0
        }
      }
    }
  ],
  "headline": {
    "metric": "holdout_auroc",
    "baseline_mean": 0.6290000643335171,
    "proposed_mean": 0.6055770760779713,
    "delta": 0.023422988255545785,
    "claim": "标准 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。"
  },
  "deviations": [
    "20 个成分中 2 个用同族最接近的可用化合物替代真实计划里的具体名称：黄芪甲苷(Astragaloside IV，CTD无人类记录)→ astragaloside A；芍药苷(paeoniflorin，CTD无人类记录)→ benzoylpaeoniflorin。",
    "随机化合物零分布分层匹配简化为两档(按计划给定的两个池子)：真实成分靶点数>=50 的从 CTD >=50 靶点化合物池(n=1045，排除20个真实成分后1036)匹配抽样，其余(含<20靶点的6个成分)统一从 >=20 靶点池(n=1986，排除后1972)匹配抽样，没有为 <20 靶点档单独建池（计划原文只给了两个池子的规模）。",
    "'STRING 子网'具体操作化为：种子节点(成分靶点∩D_seed) 的一阶邻居闭包，在该诱导子图内按子图内度数排序；这是网络药理学教程里最常见但非唯一的子网络构造方式，未测试更深邻域(2-hop)等替代定义。",
    "算力充裕(实测 3 阈值x3种子x1000次零分布仅 109 秒)，未触发计划里为节省时间而缩小 null_reps 的预案，三个 string_score_threshold 档位都以完整 1000 次零分布跑满，比原计划更充分。"
  ],
  "runtime_sec": 156.59575200080872,
  "threshold_sensitivity": {
    "400": {
      "baseline_auroc_per_seed": [
        0.694514106583072,
        0.7197106246313167,
        0.6989957120288874
      ],
      "null_auroc_mean_per_seed": [
        0.6813235440392805,
        0.7148177359874621,
        0.6773389153255848
      ],
      "empirical_p_per_seed": [
        0.1028971028971029,
        0.4115884115884116,
        0.23176823176823177
      ],
      "n_candidate_genes_per_seed": [
        1944,
        1644,
        1513
      ]
    },
    "700": {
      "baseline_auroc_per_seed": [
        0.5542596348884381,
        0.6741934013853447,
        0.6585471567267683
      ],
      "null_auroc_mean_per_seed": [
        0.5190857197522971,
        0.6834531265368637,
        0.6141923819447531
      ],
      "empirical_p_per_seed": [
        0.17282717282717283,
        0.6193806193806194,
        0.18281718281718282
      ],
      "n_candidate_genes_per_seed": [
        913,
        870,
        852
      ]
    },
    "900": {
      "baseline_auroc_per_seed": [
        0.6588888888888889,
        0.6281472359058565,
        0.6054901960784314
      ],
      "null_auroc_mean_per_seed": [
        0.6351876243721863,
        0.6031521763797614,
        0.5897504203120123
      ],
      "empirical_p_per_seed": [
        0.14485514485514486,
        0.43356643356643354,
        0.27972027972027974
      ],
      "n_candidate_genes_per_seed": [
        443,
        424,
        449
      ]
    }
  },
  "meta": {
    "tcm_compounds": {
      "丹参酮类": "tanshinone",
      "黄芩素": "baicalein",
      "黄芩苷": "baicalin",
      "人参皂苷类": "ginsenoside Rg1",
      "小檗碱": "Berberine",
      "姜黄素": "Curcumin",
      "白藜芦醇": "Resveratrol",
      "葛根素": "puerarin",
      "丹酚酸类": "salvianolic acid B",
      "黄芪甲苷": "astragaloside A",
      "淫羊藿苷": "icariin",
      "梓醇": "catalpol",
      "天麻素": "gastrodin",
      "羟基红花黄色素A": "hydroxysafflor yellow A",
      "灯盏乙素": "scutellarin",
      "槲皮素": "Quercetin",
      "山奈酚": "kaempferol",
      "木犀草素": "Luteolin",
      "三七皂苷R1": "notoginsenoside R1",
      "芍药苷": "benzoylpaeoniflorin"
    },
    "tcm_target_union_size": 9129,
    "tcm_compound_target_counts": {
      "tanshinone": 125,
      "baicalein": 100,
      "baicalin": 30,
      "ginsenoside Rg1": 39,
      "Berberine": 208,
      "Curcumin": 668,
      "Resveratrol": 6682,
      "puerarin": 74,
      "salvianolic acid B": 26,
      "astragaloside A": 17,
      "icariin": 31,
      "catalpol": 9,
      "gastrodin": 7,
      "hydroxysafflor yellow A": 11,
      "scutellarin": 7,
      "Quercetin": 3763,
      "kaempferol": 150,
      "Luteolin": 159,
      "notoginsenoside R1": 25,
      "benzoylpaeoniflorin": 2
    },
    "null_pool_sizes": {
      "pool_ge20": 1972,
      "pool_ge50": 1036
    },
    "stroke_gene_count": 131,
    "thresholds_run": [
      400,
      700,
      900
    ],
    "primary_threshold": 700,
    "seeds": [
      0,
      1,
      2
    ],
    "elapsed_per_threshold_sec": [
      [
        400,
        90.73987054824829
      ],
      [
        700,
        32.994855642318726
      ],
      [
        900,
        20.269660711288452
      ]
    ]
  }
}