模組 12 · LongPhase-S: matched tumour–normal

LongPhase-S(配對 tumor–normal)

依序說明 GHIR、LCVF、DNA 比例迴歸、比例感知過濾與最終 somatic haplotagging;並說明這個迴歸估的為何是 tumor DNA fraction,不是 cellular purity。

約 80 分鐘建議先修:腫瘤混合體建議先修:評估建議先修:LongPhase

本模組學習目標

  • 說明一條 tumor read 為什麼被標成 HP1、HP2、HP1-1、HP2-1 或 HP3
  • 畫出 LongPhase-S 的四個階段,並說明為什麼比例估計必須排在過濾之前
  • 寫出 GHIR 的算式,並說明造成失衡的兩個來源
  • 說明這個迴歸估出來的量為什麼是 tumor DNA fraction,而不是 cellular purity
  • 說出四個 somatic variant filter 各自在偵測什麼樣的假陽性
  • 在 BAM 裡找到 somatic haplotype 的標籤,並知道估計值被寫到哪裡

為什麼重要

前面幾章的 phasing 都假設「一個人只有兩條染色體拷貝」。腫瘤樣本不成立: 裡面混著正常細胞與好幾群癌細胞,某些區段還多了或少了拷貝。 在這個前提下,把 read 分成 HP1/HP2 兩堆已經不夠用。

的做法是多做一層:除了兩條 germline haplotype, 再把「帶著 somatic 變異的那些 read」單獨拉成它們的後代分支。 這一層做出來之後有三個連帶好處 —— 可以直接估腫瘤來源 DNA 佔了多少、 可以用來重新判斷變異真假、也可以看出哪些 read 屬於同一個癌細胞群。

第一項要先把量講清楚,因為工具的參數名稱與輸出欄位都叫 purity, 但它估的是 (分母是分子), 不是 (分母是細胞)。 M3 與 M8 的重要區分 #2 已建立這兩個量在非二倍體之下並不相等; 本章說明 LongPhase-S 落在哪一邊,以及為什麼它不可能落在另一邊。

概念與互動

先看懂 somatic haplotagging 本身

整章的其他東西都建立在這一步上: 就是給每條 tumor read 貼一個標籤。 判斷只用兩件事 —— 這條 read 上的 germline allele 屬於哪一條,以及它有沒有帶 somatic allele。

somatic haplotagging:每條 tumor read 為什麼被貼上 HP1、HP2、HP1-1、HP2-1 或 HP3 示意 somatic haplotagging 的判斷過程。 第一步先用 normal 樣本已定相的 germline 變異,建立兩條 germline haplotype 的骨架: HP1 在兩個 germline 位點上是 T 與 C,HP2 是 A 與 G。 第二步把 tumor 的 read 拿進來,此時每條 read 還沒有標籤。 第三步依兩件事貼標籤:read 上的 germline allele 屬於哪一條,以及它在候選位置上有沒有帶 somatic allele。 只帶 germline allele 的 read 標成 HP1 或 HP2; 同時帶 germline 與 somatic allele、且來源可判定的標成 HP1-1 或 HP2-1; 帶 somatic allele 但沒有 germline 錨點可比對的(例如太短的 read)暫時標成 HP3。 因此 HP1-1 的名字本身就記錄了它的來源:HP1 的 somatic 後代。 HP3 不是第三條染色體,而是「證據不足以判斷來源」的暫時標籤。 somatic haplotagging:一條 read 為什麼被貼上某個標籤 判斷只用兩件事:read 上的 germline allele 屬於哪一條,以及它有沒有帶 somatic allele。 germline 位點① germline 位點② 候選 somatic 位點 ① germline 骨架 來自 normal 樣本、 已經定相的 germline 變異 HP1 T C HP2 A G 這一條是 T–C 這一條是 A–G ② tumor 的 read 還沒有標籤 (灰色虛線) T C T C A G A G A G 這條太短, 沒蓋到 germline 位點 ↓ 有沒有帶 somatic allele ③ 貼上標籤 同樣一批 read, 只是重新排序與著色 T C HP1 只有 germline → 屬 HP1 A G HP2 只有 germline → 屬 HP2 T C HP1-1 帶 somatic,來源可判定 A G HP2-1 帶 somatic,來源可判定 A G HP3 帶 somatic,無錨點 HP1-1 的意思就是「HP1 的 somatic 後代」——名字本身記錄了來源。 HP3 不是第三條染色體,是「證據還不足以判斷來源」的暫時標籤。
同一批 read,先用 normal 的 phased germline 變異當骨架,再依兩個問題貼標籤。 HP1-1 讀作「HP1 的 somatic 後代」HP3 不是第三條染色體,而是「證據還不足以判斷來源」的暫時標籤。
標籤這條 read 的情況
HP1 / HP2只帶 germline allele,可判定屬於哪一條 haplotype
HP1-1 / HP2-1同時帶 germline 與 somatic allele,且來源可判定
HP3帶 somatic allele,但沒有可比對的 germline 錨點(例如 read 太短、或該區段沒有 het 位點)

