← 回 INDEX · ISM 方法本體 02 · 能力對照 10
一張圖總結三個統計在 ISM 各自吃什麼資料、回答什麼問題;下方敘述逐項對回 C++ 原始碼 (file:line) 確認。
資料 branch:research/subclonal-reconstruction-202606。
verification_class_legacy 作 provenance input。current decision tree 另納入 label-PERMANOVA,並用 PERMDISP 分出 clean location shift 與 dispersion-confounded structure;Significant 是 verification_significant 的 boolean projection,已取代 obsolete Fisher-only gate(RegionProcessor.cpp:1817-1862,2026-2032)。這仍是 association evidence classification,不是 cellular truth。
| 圖中元素 | 白話 | 它吃什麼 / 它問什麼 | 原始碼 (file:line) |
|---|---|---|---|
| 路線 A 對照表 | 列=甲基化分群、欄=二元標籤 | 標籤 = ALT/REF(UNKNOWN 排除)或 HP1/HP2(HP_OTHER 排除)或 HP-family。甲基化只透過「分群」進來,不是 raw 逐 CpG 細胞 | GlobalTest.cpp:28-67 · :155-167(allele) · :186-199(HP) |
| Fisher (FFH) | 二元標籤 association 是否偏離 null? | cluster×二元標籤的 R×2 Fisher-Freeman-Halton(兩群時為 2×2),Monte-Carlo 固定邊際洗牌(2000–10000 次,Wilson CI 提早停);p = 比實際更極端的比例,不判定 truth 或 causality | FisherExact.cpp:259-320 · GlobalTest.cpp:73-132 |
| Cramér's V | 對齊有多強(0~1) | 由 Pearson 卡方算 raw V=√(χ²/(n·(min_dim−1)));Cochran 可靠性:≥80% 細胞期望≥5 才採信,否則 reliability=false 且 summary V=0;legacy gate/JSON 仍讀 raw V | MathUtils.cpp:154-207 · summary projection RegionProcessor.cpp |
| 路線 B 距離矩陣 | 兩 read 甲基化差多少 | NHD = 共同覆蓋 CpG 上甲基化不一致的比例;無重疊→NaN,貪婪剪枝到完整子矩陣 (≥5 reads) | RegionProcessor.cpp:421-422 · StructureTest.cpp:30-91 |
| PERMANOVA | 指定 label 是否對應 read-distance centroid separation? | pseudo-F = (組間SS/(k−1))÷(組內SS/(N−k));現行 release baseline 洗標籤 999 次得 p(p-floor 0.001)。分群、HP、ALT 三種 labeling 各跑一次;結果只檢驗指定 labeling 與距離 variation/centroid separation 的 association,不證明 unsupervised clusters 或 reads 真的分雲 | StructureTest.cpp:141-201 · SignificanceAnalyzer.cpp:99-131,301-304 |
| PERMDISP | 某組是否只是比較散 | 各 read 到組心 RMS 距離做單因子 ANOVA;current core 以 F-distribution upper-tail 解析 p 判定 dispersion_warning。historical 3-bucket lookup 已被取代 |
StructureTest.cpp:378-472 |
| historical v1 雙門檻 | legacy provenance class(非 current final pass/fail) | passed_gate=(Fisher p≤0.1 且 V≥0.1);舊 Significant 式與 GlobalP=min(Fisher axes) 只用來解釋 verification_class_legacy |
GlobalTest.cpp:138-143 · SignificanceAnalyzer.cpp |
| current Verification v2 | current evidence class + Significant | 合併 legacy evidence path、Δβ、HP-AUC、within-HP、label-PERMANOVA 與 PERMDISP clean/dispersion axes;Significant=verification_significant |
RegionProcessor.cpp:1817-1862,2026-2032 |
SignificanceAnalyzer 只聽 Fisher 那張表,所以「PERMANOVA 顯著但 Fisher p>0.05」曾被打成 Weak/Noise;這也是 v2 納入 clean label-PERMANOVA/PERMDISP axes 的原因。圖中虛線只解釋 historical gate,不是 current decision。
cramers_v_reliable=false;MathUtils.cpp::cramers_v 仍回傳 raw V,RegionProcessor.cpp 的 summary projection 才寫 0,而 legacy GlobalTest::passed_gate 仍直接讀 raw V。這表示 summary 不足以判讀,不能把歸零當作真偽判定(762 MISSED / 487 僅是歷史分析口徑的候選計數)。
chi_square_p 是佔位符(直接 = Fisher p,GlobalTest.cpp:122-124),沒有獨立的卡方 p;卡方統計量只用來算 V。
StrengthScore、StrengthGrade 與五個可重加權 component:
StrengthStruct、StrengthTumor、StrengthSomatic、StrengthAssoc、StrengthGermline。
實作為五個 [0,1] sub-score 的等權平均:
clamp((HP_AUC_All−0.5)/0.5)、通過 within-HP gate 時的 clamp(WithinHP_BestSil/0.5)、
clamp(|SomaticResidualDbeta|/0.3)、clamp(CramersV)、clamp(|GermlineAsmDbeta|/0.3);
等級門檻 A/B/C/D/E = ≥0.50/≥0.35/≥0.22/≥0.12/其餘(RegionProcessor.cpp:1756-1785, 1896-1964)。
舊的 0.30/0.25/0.25/0.20 加權式只屬 historical formula,不是 current implementation。StrengthScore 只供 association-strength 排序;不是機率、生物正確率、clone 或 lineage 驗證。
research/subclonal-reconstruction-202606:src/core/GlobalTest.cpp · src/core/MathUtils.cpp · src/core/FisherExact.cpp ·
src/core/StructureTest.cpp · src/core/SignificanceAnalyzer.cpp · src/core/RegionProcessor.cpp ·
include/core/{GlobalTest,FisherExact,StructureTest,Stats}.hppInterSubMod/docs/explain/09_three-stats-division-of-labor.standalone.html