這個標籤系統帶來一個一般 phasing 工具做不到的事: 在一條 haplotype 整條遺失的 區域裡,帶 somatic 變異的 read 仍會被標成 HP1-1, 而不是被硬塞進剩下那條 germline haplotype。

四個階段

LongPhase-S 的四個階段與比例回饋 流程從左到右分成四個階段。 輸入是 tumor 與 normal 的長讀資料:normal 用來呼叫 germline 變異並定相成 HP1 與 HP2, tumor 用來呼叫 somatic 候選變異。 階段一做初步 somatic haplotagging,讓每條 read 先拿到一個暫時標籤。 階段二用全基因體的 germline haplotype 失衡分布估計腫瘤 DNA 比例。 階段三用估到的比例決定四個過濾器的門檻鬆緊,重新校準 somatic 變異。 階段四用校準後的變異重建 germline 與 somatic haplotype,並處理沒有 germline 錨點的 read。 圖中紅色回饋線標出關鍵順序:比例必須先估出來,才能決定過濾要多嚴格。 原因是低比例樣本裡真變異的支持 read 很少,固定門檻會把它濾掉。 輸出的量是腫瘤 DNA 比例,不是腫瘤細胞比例,因為模型裡沒有倍體。 LongPhase-S 的四個階段 輸入是 tumor 與 normal 兩邊的長讀資料與變異;輸出是 read 層級的 germline 與 somatic haplotype。 Tumor BAM + somatic 候選變異 Normal BAM + germline 變異 先定相成 HP1/HP2 初步 haplotagging 每條 read 先拿到 暫時的 HP 標籤 (含 HP1-1/HP3) DNA 比例估計 全基因體 GHIR 分布 → median 與 IQR → 一個比例值 f 變異重校準 四個過濾器 門檻依 f 調整 → somatic VCF 整合重建 重新 haplotag HP3 依一致性繼承 → 最終 HP 標籤 ② 估到的 f 決定 ③ 的門檻鬆緊 最終輸出 BAM: HP:Z:1-1 / 2-1 / 3(字串) _purity.out 文字檔、重校準後的 VCF 為什麼比例一定要排在過濾之前? DNA 比例 0.2、50× 覆蓋度時,一個 clonal somatic 變異只有約 5 條支持 read。 套用適合純腫瘤的嚴格門檻會把它一起濾掉;一律放寬又會讓高比例樣本多出假陽性。 所以門檻不是一組固定數字,而是每個比例級距各有一組。
四個階段從左到右。紅色回饋線是整個設計的關鍵順序: 比例必須先估出來,才能決定過濾要多嚴格。 階段②的輸出標成 f(DNA 比例)而非 p,理由見下一節末的重要區分。
階段做什麼產出
初步 somatic haplotagging(上一節那張圖)每條 read 一個暫時標籤
算全基因體的 分布、過濾低信心位點、迴歸估腫瘤 DNA 比例一個比例數值 f
依該比例調整門檻,跑四個過濾器重新校準候選變異高信心的 somatic VCF
用校準後的變異重新 haplotag,並處理 HP3最終 HP 標籤

變異呼叫本身不在這四個階段裡:tumor 的候選變異由 或 DeepSomatic 提供, normal 的 germline 變異由 或 DeepVariant 提供,並先 成 HP1/HP2 骨架。 LongPhase-S 是接在它們後面的一層。

為何比例估計先於過濾

回到 M8 的合成示例:腫瘤 DNA 比例 0.2、50× coverage,一個 clonal somatic 變異 只有約 5 條 read 支持。

若套用適合純腫瘤的嚴格門檻,真變異可能被當成雜訊而漏掉, 下降。 若一律放寬,高比例樣本的偽陽性則可能增加。

因此門檻不是一組固定數字:流程先估比例,再依比例級距選用對應的那組參數。 這一步只需要「支持 read 大概會有幾條」,而那正是 DNA 比例決定的量 —— 過濾這件事本來就不需要細胞比例

GHIR:兩條 germline haplotype 的 read 有多偏

(Germline Haplotype Imbalance Ratio)在每一個候選 somatic 位點上各算一次

GHIR=max(HP1 read 數,HP2 read 數)HP1 read 數+HP2 read 數

所以它的範圍是 0.5 到 1:0.5 表示兩條完全平衡,1.0 表示 read 全部偏向其中一條。 分母只算被分到 HP1 或 HP2 的 read —— 這是關鍵,因為帶 somatic allele 的 read 會被改標成 HP1-1HP2-1,就不再算進原本那條的計數。

GHIR 的定義:一個候選位點上兩條 germline haplotype 的 read 有多偏 GHIR 的定義是在一個候選 somatic 位點上, 取 HP1 與 HP2 兩個 read 數的較大者,除以這兩者的總和。 因此 0.5 表示兩條完全平衡,1.0 表示 read 全部偏向其中一條。 三格由左到右示意 purity 由低到高: 沒有腫瘤突變時 HP1 與 HP2 各三條,比值 0.5; 少部分細胞帶突變時,帶突變的 read 被改標成 HP2-1、不再算進 HP2,比值升為 0.75; 腫瘤細胞比例很高時 HP2 幾乎只剩 HP2-1,比值接近 1.0。 下半部提醒第二個造成偏移的來源:腫瘤本身的拷貝數變化、LOH 與 aneuploidy 也會讓某一條 haplotype 變多或消失,同樣把比值推向 1, 因此需要先用 normal 樣本當基準把這類位點濾掉。 GHIR:兩條 germline haplotype 的 read 有多偏 GHIR = max(HP1 read 數, HP2 read 數) ÷ (HP1 read 數 + HP2 read 數) 在每一個候選 somatic 位點上各算一次。0.5 = 兩條完全平衡;1.0 = read 全部偏向其中一條。 沒有腫瘤突變 HP1 HP1 HP1 HP2 HP2 HP2 HP1 = 3 HP2 = 3 GHIR = 3 ÷ (3+3) 0.50 平衡 少部分細胞帶突變 HP1 HP1 HP1 HP2 HP2-1 HP2-1 HP1 = 3 HP2 = 1 GHIR = 3 ÷ (3+1) 0.75 開始偏 腫瘤細胞比例很高 HP1 HP1 HP1 HP2-1 HP2-1 HP2-1 HP1 = 3 HP2 = 0 GHIR = 3 ÷ (3+0) 1.00 完全偏一邊 帶 somatic allele 的 read 被改標成 HP2-1,就不再算進 HP2 —— 兩條的比例因此失衡。 但失衡不只有一個來源。 腫瘤本身的拷貝數變化、LOH 與 aneuploidy 也會讓某一條 haplotype 變多或整條消失, 同樣把 GHIR 推向 1。所以要先用 normal 樣本當基準,把「本來就已經失衡」的位點濾掉。 這個過濾步驟叫 LCVF,它決定了 GHIR 分布乾不乾淨。
三格由左到右是同一個位點在腫瘤佔比由低到高時的樣子。 腫瘤細胞越多,被拉去 HP2-1 的 read 就越多,HP2 剩下的越少,比值就越接近 1。 下半部提醒第二個來源:腫瘤自己的拷貝數變化與 LOH 也會造成失衡,所以需要先用 normal 當基準過濾。

失衡有兩個來源,這點很容易只記住一個:

  1. somatic 變異把 read 拉走。腫瘤佔的比例越高,被拉走的越多 —— 這是我們想量的訊號。
  2. 腫瘤本身的拷貝數變化、LOH 與 aneuploidy。某條 haplotype 被放大或整條刪掉, 一樣會讓比值接近 1 —— 這是雜訊,而且它跟腫瘤佔多少沒有關係。

第 2 項的處理方式是拿配對的 normal 樣本當基準:normal 裡就已經失衡的位點, 失衡顯然不是腫瘤造成的,直接排除。這就是下一節 LCVF 的工作。

LCVF:先把不能用的位點濾掉

這一步存在的理由很實際。研究團隊發現,落在低信心區域的假變異會把 GHIR 分布弄糊; 但已知的高信心區域清單(例如 HCC1395 的 SEQC2)只適用於那一個細胞株, 沒辦法拿去套用在別的樣本上。所以他們改用一組看得到、算得出來的條件來取代那份清單, 稱為 LCVF(Low-Confidence Variant Filtering)。四個條件全部通過才留下:

條件判準排除什麼
Minimum haplotaggingnormal 與 tumor 兩邊都至少要有 1 條被標到 HP1/HP2 的 read根本算不出 GHIR 的位點
Germline haplotype imbalancenormal 的 GHIR 必須低於門檻本來就已經失衡的位點(多為 germline 結構變異或
Germline haplotype read rationormal 中「有被標到 haplotype 的 read ÷ 總深度」必須高於門檻大量 read 標不上任何 haplotype 的位點 —— 通常是比對有問題
Germline haplotype read count支持 read 數必須高於門檻,而門檻由資料分布決定read 數太少的位點 —— 分母太小,GHIR 會亂跳

最後一項值得多看一眼。固定一個「至少幾條 read」的數字看起來最簡單, 但那個數字在比例 0.2 與比例 1.0 的樣本上不可能同時適用。 實際觀察到高信心與低信心變異的 read 數呈雙峰分布, 於是做法改成:先把直方圖平滑化、找出兩個主峰、取中間的谷點當門檻。 門檻因此會隨著樣本自己移動。

從分布到一個數字:迴歸模型

濾乾淨之後,全基因體的 GHIR 分布就可以拿來估比例了。 做法刻意簡單:整個分布只取兩個數字 —— 中位數與四分位距 —— 再用二次多項式迴歸對上目標值。

從 GHIR 分布估計腫瘤 DNA 比例:兩個特徵與一條迴歸曲線 上排是五個已知比例的合成樣本,各自把全基因體所有候選位點的 GHIR 畫成直方圖。 這五個樣本是把純腫瘤與正常的 BAM 依 read 數混出來的, 所以已知的那個數字是分子的比例,也就是腫瘤 DNA 比例,不是腫瘤細胞比例。 比例 0.2 時分布集中在 0.5 附近;比例越高,中位數往 1 移動; 中間的比例分布最分散,比例 1.0 時又重新集中在接近 1 的高值。 中排說明只從每個分布取兩個數字當特徵:中位數與四分位距。 下排把這兩個數字送進二次多項式迴歸,輸出一個估計值。 因為訓練標籤是 DNA 比例,學到的曲線輸出的也是 DNA 比例; 模型裡沒有倍體參數,所以無法換算成細胞比例。 模型用七個資料集訓練、一個資料集測試,並以 leave-k-out 交叉驗證評估, 報告的平均 R 平方約 0.96。 限制是這條曲線只在訓練資料涵蓋的範圍內可信, 換癌別、換 basecaller 或換覆蓋度都可能落在訓練分布之外。 從 GHIR 分布,變成一個比例數字 下面五個樣本是用純腫瘤與正常 BAM 依 read 數混出來的,所以已知的標籤是分子的比例 f DNA 比例 0.2 0.5 1.0 DNA 比例 0.4 0.5 1.0 DNA 比例 0.6 0.5 1.0 DNA 比例 0.8 0.5 1.0 DNA 比例 1.0 0.5 1.0 橫軸是 GHIR(0.5~1.0),縱軸是有多少個位點落在該區間。 比例越高,整個分布越往右。 每個分布只取兩個數字當特徵 中位數 四分位距(盒子的寬度) 中位數說「整體偏到哪」,四分位距說「有多分散」。 二次多項式迴歸 f = g( median, IQR ) 兩個特徵進去, 一個 DNA 比例出來。 ↑ f GHIR 特徵 → 模型怎麼訓練、能信到哪裡 七個資料集訓練、一個資料集測試,並以 leave-k-out 交叉驗證;報告的平均 R² 約 0.96。 但曲線只在訓練資料涵蓋的範圍內可信:換癌別、換 basecaller、換覆蓋度都可能落在分布之外。 而且輸出的是 f:模型裡沒有倍體,換不成細胞比例 p
五個比例已知的合成樣本各有一個 GHIR 分布; 比例越高整個分布越往右。每個分布只取中位數(偏到哪)與四分位距(多分散)兩個特徵, 送進二次多項式迴歸得到一個估計值。 最上方標出訓練標籤的來源:五個樣本是把純腫瘤與正常的 BAM 依 read 數混出來的, 所以已知的那個數字是分子的比例。最下方是訓練方式與外推的界線。
模型補充:為何迴歸只用兩個特徵

要學的是一條單調的關係,不是分類問題; 特徵少也讓模型不容易在八個資料集上過擬合。 代價是這條曲線只在訓練資料涵蓋的範圍內可信 —— 這也是後面「判讀練習」要處理的問題。

這個迴歸估的是哪一個量

上圖那五個「已知比例」的樣本,是把純腫瘤細胞株的 BAM 與正常樣本的 BAM 依 read 數混合出來的。所以標籤 0.2 的意思是「這堆 read 裡有兩成來自腫瘤細胞株」—— 它控制的是分子的比例,也就是 ,一般記作 f

迴歸學到的是「GHIR 的中位數與四分位距 → 這個標籤」。 既然標籤是 f,學到的曲線輸出的當然也是 f。 要把它轉成 p,需要腫瘤的 κ

f=p·κp·κ+2·(1p),p=2fκ(1f)+2f

κ=2 時兩者相等。這也是為什麼在二倍體的討論裡混用兩個詞不會出事, 而在腫瘤上會。

而 LongPhase-S 的模型裡沒有 κ 它不做拷貝數分段、不估等位特異拷貝數、也沒有任何一個參數代表倍體 —— 整個模型就是兩個特徵與一條多項式。缺了 κ,上面那條換算式跑不動, 所以它在原理上就不可能輸出 p。這不是實作偷懶,是模型形式決定的。

具體差多少?以研究實際用到的細胞株為例,腫瘤細胞株多半不是二倍體:

來源細胞株的 κ2.0(二倍體)3.24.0
混合標籤 f=0.20 對應的 p0.2000.1350.111
混合標籤 f=0.60 對應的 p0.6000.4840.429

低比例那一端差得最兇:標籤寫 0.2,實際的細胞比例可能只有 0.11。 如果把輸出當成細胞比例拿去跟病理判讀的腫瘤細胞百分比對照, 會得到一個看起來像是「工具高估了」的結論 —— 而那其實是兩邊在講不同的量

四個 somatic variant filter

比例估好之後進入第三階段。四個過濾器各看一種證據,任何一個沒過就丟掉

purity 感知的四個重校準過濾器 四個過濾器各看一種證據。 第一個 TINC 過濾器看這個位點在 normal 樣本裡的變異頻率:真 somatic 幾乎是零, 偏高的多半是 germline 變異,門檻隨 purity 調整。 第二個 read 一致性過濾器看每條支持 read 兩側的 germline allele: 若一條 read 同時帶有 HP1 與 HP2 的 allele,就是混合 read,混合比例太高就丟掉。 第三個 haplotype 背景過濾器統計支持 read 分別來自哪一條 germline haplotype: 真變異集中在其中一邊,兩邊都超過門檻就丟掉。 第四個變異叢集過濾器看密集區間內的變異是否共同出現在同一批 read 上, 需要同時滿足低變異頻率、低支持數、區間內變異數足夠多與統計異常四個條件才丟掉。 四個過濾器的門檻都不是固定值,而是在每個 purity 級距上各自搜出一組。 四個過濾器,各看一種證據 共同點:都在問「支持這個候選的 read,來源夠不夠一致」。任何一個沒過就丟掉。 ① TINC 過濾器 看這個位點在 normal 樣本裡的 VAF 0 0.25 0.5 門檻(隨 purity 動) 真 somatic:normal 幾乎沒有 偏高的多半是 germline normal VAF 低於門檻 → 留下 ② read 一致性過濾器 看支持 read 兩側的 germline allele 真變異:每條 read 只帶一邊的 allele T C T C T C Rmix ≈ 0 假訊號:同一條 read 兩邊的 allele 都有 T G T G T G Rmix 很高 混合 read 的比例低於門檻 → 留下 ③ haplotype 背景過濾器 支持 read 分別來自哪一條 germline haplotype 來自 HP1 的支持數 → ↑ 來自 HP2 真變異貼在軸上: 只有一邊有支持 假訊號落在中間: 兩邊都有支持 兩邊都超過門檻 → 丟掉 ④ 變異叢集過濾器 看密集區間內的變異是否擠在同一批 read 上 同一個密集區間(預設 100 bp 內) 同一批 read 上 同時帶好幾個 真變異散在 不同 read 上 四個條件同時成立才丟:VAF 低、支持數少、 區間內變異夠多、共現統計異常 四個門檻都不是固定值。 每個 purity 級距各自搜一組:先全域隨機取樣找大概位置,再用網格搜尋在附近細調。
四個過濾器與各自的判準。四個都在問同一個問題的不同面向: 支持這個候選的 read,來源夠不夠一致。最下方是門檻的來源 —— 不是公式算出來的, 是在每個比例級距上分別搜出來的。
Filter看什麼怎麼判斷
TINC該位點在 normal 樣本的 真 somatic 在 normal 幾乎為 0;偏高的多半是 germline。低於門檻才留
Read consistency每條支持 read 兩側的 germline allele一條 read 同時帶 HP1 與 HP2 的 allele 就是「混合 read」;混合比例低於門檻才留
Haplotagging background支持 read 分別來自哪一條 haplotype真變異集中在其中一邊;兩邊都超過門檻就丟掉
Variant cluster密集區間(預設 100 bp)內的變異是否擠在同一批 read 上要 VAF 低、支持數少、區間內變異夠多、共現統計異常四項同時成立才丟掉

門檻怎麼來的?不是公式算出來的,是搜出來的。 每個比例級距各做一次獨立的參數最佳化:先在合理範圍內隨機取樣做全域搜尋, 再對表現最好的區域做網格細搜。所以「purity 感知」的具體意思是 「查表拿出這個比例對應的那組門檻」,而不是把它代進某個公式。

HP3 怎麼補上來源

第四階段重建時,沒有 germline 錨點的 read 仍然只能先標成 HP3。 補救的方式是去看其他也帶同一個 somatic allele 的 read屬於哪個背景 —— 但規則很嚴格:只有在那些 read 全部指向同一個背景時才繼承

HP3 的繼承規則:只有在其他 read 一致時才補上來源 一條 read 帶有 somatic allele,但沒有覆蓋到任何 germline 變異,所以初步只能標成 HP3。 補救方式是去看其他也帶同一個 somatic allele 的 read 各自屬於哪一個 somatic haplotype 背景。 三種結果:若那些 read 全部一致指向同一個背景,這條 HP3 就繼承該背景; 若那些 read 有的指向 HP1-1、有的指向 HP2-1,證據互相衝突,保留為 HP3; 若其他 read 也全都是 HP3,沒有可繼承的來源,同樣保留為 HP3。 論文的 read 層級評估顯示 HP1-1 與 HP2-1 的 F1 常在 0.98 以上,而 HP3 明顯較低, 且低的原因主要是 recall 而不是 precision, 表示這個機制寧可不指派,也不亂猜一個來源。 HP3 怎麼補上來源:只有在其他 read 一致時才繼承 HP3 的問題不是「它屬於第三條染色體」,而是「這條 read 上沒有 germline 錨點可以比對」。 一條 HP3 read 帶 somatic allele, 但沒有 germline allele 去看其他帶同一個 somatic allele 的 read 它們各自屬於哪一個 somatic haplotype 背景? ① 全部一致 HP1-1 HP1-1 HP1-1 繼承成 HP1-1 所有 read 都指向同一邊 ② 互相衝突 HP1-1 HP2-1 HP1-1 不繼承,留 HP3 證據互相打架 ③ 沒有來源可繼承 HP3 HP3 HP3 不繼承,留 HP3 其他 read 也都沒有錨點 這個保守規則的代價,看評估數字就知道 HP1-1/HP2-1 的 read 層級 F1 多在 0.98 以上;HP3 明顯較低(例如 0.75 對 0.93)。 但三類的 precision 都很高(≥0.98)—— 掉的是 recall。 意思是:它寧可不指派,也不亂猜一個來源。這是刻意的取捨,不是 bug。 代價是低 purity 時 HP3 更多,可用的 somatic haplotype 資訊也更少。
三種結果:全部一致才繼承;證據互相衝突、或其他 read 也都沒有錨點,就保留為 HP3。 最下方是這個保守規則的代價 —— HP3 的 recall 明顯較低,但 precision 仍高, 表示它寧可不指派也不亂猜。

真實證據

實際指令

# 僅估計腫瘤 DNA 比例(子指令名稱是 estimate_purity)
longphase-s estimate_purity \
  -s phased_normal_snp.vcf \
  -b normal.bam \
  --tumor-snv-file tumor_snv.vcf \
  --tumor-bam-file tumor.bam \
  -r reference.fasta \
  -t 8 \
  -o output_prefix

# somatic haplotagging(依版本可自動估計或用 --tumor-purity 指定)
longphase-s somatic_haplotag \
  -s phased_germline_snp.vcf \
  -b normal.bam \
  --tumor-snv-file tumor_snv_indel.vcf \
  --tumor-bam-file tumor.bam \
  -r reference.fasta \
  -t 8 \
  -o tagged_prefix \
  --output-somatic-vcf

輸出檔案位置

東西位置
somatic haplotype 標籤BAM 的 HP:Z:1-1 / 2-1 / 3字串型別)
腫瘤 DNA 比例(欄位名為 Tumor purity<prefix>_purity.out 文字檔
過濾後的 somatic VCF<prefix>_sc.vcf(需加 --output-somatic-vcf
haplotagging 效能<prefix>_somatic_haplotag.metrics(需給 --truth-vcf

三項常見注意事項

  • 估計值不會印到 stdout。請讀取 _purity.out,尋找 Tumor purity: 0.169599 這一行 —— 欄位名寫的是 purity,讀到的是 f
  • --tumor-bam-file,不是 --tumor-bam 同理是 --tumor-snv-file
  • --tumor-purity 的合法範圍是 0.1–1.0(不是 0–1)。 給了這個參數就會關閉自動估計 —— 而你要給的是 DNA 比例,不是病理報告上的腫瘤細胞百分比。

輸出結果示例

以下是 LongPhase-S 在真實資料上的 IGV 截圖,可作為流程完成後的檢視示例:

IGV 截圖:HCC1395 的 chr4:106254211 位點,上方 tumor alignment、下方 normal alignment,帶有 somatic variant 的 reads 被標記為 HP1-1
HCC1395_HKU 的實際案例。下半部 normal:左右兩個 germline variant 將 read 分成兩條 haplotype。上半部 tumor:中間出現一個 somatic variant;帶有它的 read 兩側都沒有 HP2 的 germline allele,與從 HP1 分支形成的解釋相容,在此案例中被標成 HP1-1

圖中 somatic 變異兩側缺少 HP2 的 germline allele,支持其來源為 HP1; 仍應結合 read、base 與 mapping quality,以及其他 filter 結果,不能僅憑視覺判定。

IGV 截圖:HCC1395 chr2:126767867,位於 LOH 區域內的 somatic haplotagging 結果
同一份資料的另一個位點,位於 LOH 區域內。此處可用的 germline 錨點較少,是 LOH 情境下需要處理的判讀困難。

比例估計的結果

腫瘤 DNA 比例的估計結果:虛線為理想值,紅線為 ASCAT,藍線為 LongPhase-S
腫瘤 DNA 比例的估計結果。虛線是理想值、紅線是 ASCAT、藍線是 LongPhase-S(不同 marker 對應不同的 somatic variant caller 作為輸入)。橫軸是合成樣本的混合比例,也就是 DNA 比例 f;ASCAT 輸出的 (p, κ) 已先換算到同一個尺度。在此資料中,低比例區段的差距較明顯。

結果摘要

研究在八個資料集、六個癌症細胞株上評估,並用合成混合樣本製造已知的 腫瘤 DNA 比例梯度。把 recall 與 precision 分開看,才看得出這個方法實際上做了什麼:

面向報告的結果
DNA 比例估計在低比例區段明顯優於 ASCAT(ASCAT 在多個資料集把 0.2 預測成 1.0);leave-k-out 交叉驗證平均 R2 約 0.96。比較是在 f 的尺度上做的:ASCAT 輸出 (p,κ),先經換算式才進入這張表
接在 ClairS 之後(SNV)recall 平均 +4.5%(最多 +14.4%),precision 平均 −1.3%,淨效果 F1 平均 +1.9%(8 個資料集中 6 個變好)
接在 ClairS 之後(indel)recall 平均 +14.7%,precision 平均 −11.9%,F1 平均 +7.1%(8 個中 7 個變好)
接在 DeepSomatic 之後方向相反:主要是 precision 上升(SNV 平均 +3.1%),recall 略降,F1 只有小幅變化(+1.2% / +0.5%)
somatic haplotaggingHP1-1HP2-1 的 read 層級 F1 在 8 個資料集中有 6 個 0.98HP3 明顯較低

兩件事值得停下來看。

第一,同一個工具接在不同 caller 後面,改善的方向不一樣。 接 ClairS 主要補 recall(把原本被濾掉的真變異救回來),接 DeepSomatic 主要補 precision(把假的濾掉)。 這代表改善量取決於前一級 caller 原本偏保守還是偏寬鬆,不是一個固定的「加成」。

第二,recall 漲很多不等於 F1 漲很多。indel 那一列 recall +14.7% 但 precision −11.9%, 淨值只有 +7.1%;而 COLO829_ONT 甚至因為 precision 掉太多(0.82 → 0.49)讓 F1 略降。 看到「提升」兩個字時,要先問是哪一個指標提升。

HP3 的限制在上一節已經量化過:低的是 recall 而不是 precision。 報告結果時應同時說明這一點,不要只說「haplotagging 準確」。

這些數字的成立條件

全部來自細胞株與合成混合樣本。合成樣本提供了已知的DNA 比例(這是真實檢體給不了的), 代價是它不會有真實腫瘤的纖維組織混雜、空間異質性與更複雜的次族群結構。

這裡要補一句原始素材沒明說的假設:「混出比例 0.2 的樣本」預設來源腫瘤是 100% 純的。 細胞株確實接近如此,所以真值可信 —— 但那個真值是 f, 換算成細胞比例還需要細胞株自己的倍體。

研究本身也把這點列為限制,並指出 subclonal 的 CNV、LOH 與 aneuploidy 可能造成部分模仿比例效果的等位失衡。

判讀練習

執行 estimate_purity 後得到 0.95,但外部資料估計這個檢體只有大約 40% 的腫瘤細胞。

可能出了什麼問題?

展開答案

第 0 步:先確認兩邊在講同一個量。 「40% 的腫瘤細胞」是細胞比例 pestimate_purity 給的是 DNA 比例 f。 兩者本來就不該相等。但這一項算不完這筆帳,值得算一次看看

假設腫瘤倍體 κ2.03.04.0要湊到 0.95 得多少
p=0.40 所對應的 f0.4000.5000.571κ57

四倍體只能把 0.40 拉到 0.57,要拉到 0.95 需要生物學上不存在的倍體。 所以單位不一致解釋得了其中一部分,解釋不了全部 —— 剩下的落差另有成因。 這一步的價值在於:先扣掉它,才知道真正要追的落差有多大(是 0.55 還是 0.38)。

扣掉之後,依可能性排序:

  1. 大範圍的 。GHIR 量的是 haplotype 失衡, 而 LOH 與 aneuploidy 造成的失衡跟腫瘤佔多少無關 —— 若沒被 LCVF 濾掉,就會被誤讀成高比例。 值得注意的是:研究實際觀察到的結果沒有出現這個問題, 即使資料集中有帶染色體規模 LOH 的細胞株(例如 HCC1395),估計仍未受影響; 論文推測原因是這個估計本身是 phase-aware 的,而以等位比例或拷貝數為基礎的方法更容易被這類事件帶偏。 所以這一項要當成「先檢查 LCVF 有沒有正常工作」,而不是預設它一定出錯。
  2. 輸入的 normal VCF 沒有正確 phase。GHIR 依賴 HP1/HP2 的分群; 若 phasing 錯誤,比例便失去解釋力。先檢查 phased VCF 裡的 PS 是否合理。
  3. 。如果 normal 樣本含有腫瘤 DNA 污染,germline 基準線可能發生偏移。
  4. 模型外推。迴歸是在六個細胞株的合成樣本上訓練的。 如果你的樣本在某個維度上不像那批訓練資料(不同癌別、不同 、不同 coverage), 預測可能不可靠。

建議的排查順序是:先把外部的細胞比例換算成 f(第 0 步), 再以 IGV 檢視多個區域的 phasing 品質, 最後查看 _purity.out 的 filter 統計,確認 LCVF 濾掉的位點比例。 若濾除比例異常低,第 1 項的可能性較高。

實作練習

執行完整流程

# 前置:normal 的 germline VCF 要先 phase 好
longphase-s phase \
  -s normal_snp.vcf -b normal.bam -r reference.fasta \
  -t 8 -o phased_normal --ont

# 主流程:估 DNA 比例 + 過濾 + somatic haplotagging
longphase-s somatic_haplotag \
  -s phased_normal.vcf \
  -b normal.bam \
  --tumor-snv-file tumor_snv.vcf \
  --tumor-bam-file tumor.bam \
  -r reference.fasta \
  -t 8 \
  -o tagged \
  --output-somatic-vcf \
  --somatic-calling-log

逐項檢視輸出

# 腫瘤 DNA 比例(不會印到 stdout,請讀取輸出檔案)
grep -A2 'Estimation result' tagged_purity.out

# 每條 read 被分到哪個 somatic haplotype
samtools view tagged.bam | grep -o 'HP:Z:[0-9-]*' | sort | uniq -c

# 過濾後的 somatic 變異(PASS 與 LowQual)
awk '!/^#/ {print $7}' tagged_sc.vcf | sort | uniq -c

三項常見注意事項

細節正確做法
找不到比例結果不印到 stdout,在 <prefix>_purity.out
參數名稱--tumor-bam-file--tumor-snv-file,不是 --tumor-bam
手動指定比例--tumor-purity 的合法範圍是 0.1–1.0(不是 0–1);給了就關閉自動估計

使用 IGV 驗證輸出

載入 tagged.bam,依 HP tag 分組,檢視一個 somatic 變異。 可檢查帶有 somatic 變異的 read 是否集中於某一條 haplotype, 以及兩側的 germline allele 是否一致。

若帶變異的 read 兩側 germline allele 混合, 該位點的偽陽性疑慮會增加;仍需結合四個過濾器與其他品質指標判斷。

學習檢核

原始文獻與程式碼

本章的方法對應 LongPhase-S 的預印本 (bioRxiv, 2025,doi 10.1101/2025.11.20.689492),程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-s。 上面的階段名稱與參數判準以原始碼為準;文件與論文用字若有出入,請以 longopts 表為準。

本模組術語

Clair3
以深度學習做 germline variant calling 的工具,長 read 上常用。
ClairS
配對 tumor–normal 的 somatic variant caller。tumor-only 版本叫 ClairS-TO。
GHIR(生殖系單倍型失衡比)
Germline Haplotype Imbalance Ratio:在候選 somatic 位點上,取標為 HP1 與 HP2 的 read 數中較大者除以兩者之和,值域為 0.5 至 1。須注意兩件事:分母只含這兩個 germline 計數,HP1-1/HP2-1/HP3 皆不在內;且這些標籤是整條 read 的判定(該 read 任一處帶 somatic 等位即離開 germline 計數),並非該位點的等位計數。它不是直接的 purity 讀數:拷貝數變異、LOH、read 跨距內的突變密度、標記錯誤與抽樣不足都會使它偏移。
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
LongPhase-S
配對 tumor–normal 版本。做腫瘤 DNA 比例估計(輸出欄位名為 purity)、比例感知的 somatic variant 過濾,以及 somatic haplotagging。
TINC(腫瘤污染正常樣本)
Tumour-in-normal contamination:配對正常樣本含有腫瘤來源訊號,使 genuine somatic 變異也可能在 normal 中被觀察到,因而可能被錯誤過濾。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
basecalling(鹼基判讀)
把定序儀的原始訊號(ONT 是電流)轉成 A/C/G/T 字母的步驟。不同 basecaller 版本會產生不同的錯誤特性 —— 所以「同一個細胞株、不同 basecaller」是兩份不同的資料集。
copy number(拷貝數)
某段基因體在細胞內的拷貝數。多數正常常染色體區段為 2,可再分為 major 與 minor allele copy number。
phasing(定相)
為可判定的 variants 建立其位於不同實體染色體拷貝上的相位關係;VCF 常以 0|1 等形式表示。長 read 可提供跨位點的分子層級觀測證據。
ploidy(倍性)
細胞內染色體套數。多數正常常染色體為 2(diploid);腫瘤可呈現 3、4 或其他非整倍體狀態。
recall(召回率)
在指定評估範圍內,所有真陽性中被找出的比例:TP / (TP + FN)。若只對固定的 caller 候選集做後處理,recall 只能維持或下降,不能恢復 caller 從未輸出的真陽性;報告時應說清楚這個候選集範圍。
somatic haplotagging
把帶有 somatic 突變的 read 指派到它們源自的 germline haplotype。這是 LongPhase-S 的核心產出。
tumour DNA fraction(腫瘤 DNA 比例)
樣本 DNA 中源自腫瘤的比例。與 tumor purity(細胞比例)在 aneuploid 或 WGD 的情況下會不一樣。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。