長讀癌症基因體學 · 入門教材

完整手冊(列印版)· 中正大學資工系黃耀廷實驗室

本頁串接所有模組,可使用瀏覽器的列印功能另存為 PDF。紙本版本會將互動元件改為靜態說明。

模組 0 · Orientation

研究主題與學習路徑

從細胞、染色體與 DNA 建立定序資料的基本模型,再說明與治療決策相關的分子關聯問題。

約 20 分鐘

本模組學習目標

  • 說明細胞、染色體、DNA、基因、突變與 read 之間的關係
  • 解釋定序如何將 DNA 轉換為可計算分析的資料
  • 區分「辨識突變」與「推定突變間的分子連結」兩類問題
  • 說明三項工具的依賴關係與後續學習路線

先建立最小的生物模型

本模組先從基本概念開始,暫不引入癌症、EGFR 或其他縮寫。理解下列五個層次的關係後, 即可建立後續模組所需的資料模型:

從細胞、染色體與 DNA 到定序 reads 五個由左到右的層次。第一格是一個有細胞核的細胞。第二格把細胞核放大,顯示兩份相似的染色體。 第三格把一條染色體展開成由 A、C、G、T 組成的長 DNA,並框出其中一段基因。 第四格是定序儀,把抽出的 DNA 片段逐段量測。第五格是電腦收到的多條 read, 每一條 read 通常是源自一條實體 DNA 分子的局部序列觀測。圖下方標示左側屬於人體裡的物理世界, 右側是量測後的資料世界。 一層一層放大:人體裡的 DNA,如何變成電腦裡的 reads? 1 細胞 一管檢體裡 有很多細胞 DNA 主要收在細胞核中 檢體也可能含細胞外 DNA 放大 2 染色體 多數常染色體有兩份 一份通常來自父親 一份通常來自母親 兩份相似,但不完全相同 展開 3 DNA 與基因 A C G T A T G C A T 基因 DNA 長字串中 具有功能的一段 染色體 = 一條很長的 DNA 量測 4 定序 逐段讀取 DNA 轉成 A/C/G/T 這一步把實體分子 變成電腦資料 輸出 5 reads 每條橫線是一段 局部 DNA 觀測 電腦拿到很多片段 不是一條完整染色體 人體裡的物理世界:細胞 → 染色體 → DNA 分子 量測後的資料世界:定序 → reads 分析流程將 reads 比對至參考 DNA,再由 variant-calling 產生候選變異清單。
左側示意人體內的生物結構:細胞核內含染色體;在本教材的簡化模型中,每條染色體可視為一條長 DNA 分子,基因則是 DNA 上具有特定功能的區段。定序對 DNA 分子進行片段化量測,輸出 A/C/G/T 字串,也就是 reads。

人體細胞核內含有染色體。在本教材的簡化模型中,每條染色體可視為一條長 DNA 分子; DNA 以 A、C、G、T 四種鹼基記錄序列資訊。多數正常常染色體具有父源與母源兩份拷貝; 性染色體與腫瘤拷貝數異常將於後續模組另行說明。

基因不是另一種物質,而是 DNA 序列中具有特定功能的區段;可將其類比為程式系統中的模組。 當其中某個位置相對參考序列發生差異,稱為變異;「突變」則常用於描述新取得的變化。 部分變異可能影響蛋白質功能或治療反應,仍需依變異與情境判定。

「定序」到底做了什麼

我們無法把一整條染色體直接貼進文字編輯器。實際流程是:

  1. 從檢體取出大量 DNA 分子。
  2. 定序儀逐段量測 DNA,把每一段轉成 A/C/G/T 字串。
  3. 每一段序列觀測稱為一條 read;依平台與定序深度,一個樣本可產生大量且部分重疊的 reads。
  4. 電腦把 reads 對回人類參考序列,找出不同的字母位置。
參考序列:... A C G T T A C G ...
某條 read:... A C A T T A C G ...
                     ↑
                 這裡有一筆差異

所以定序資料不是「病人的完整基因組序列」,而是很多條來自不同實體 DNA 分子的局部觀測。 分析流程先將它們比對至參考序列,再由 variant-calling 步驟產生候選變異清單。

與治療決策相關的示例

EGFR 是一個編碼細胞生長訊號相關蛋白質的基因。 部分帶有活化 EGFR 變異的肺癌可受益於特定 EGFR 抑制劑;另一些變異則可能降低特定藥物的抑制效果。 實際治療判定仍需依藥物、變異與臨床情境評估。

一位非小細胞肺癌病人在治療後,檢測報告同時找到 EGFR 上的 T790MC797S。這兩個名字只是「EGFR 的哪個位置、變成什麼」的標籤; 現在不用記。重要的是:報告只告訴我們兩個突變都存在,卻沒有回答它們是否在同一份 EGFR DNA 上。

報告已知:detected("T790M") = true
          detected("C797S") = true

還不知道:same_DNA_molecule("T790M", "C797S") = ?

下面每一條橫線是一條 read。實心點表示該 read 帶有那個突變, 空心點表示該位置與參考序列相同。先只根據圖上的分子證據作答:

互動元件(列印版保留說明;數位版可操作)
兩個突變是一起出現在同一份 DNA 上,分開在兩份 DNA 上,還是目前的觀測其實不足?
read 顯示的排列分子層次發生什麼研究中的治療意義
分開在兩份 DNA 上 兩個抗藥改變位在不同的 EGFR 分子上 在特定研究模型中,第一代與第三代 EGFR 藥物的組合可能分別抑制兩份分子
一起在同一份 DNA 上 兩個抗藥改變疊在同一個 EGFR 分子上 在該研究模型中,同樣的藥物組合未能有效抑制此排列

這個案例來自 Niederst 等人的原始研究;後續也有 依排列方式選藥的臨床案例。 這裡用它說明「分子關係會改變決策」,不是提供個別病人的治療建議。

研究主題摘要

本課程介紹如何以計算方法,從定序 reads 推定哪些 DNA 變異位於同一實體分子, 並在腫瘤混合與定序誤差下評估此關係的可信度。

同樣找到兩個突變,read 圖可能給三種答案

前面的 EGFR 報告只說「T790M 有、C797S 也有」。要知道兩者的排列, 需回到產生這張清單的原始 reads。在本簡化情境中,可能的判讀可分為下面三種:

同樣找到突變 A 與 B 時,read 圖可能給出的三種答案 三個並排的 read 圖。在讀取品質足夠且無明顯嵌合的簡化前提下,左圖中多條跨越兩個位置的 reads 同時帶有 A 與 B,支持兩者位在同一份 DNA。 中圖中,跨越兩個位置的 reads 穩定分成只帶 A 與只帶 B 兩群,支持兩者分開在兩份 DNA。 右圖中,reads 太短,只能各自看到 A 或 B,沒有任何一條 read 能同時觀察兩點,所以資訊不足。 先問「read 看不看得到兩點」,再問「兩個點如何組合」 ① 支持同一份 DNA 突變 A 突變 B A 與 B 一起出現 多條獨立 read 都看到相同組合 結論:同一份 ② 支持分開在兩份 突變 A 突變 B A-only 與 B-only 每條 read 都跨兩點,組合卻分開 結論:分開 ③ 資訊不足 突變 A 突變 B 沒有 read 同時看見兩點 「沒看見一起」不等於「證明分開」 結論:不知道 共同前提:同一條 read 需在品質足夠時同時觀察 A 與 B,才可支持對兩者關係的判斷。
左:在讀取品質足夠時,多條 read 同時帶 A 與 B,支持兩個突變在同一份 DNA。中:跨越兩點的 reads 穩定分成 A-only 與 B-only,支持分開在兩份 DNA。右:reads 太短,沒有一條能同時觀察兩點,因此只能回答「不知道」,不能誤判成分開。

判讀順序先看範圍,再看實心點。如果同一條 read 根本沒有機會同時看見兩個位置, 目前只能判定資訊不足;只有在 read 確實跨過兩點且品質足夠時,點的組合才可支持「同一份」或「分開」的解釋。

長 read 通常可增加同一次觀測涵蓋的距離,但實際可連結範圍仍取決於讀長分布、覆蓋度與品質。 上面的 EGFR 兩點很近,短片段也可能回答;實際分析也可能處理相距數千至數萬 bp 的變異。 定序技術之間的長度與準確度取捨,留到定序單元完整比較。

兩位點問題如何延伸為三種分析情境

前述圖示只包含兩個突變,且假設 reads 品質良好。真實研究處理相同類型的問題, 但資料會逐層變難:先擴大到整個基因體,再加入腫瘤混合,最後還可能拿不到同一病人的正常檢體。 三項工具分別處理這三個層級的分析條件。

同一個 read 關係問題如何對應三類分析工具 最上方是共同問題:從大量 reads 推定哪些突變位在同一條 DNA 分子上。 第一層 LongPhase 把兩位點的直覺擴大到一般樣本的全基因體資料。 進入腫瘤後,資料多了正常細胞混合、低比例突變與更多錯誤訊號,並依是否有同一病人的正常檢體分岔。 有正常檢體時使用 longphase-s 做直接對照;只有腫瘤檢體時使用 longphase-to,需整合更多間接證據。 同一個問題,資料情境不同就對應不同方法 共同研究問題 從 reads 恢復: 哪些突變位在同一條 DNA? 上一節的兩位點判讀,是此分析問題的最小示例。 從兩個位置擴大到全基因體 LongPhase 一般樣本 建立基礎能力 根據大量 reads 推定 分子關係與其可信度 進入腫瘤:多了混合、低比例訊號與更多假象 關鍵分岔:有沒有同一病人的正常檢體可以直接比較? 腫瘤 正常 longphase-s 有直接對照 同一病人的正常檢體可協助排除混淆 腫瘤 沒有正常 longphase-to 缺少直接對照 需整合更多間接訊號補足資訊
同一個研究問題逐層變難。LongPhase 先在一般樣本中,根據大量 reads 推定突變是否位在同一條 DNA 上。進入腫瘤後,longphase-s 可利用同一病人的正常檢體作直接對照;若只有腫瘤,longphase-to 需整合更多間接證據。

這三項工具共同說明如何將 read-level 判讀問題, 擴展為可處理人類基因體與腫瘤資料的分析方法。M11–M13 依相同層級排列: M11 是一般樣本,M12 加入腫瘤與正常對照,M13 再拿掉正常對照。

未觀察到證據,不等於證明不存在

現在換一組資料。每條 read 都太短,只能碰到一個位置:

read 1, 2, 3  → 只覆蓋左邊,看到 T790M
read 4, 5, 6  → 只覆蓋右邊,看到 C797S

沒有任何一條 read 同時看到兩個突變。你可以下結論說它們分開在兩份 DNA 上嗎?

展開答案

不可以,答案是資訊不足。

要回答 same_DNA_molecule(A, B),至少要有觀測範圍同時包含 A 與 B。 這批 read 從來沒有具備同時觀察兩者的能力,所以結果不是 false,而是 unknown

這個區分會一直出現:沒有支持證據可能代表關係不存在,也可能只是 read 太短、 數量太少或資料品質不夠。分析流程應將這些情況分開處理。

接下來的路線

此時不需先安裝軟體或另讀生物學教科書。請依序學習,各模組會在需要時引入新的概念與資料物件:

階段新增的問題
M1–M3 建立資料模型樣本、DNA、突變與定序片段到底是什麼?
M4–M5 讀懂輸入這些物件如何寫進 BAM/VCF,候選突變又怎麼被找出來?
M6–M10 做可信推理如何恢復分子關係,並處理腫瘤混合、甲基化與評估陷阱?
M11–M13 實作三項工具每個工具如何把前面的概念變成演算法、指令與輸出?
Capstone 獨立判讀面對一個真實位點,能不能說清楚證據、結論與不確定性?

本頁核心重點如下:

presence 不等於 relationship

知道突變 A 存在、突變 B 也存在,仍然不知道 A 與 B 是否來自同一條 DNA 分子。 後續單元將介紹如何以可檢驗的證據推定這個關係。

學習檢核


模組 1 · A simplified tumour-region model

腫瘤樣本的簡化區域模型

以簡化模型說明:bulk 定序通常無法保留 read 的細胞來源,但可以保留同一分子跨位點的連結。

約 30 分鐘建議先修:學習導覽

本模組學習目標

  • 解讀教學用簡化區段模型,並說明四群細胞與三個突變的關係
  • 說明標準 bulk 定序為何不保留 read 與來源細胞的對應關係
  • 在明確列出的簡化假設下,由細胞比例推算 VAF
  • 區分 read 提供的分子層級觀測與由多條 read 建立的細胞群推論
  • 說明 haplotype、germline variant、somatic variant、clone 與 subclone 在本模型中的基本角色

為什麼重要

本教材採用同一個簡化模型連結多項概念。本模組先完整建立細胞、DNA 分子與 read 的基本關係, 並在專有名詞首次出現時提供本頁所需的簡要定義。

本模型聚焦於一個核心問題:腫瘤檢體經過標準 bulk 定序後,資料保留了哪些資訊, 又不再包含哪些細胞層級資訊?

本模組的四項核心概念

  1. 同一份腫瘤檢體可以包含多個細胞群。
  2. 標準 bulk 定序混合多個細胞來源的 DNA,因此不保留 read 與來源細胞的對應。
  3. 一條 read 來自單一 DNA 分子的局部序列,而非一個完整細胞。
  4. 若同一條 read 的觀測範圍涵蓋兩個突變,兩者的共同出現可直接支持其位於同一條 DNA 分子。

本模組使用少量英文術語作為圖例與群組名稱。下方資料表會先提供足以解讀本模型的定義; 較完整的生物學與資料格式定義會在各自的主題模組中展開。

概念與互動

基本資料模型

概念本模組採用的定義
位點(locus)DNA 序列中的特定位置;S1、S2、S3 代表三個不同位置
染色體拷貝本簡化模型假設每個位置有兩份 DNA 拷貝,分別標示為 HP1 與 HP2
變異(variant)相對於參考序列的 DNA 序列差異
定序儀對單一 DNA 分子局部序列的觀測
在特定位點上,支持變異的 read 佔全部涵蓋該位點 read 的比例

教學用簡化區段模型

教學用簡化區段模型:腫瘤樣本中的四個細胞群 左側表示樣本中的四個細胞群:正常細胞、最早出現的腫瘤細胞群,以及兩個後續分支。 右側表示同一染色體區段的兩份 DNA 拷貝 HP1 與 HP2,以及依序出現的三個體細胞變異 S1、S2、S3。 本模型設定 S1 位於 HP1 且由所有腫瘤細胞群共享;S2 僅位於後續分支 1;S3 僅位於後續分支 2。 最下方表示標準 bulk 定序混合多個細胞來源的 DNA 後,各變異的預期 VAF。 樣本中的四個細胞群 正常細胞 50% HP1 / HP2 未帶有本模型設定的 S1/S2/S3 最早腫瘤細胞群 20% +S1 本模型設定所有腫瘤細胞群均帶有 S1 後續分支 1 20% +S1 +S2 在原有 S1 的基礎上新增 S2 後續分支 2 10% +S1 +S3 另一後續分支,新增 S3 各細胞群的 DNA 組成 S1 S2 S3 HP1 HP2 綠點:遺傳的序列差異,可區分兩份 DNA 拷貝 HP1 HP2 HP1 HP2 HP1 HP2 標準 bulk 定序混合多個細胞來源的 DNA 後,可直接觀測: S1 S2 S3 VAF 0.25 VAF 0.10 VAF 0.05 細胞比例 50% 細胞比例 20% 細胞比例 10% read 與來源細胞的對應 在標準 bulk 流程中 通常無法取得
左側呈現樣本中的四個細胞群,右側呈現各群對應的 DNA 組成;下方則表示標準 bulk 定序後可觀測的 VAF。橫線區隔細胞層級組成與定序後的分子層級資料。

圖中元素的意義如下:

圖中元素代表意義
灰色細胞正常細胞,佔 50%
紅/藍/橘色細胞三個腫瘤細胞群;最早形成者為 founder ,由其分出的後續細胞群為
藍色長條 HP1/橘色長條 HP2同一段染色體的兩份 DNA 拷貝;跨多個位置的一組序列差異構成
綠點由親代遺傳、存在於多數體細胞的 ;常見的單一核苷酸差異稱為 ,可協助區分 HP1 與 HP2
紅點 S1/S2/S3受精後新產生、僅存在於部分細胞譜系的

三個變異代表不同的細胞譜系階段

三個變異在細胞群中的分布反映其出現的先後與分支關係:

  • S1 先出現,因此紅、藍、橘三個腫瘤細胞群皆帶有 S1。
  • S2 出現於後續分支,僅存在於藍色細胞群。
  • S3 出現於另一後續分支,僅存在於橘色細胞群。
三個變異出現的先後順序,決定了哪些細胞群帶有它 左側是細胞分裂的譜系樹:正常細胞先獲得 S1,成為最早的腫瘤細胞群; 這一群之後分成兩支,一支再獲得 S2,另一支再獲得 S3。 右側把同一件事換成「哪些細胞群帶有這個變異」的橫條: S1 在分支之前就出現,所以三個腫瘤細胞群都有,合計佔樣本 50%; S2 與 S3 分別只在自己那一支裡,各佔 20% 與 10%。 因此變異在樣本中佔的比例不是隨機的,而是由它出現在譜系樹的哪個位置決定: 愈早出現的變異被愈多細胞群共享,看起來就愈常見。 變異出現的先後 正常細胞 S1 最早腫瘤細胞群 帶 S1 S2 S3 後續分支 1 帶 S1 + S2 後續分支 2 帶 S1 + S3 分支之前發生的變異,會被之後所有細胞群繼承。 哪些細胞群帶有它 0% 100% 的細胞 S1 = 50% 20% 20% 10% S2 = 20% 只有後續分支 1 S3 = 10% 只有後續分支 2 愈早出現的變異,被愈多細胞群共享。 所以「它佔多少比例」帶著「它多早出現」的訊息 —— 這正是後面要從 VAF 反推腫瘤內部結構的依據。
左邊是細胞分裂的順序,右邊是同一件事換成「佔多少細胞」的長度。S1 在分支之前出現,所以之後長出來的三群都繼承了它,加起來 50%;S2 與 S3 各自只在自己那一支裡。變異佔的比例不是隨機的,它帶著「這個變異在譜系樹上多早出現」的訊息。

本模型另設定 S1、S2、S3 均位於 HP1。在此簡化情境中,每個新增變異最初發生於其中一份 DNA 拷貝,因此可以進一步分析變異與 HP1 或 HP2 的分子連結。此處的 HP1/HP2 是方向任意的相對標籤, 不代表父系或母系。

由細胞比例推算 VAF

VAF 是支持特定變異的 read 比例。在本模型的假設下,可由細胞比例推算其預期值。 以 S1 為例:

  • 帶有 S1 的細胞比例 = 紅色群(20%)+ 藍色群(20%)+ 橘色群(10%)= 50%
  • 本模型假設每個細胞在此位置有兩份 DNA 拷貝,而 S1 僅位於其中一份(HP1)
  • 因此,支持 S1 的預期 read 比例為 50% × ½ = 25%
從細胞比例算到 VAF:那個「除以 2」是從哪裡來的 以 S1 為例,分成三步。第一步:帶有 S1 的細胞佔全樣本 50%, 由最早腫瘤細胞群 20%、分支 1 的 20%、分支 2 的 10% 相加而得。 第二步是關鍵:定序看到的不是細胞,而是 DNA 分子。 每個細胞在這個位置貢獻兩份拷貝 HP1 與 HP2,而 S1 只在 HP1 上, 所以就算是帶有 S1 的細胞,它交出來的兩份分子裡也只有一份帶 S1。 第三步:把分子數目當成分數的分子與分母 —— 100 個細胞交出 200 份分子, 其中帶 S1 的是 50 份,VAF 等於 50 除以 200,也就是 0.25。 因此 VAF 0.25 對應的是 50% 的細胞,不是 25% 的細胞; 兩者差的正是每個細胞有兩份拷貝這件事。 ① 先數細胞 帶有 S1 的細胞群 最早腫瘤 20% 分支 1 20% 分支 2 10% 合計 50% 的細胞帶有 S1 ② 但定序看到的是 DNA 分子,不是細胞 帶 S1 的細胞 (50% 的細胞) 交出 HP1 ← 這一份帶 S1 HP2 ← 這一份不帶 每個細胞兩份拷貝, 變異只在其中一份上。 所以帶有 S1 的細胞,也只有一半的 分子帶著 S1 —— 這就是那個「÷2」。 ③ 把分子數當成分數 假設樣本裡有 100 個細胞 → 交出 200 份 DNA 分子 其中帶 S1 的:50 個細胞 × 1 份 = 50 份 50 200 = 0.25 注意:VAF 0.25 對應的是 50% 的細胞,不是 25% 的細胞。
那個「÷2」不是慣例,它是單位換算:第一步數的是細胞,第三步數的是 DNA 分子,而每個細胞在這個位置交出兩份分子。中間那一格就是換算率。看懂這張圖之後,「VAF 0.25 代表 25% 的細胞」為什麼是錯的,就不必背了。

因此圖中標示 S1 的預期 VAF 為 0.25。依相同假設,S2 與 S3 的預期 VAF 分別為 0.10 與 0.05。

bulk 定序保留與未保留的資訊

read 內的分子連結

在標準 bulk 定序資料中,read 與來源細胞的對應關係不會被保留;輸出是一組來自多個細胞的 DNA 片段序列。因此,無法僅由這些資料直接辨識每條 read 原先所屬的細胞群。

然而,read 內仍保留分子層級的連結資訊。若某條 read 同時涵蓋兩個變異, 該觀測可直接支持兩個變異位於同一條 DNA 分子。

這項分子連結構成本教材後續分析方法的共同證據基礎:

本教材的核心推論問題

長 DNA 分子可以提供哪些 DNA 變異與分子狀態共同出現的證據?

後續模組將分別處理此問題所需的生物學定義、定序限制、資料格式與推論方法。

與 single-cell 定序比較

bulk 與 single-cell 定序所保留及未保留的資訊 左側表示 single-cell 定序:先分離並標記個別細胞,因此可保留 read 與來源細胞的對應, 並比較不同細胞的變異組合;其限制通常包括較高成本與較低的單細胞資料量。 右側表示標準 bulk 定序:多個細胞來源的 DNA 混合處理後,read 通常無法對應至來源細胞。 若 read 同時涵蓋兩個變異且判讀可靠,仍可直接支持兩者位於同一條 DNA 分子。 此 read 內的分子連結是本教材後續方法的共同證據基礎。 single-cell 定序 先分離並標記個別細胞 來自細胞 1 的 read 來自細胞 2 的 read 來自細胞 3 的 read 保留:read 的來源細胞標籤 可比較不同細胞的變異組合 限制 成本較高;每細胞資料量通常較少 標準 bulk 定序(本教材聚焦) 多個細胞來源的 DNA 混合處理 混合 DNA 通常無法取得:read 的來源細胞 未加入細胞標籤時,無法由 read 直接判定 保留:read 內的分子連結 同一 read 涵蓋兩個變異 → 支持兩者位於同一分子 本教材後續方法採用的共同證據基礎: bulk 不保留來源細胞對應,但可保留 read 內的分子連結。
左側:single-cell 定序先分離個別細胞,因此可保留 read 與來源細胞的對應,但通常面臨較高成本與較低的單細胞訊號量。右側:標準 bulk 定序不保留 read 的細胞來源;若 read 同時涵蓋兩個變異,仍可保留兩者位於同一 DNA 分子的連結證據。

single-cell 定序會先分離個別細胞再進行定序,因此可追溯 read 的細胞來源, 並直接比較不同細胞的變異組合。

相較之下,single-cell 定序通常需要在成本、細胞數與單細胞覆蓋度之間取捨。 本教材聚焦於 bulk 定序,因此細胞群結構屬於根據分子連結建立的推論模型,而非直接的細胞層級觀測。 後續分析均需維持此證據層級的區分。

判讀練習

假設某條 read 同時涵蓋 S1、S2、S3,並觀察到 S1 = ALT、S2 = ALT、S3 = REF。

依據本模組的簡化模型,哪一個細胞群與此變異組合相容?

展開答案

此組合與藍色細胞群(後續分支 1)相容,因為該群帶有 S1 與 S2,但不帶有 S3。

精確的表述為:此 DNA 分子的變異組合與藍色細胞群的模型相容。

直接觀測的對象是一條 DNA 分子,而非完整細胞群。若要支持特定細胞群的存在, 仍需多條獨立 read 呈現一致組合,並排除定序與比對錯誤。此結論屬於資料支持的模型推論, 而非直接的細胞層級觀測。

練習與自我檢核

VAF 計算練習

依據上圖的細胞比例與本模組的簡化假設,計算三個變異的預期 VAF:

變異帶有它的細胞比例÷2(因為只在一條染色體上)預期 VAF
S120 + 20 + 10 = 50%50% ÷ 20.25
S220%20% ÷ 20.10
S310%10% ÷ 20.05

VAF 推論的限制

若三個變異的 VAF 分別為 0.30、0.30、0.08,是否可以據此推論 「前兩個變異位於同一細胞群,且第三個變異較晚出現」?

不可以。VAF 是各位置獨立統計的 read 比例,不包含變異共同出現或發生順序的資訊。 因此,相同 VAF 不代表兩個變異位於同一條分子,較低 VAF 也不能單獨證明變異較晚出現。 可支持的結論僅為:「第三個變異的相對 read 支持較少;其細胞分布與發生順序仍需分子連結及其他證據判定。」

分析與報告時應明確區分三個層級:直接觀測、資料支持的模型推論,以及目前證據無法支持的結論。

學習檢核

本模組術語

SNP(單核苷酸多型性)
族群中以多型形式存在的單一鹼基差異;本教材主要以可作為 phasing 錨點的 germline SNP 為例。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
clone(克隆)
源自共同祖先細胞,並共享一組可辨識 somatic mutations 的細胞群。
germline variant(生殖系變異)
在生殖系形成、通常存在於多數細胞的變異;可遺傳給子代,但不代表必然傳遞。
haplotype(單倍型)
同一條實體染色體拷貝上,具有一致相位的一組 alleles 或 variants。HP1 與 HP2 是任意的相對標籤。
read
定序儀產生的一段序列觀測。一條 read 通常來自一個 DNA 分子的片段,但不等同於一個細胞;仍需考慮重複、嵌合與定序錯誤。
somatic variant(體細胞變異)
在非生殖系細胞譜系中、通常於受精後取得的變異;可只存在於部分細胞,通常不由親代遺傳給子代。癌症基因體學常分析此類變異。
subclone(次克隆)
clone 內取得額外變異並擴增的子群;治療後可能富集具有抗性的 subclone。

模組 2 · Essential biology for cancer genomics

癌症基因體分析的基礎生物學

區分 allele、variant、genotype 與 haplotype,並說明 germline、somatic、clone 與 subclone 的關係。

約 45 分鐘建議先修:簡化模型

本模組學習目標

  • 精確區分 locus、allele、variant、genotype、haplotype 這幾個常被混用的詞
  • 說明 germline 與 somatic 變異在來源、分布與可遺傳性上的差別
  • 解釋 heterozygous 位點如何提供 phasing 資訊,以及 homozygous 位點的限制
  • 說明 subclone 與治療反應之間的可能關係
  • 定義 SNV 與 LOH,並說明它們在腫瘤基因體分析中的角色

為什麼重要

M1 先以 HP1/HP2、founder clone 與 subclone 作為圖示標籤,以呈現整體資料流。 本模組將進一步區分這些標籤,並建立較精確的生物學資料模型。

這些術語形式相近,但所指的資料層級不同。常見混淆是將 variant 與 allele、 或 genotype 與 haplotype 混用,因而難以精確解讀文獻與資料格式。

自學閱讀時,可先將下列五個詞對應至資料結構的不同層級: 地址、該地址的一種值、與參考不同的事件、單一地址的兩份值、跨多個地址的一整串值。 先掌握概念層級,再對應英文術語。

概念與互動

五個容易混用的詞

指的是例子
一個位置chr1:162,404,043
該位置上其中一種序列這個 locus 可以是 AG,各是一個 allele
variant / variant 是相對參考序列的差異;SNV 是單一鹼基替換的 variant參考為 A、樣本為 G → 一個 SNV
該位置上兩份 allele 的組合0/1:一份跟參考一樣、一份不一樣
同一條染色體拷貝上具有一致相位的一組 allelesHP1 = A…C…G,HP2 = T…A…C

上表以正常二倍體常染色體為模型,因此同一個 locus 通常有兩份 allele。 這種具有兩份拷貝的狀態稱為 ;性染色體與腫瘤拷貝數異常將於後續模組另行處理。

locus、allele、genotype、haplotype 四個詞在同一張圖上的位置 同一段染色體上標出三個位置。 locus 指的是一個位置;allele 指的是該位置上可能出現的其中一種序列(SNV 情況可由單一鹼基表示); genotype 描述單一位置上兩份 allele 的組合; haplotype 則是跨越多個位置、同一條染色體上的一整串 allele。 最下方對比未定相與已定相的寫法:斜線只說「有哪兩份」, 豎線多說了「哪一份在哪一條染色體上」。 同一段染色體,兩份拷貝 第一條 A C G 第二條 T C A 位置 ① 位置 ② 位置 ③ locus 一個位置 上圖有三個 locus allele 該位置上的一種序列 位置① 有 A 與 T 兩種 A T genotype 單一位置上兩份的組合 位置① 是「一份 A、一份 T」 A / T haplotype 跨越多個位置的一整串 第一條是 A–C–G VCF 裡的兩種寫法 A / T 「有一份 A、一份 T」 但沒說哪一份在哪一條上(未定相) A | T 「第一條是 A、第二條是 T」 多說了位置歸屬(已定相)
同一段染色體上標出三個位置。注意 genotype 只描述單一位置(那一格上有哪兩份),而 haplotype 跨越多個位置(同一條染色體上的一整串)。最下面是兩種寫法的差別。

關鍵差別在最後兩個:genotype 是單一位置的,haplotype 是跨越多個位置的。 genotype 說「這裡有一份 A、一份 G」,但沒說 A 跟隔壁位置的 C 是不是在同一條染色體上。 補上這個資訊,正是 要推定的關係之一。

VCF 可用下列符號表示這項差異:

寫法意思
0/1(斜線)未定相。一份 ref、一份 alt,但不知道哪份在哪條上
0|1(豎線)已定相。第一條 haplotype 是 ref,第二條是 alt

phasing 會以 reads 或統計模型推定等位基因在不同染色體拷貝上的歸屬; VCF 可使用豎線表示已推定的相位結果。

heterozygous 位點提供主要 phasing 資訊

一個 locus 若兩份 allele 不同(,例如 0/1), 在讀取品質足夠的簡化模型中,可用來區分兩條 haplotype —— 看到 A 的 read 可歸到一條,看到 G 的可歸到另一條。

若兩份相同(),該位點本身通常不能區分兩條 haplotype。

het 位點密度是影響 phasing 的因素之一;讀長、coverage 與錯誤率也會影響可建立的相位範圍。

腫瘤中的 (loss of heterozygosity,異型合子性喪失)可能使一個區段失去其中一種 allele, 使原本可用的 heterozygous 位點減少,因而降低可用的 phasing 錨點。

因此,僅依這些錨點的 phasing 在 LOH 區段會更困難,可能需要其他證據或專門方法; 實際影響取決於 LOH 型態、coverage、purity 與演算法。

germline 與 somatic

germline variant 與 somatic variant 的來源差別 左半部:父方與母方的生殖細胞各帶有變異,受精後形成的胚胎通常在多數細胞裡都有這些變異, 並可能傳給下一代,這叫 germline variant。 右半部:個體長大過程中某個非生殖系細胞分裂時新產生的變異,可只存在於它的後代細胞裡, 通常不以遺傳方式傳遞,這叫 somatic variant。 Germline variant 與生俱來,來自父母 父方生殖細胞 母方生殖細胞 受精卵 通常存在於多數細胞 · 可能傳給子代 Somatic variant 後天產生,可限於部分細胞 正常細胞 分裂時出錯 新增 somatic 突變 持續增生 沒有突變 帶有突變的那一群 可限於部分細胞 · 通常不以遺傳方式傳遞
左:germline 變異通常存在於多數細胞,並可能傳給子代。右:somatic 變異在非生殖系細胞譜系中取得,可只存在於部分細胞,通常不以遺傳方式傳遞。腫瘤研究常特別關注 somatic 變異;germline 變異也可能影響風險、治療與 phasing。
來源生殖系;可能由親代遺傳或 de novo 形成非生殖系細胞譜系
分布通常存在於多數細胞(視嵌合而定)可限於部分細胞,也可能為 clonal
是否可傳給子代可能,但不代表必然傳遞通常不以遺傳方式傳遞
典型 在二倍體且無污染/CNV 時,het 常接近 0.5受 purity、copy number、multiplicity 與 clonality 影響
在本課程示例中的角色工具 —— 可作為 phasing 的錨點分析目標 —— 需依流程與證據判定

在特定 somatic calling 流程中,germline calls 常被排除;然而 heterozygous germline 也可作為建立 haplotype 骨架的錨點之一。錨點不足時,區分 HP1/HP2 及連結 somatic 變異會更困難。

clone 與 subclone

回到 M1 的簡化區段模型。一個細胞取得突變後增生,形成一群共享可辨識突變的細胞,稱為 。 其中某些細胞又取得新突變、再擴增,就形成

許多 somatic 變異可能是 passenger;可提高生長或存活優勢的候選變異稱為 , 其判定需依癌別與功能證據。

治療可能改變不同細胞群的相對比例,使具有抗藥優勢的 subclone 富集:

clone 與 subclone 如何形成,以及治療後抗藥群比例如何變化 上排由左至右是時間軸:一個正常細胞取得第一個突變後增生,形成帶有相同突變的一群細胞,這叫 clone。 其中部分細胞又取得新突變並各自擴增,形成兩個 subclone,其中一個帶有抗藥突變。 下排以簡化模型顯示治療的後果:藥物可優先減少沒有抗藥突變的細胞, 原本只佔一小部分的抗藥 subclone 可能因此成為主要群體,並伴隨腫瘤復發。 這說明為什麼只知道「有哪些突變」不夠,還要知道「這些突變分別在哪一群細胞裡」。 時間 ① 起點 一個正常細胞 ② 增生成 clone 全都帶著同一個突變 ③ 分支成 subclone subclone A subclone B 帶有抗藥突變 ④ 治療前的組成 75% subclone A(無抗藥性) 5% subclone B 治療之後發生什麼事 給藥 優先減少非抗藥細胞 subclone A 大幅減少 B 存活 B 開始擴增 模型中:B 比例上升 本模型中 B 約佔 95% 只知道「有哪些突變」不夠 治療前的報告會說:這顆腫瘤有 「第一個突變」與「抗藥突變」兩個。 但這樣寫看不出抗藥突變只在一小群細胞裡。 還要知道「分別在哪一群細胞裡」 如果知道抗藥突變獨立成一群、只佔 5%, 可提高治療後比例上升的預期,但並非必然。 這種細胞組成的不均勻叫 intratumour heterogeneity。
上排示意細胞取得變異、形成 clone,並再分支為兩個 subclones,其中一群帶有抗藥變異。下排是簡化治療模型:非抗藥群大幅減少後,抗藥 subclone 的相對比例由 5% 上升至 95%;真實反應仍取決於藥物、變異與腫瘤生態。

因此,除列出腫瘤中的變異外,也需評估這些變異可能分布於哪些細胞群。 這種細胞組成的不均勻,就叫

真實證據

評估方法時需有可供對照的高可信度參考標註。 truth set 通常由多種技術與證據建立,但仍可能包含不確定區域;benchmark 還包含評估範圍與程序。

以下列出六個具有參考標註的癌症細胞株作為示例:

細胞株癌別常用的 truth set
HCC1395乳癌SEQC2(示例參考集)
COLO829黑色素瘤NYGC
HCC1937乳癌Google(多工具交叉比對)
HCC1954乳癌Google
H1437肺癌Google
H2009肺癌Google

這些細胞株具有可用的配對正常樣本與參考標註,可提供區分 germline 與 somatic 的重要對照; 實際判定仍受 coverage、污染、變異類型與參考集品質影響。

HCC1395 將於後續示例中再次出現;可比較兩份資料: HCC1395_HKUHCC1395_NYGC同一個細胞株、不同的 與分析流程。 兩份資料的組成相似度(0.909)可作為跨流程一致性的觀察,但不能單獨證明方法穩健性。 因此, 應視為重要實驗變數,而非附註。

判讀練習

某個位點在腫瘤樣本裡的 VAF 是 0.50,在配對的正常樣本裡也是 0.50。

它比較可能是 germline 還是 somatic?

展開答案

在本題假設下,結果較支持 heterozygous germline。

若為二倍體、normal coverage 足夠,且無污染、拷貝數變化或嵌合, 腫瘤與正常樣本均接近 0.5 的 VAF 與 heterozygous germline 相容。

但有兩種例外要知道:

  • 正常樣本被腫瘤污染了。採檢時如果「正常」組織裡混進少量腫瘤細胞, 那麼腫瘤特有的變異在正常樣本裡也會出現訊號
    分辨時可檢查訊號強度:在二倍體且無其他偏差時,germline het 變異常接近一半的 read, 污染訊號常低於完整 germline 訊號,但實際數值仍取決於污染比例、copy number 與取樣。
  • 該位置的染色體份數不是兩份。如果某段染色體被複製或刪掉了 (這在腫瘤裡很常見), 那麼「一份有、一份沒有」的算法就不成立,VAF 自然偏離 0.5。

練習與自我檢核

三項概念檢核

可先自行回答,再核對下方解析:

  1. 「這個位置有一份 A、一份 G」—— 這句話講的是 genotype 還是 haplotype?
  2. 0|10/1 多告訴你什麼?
  3. 為什麼 heterozygous 位點通常比 homozygous 位點更能提供 phasing 資訊?

答案依序是:genotype(單一位置)/多告訴你「哪一份在哪一條染色體上」/ 因為兩份 allele 不同時,才提供區分兩條染色體的訊號;homozygous 位點通常無法單獨區分。

在實際資料中檢查

若已有一份 VCF,可使用下列指令檢查 genotype 分布:

# 各種 genotype 各有多少個
bcftools query -f '%POS\t[%GT]\n' sample.vcf | cut -f2 | sort | uniq -c | sort -rn

# 只留下 heterozygous 的位點(phasing 能用的錨點)
bcftools view -g het sample.vcf | grep -vc '^#'

het 位點密度會影響 phasing,亦需同時考慮讀長、coverage 與品質。 人類全基因體中的 het 位點通常為數百萬量級,但會因族群、參考基因組、callable region 與過濾條件而異;請以資料集統計為準。

學習檢核

本模組術語

LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
PS tag(phase set)
標示某群 variants 屬於同一 phase block 的編號。同一 PS 內的相位方向可相互比較;不同 PS 的 HP1/HP2 方向彼此獨立。
SNP(單核苷酸多型性)
族群中以多型形式存在的單一鹼基差異;本教材主要以可作為 phasing 錨點的 germline SNP 為例。
SNV(單核苷酸變異)
單一鹼基的改變。與 SNP 的差別在於 SNV 不預設它在族群中常見 —— 腫瘤裡新產生的單點突變叫 somatic SNV(sSNV),不叫 SNP。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
allele(等位基因)
同一個 locus 上可能出現的其中一種序列版本。在一般二倍體常染色體位點,個體通常有兩份 allele;性染色體、拷貝數變化與腫瘤基因體可能不符合這個簡化模型。
basecalling(鹼基判讀)
把定序儀的原始訊號(ONT 是電流)轉成 A/C/G/T 字母的步驟。不同 basecaller 版本會產生不同的錯誤特性 —— 所以「同一個細胞株、不同 basecaller」是兩份不同的資料集。
clone(克隆)
源自共同祖先細胞,並共享一組可辨識 somatic mutations 的細胞群。
diploid(二倍體)
正常人多數常染色體區段通常有兩份拷貝的狀態;性染色體、拷貝數變化與腫瘤細胞可能不同。
driver mutation(驅動突變)
可提升腫瘤細胞生長或存活優勢的候選變異;passenger mutation 通常不具有已知的選擇優勢。
genotype(基因型)
某個 locus 上觀察到的 allele 組合;對一般二倍體常染色體位點,通常是兩份 allele。VCF 裡寫成 0/1(未定相)或 0|1(已定相)。
germline variant(生殖系變異)
在生殖系形成、通常存在於多數細胞的變異;可遺傳給子代,但不代表必然傳遞。
haplotype(單倍型)
同一條實體染色體拷貝上,具有一致相位的一組 alleles 或 variants。HP1 與 HP2 是任意的相對標籤。
heterozygous(異型合子)
在一般二倍體位點上,兩份 allele 不同(例如一份 A、一份 G)。此類位點可作為區分 haplotype 的資訊錨點;複雜拷貝數情況需另行解讀。
homozygous(同型合子)
在一般二倍體位點上,兩份 allele 相同。此位點本身通常無法用來區分兩條 haplotype。
intratumour heterogeneity(腫瘤內異質性)
同一腫瘤內不同細胞可帶有不同突變組合,因而同時存在多種基因型。
locus(位點)
基因體上的一個特定位置。講「這個 locus」時通常指某個座標,例如 chr1:162,404,043
phasing(定相)
為可判定的 variants 建立其位於不同實體染色體拷貝上的相位關係;VCF 常以 0|1 等形式表示。長 read 可提供跨位點的分子層級觀測證據。
provenance(資料來源履歷)
記錄資料來源、細胞株、定序平台、basecaller、reference build、caller、benchmark 與混樣方式。在本實驗室中,這些資訊是重要實驗變數,而非附註。
somatic variant(體細胞變異)
在非生殖系細胞譜系中、通常於受精後取得的變異;可只存在於部分細胞,通常不由親代遺傳給子代。癌症基因體學常分析此類變異。
subclone(次克隆)
clone 內取得額外變異並擴增的子群;治療後可能富集具有抗性的 subclone。

模組 3 · Sequencing principles and the value of long reads

定序原理與長讀的分析價值

比較 Illumina 與 ONT 的讀取方式與錯誤特性,並介紹 homopolymer、coverage、VAF 與 5mC。

約 45 分鐘建議先修:生物學

本模組學習目標

  • 說明長讀在建立長距離分子連結上的優勢與限制
  • 描述 ONT 的常見錯誤特性,並比較 indel 與 SNV 的判讀難度
  • 說明 homopolymer 為何是 indel 假陽性的常見來源
  • 說出 coverage、VAF 與 basecaller 版本各自會如何影響下游結果
  • 辨識 CIGAR 所記錄的 alignment 操作,並說明低支持度過濾如何影響 recall

為什麼重要

M1 已建立以下觀察:若 read 同時涵蓋兩個變異位置,且判讀可靠, 可支持兩者位於同一 DNA 分子。本模組將此觀察連結至定序技術,說明讀長差異、長讀的分析優勢與相應限制。

自學閱讀時,可先比較短讀通常能辨識各位置的變異、但較難由單條 read 建立遠距分子關係, 以及長讀可涵蓋較遠位置的特性;再學習平台名稱與錯誤類型。

瞭解這些限制很重要;後續介紹的 somatic-indel 方法, 即聚焦於降低此類錯誤並改善候選判讀。

概念與互動

提供的長距離資訊

短讀與長讀在跨越兩個變異位點時的差別 上半部是 Illumina 短讀:本示意以約 100 bp 的 read 為例,兩個相距數千鹼基的變異位點無法被同一條 read 跨過, 因此看得到兩個變異各自的存在,卻無法判斷它們是否在同一條分子上。 下半部是 Oxford Nanopore 長讀:單條 read 可達數千至數萬鹼基,可能同時跨過兩個位點, 並可在適當的修飾辨識模型下,由同一條分子推定甲基化訊號。 變異 A 變異 B 相距約 3,000 bp Illumina(二代定序) 本示意讀長約 100 bp · 準確度通常較高 沒有任何一條 read 能同時跨過兩個位點 → 兩個變異是不是在同一條分子上?無法判斷 Oxford Nanopore(三代定序) 讀長可達數千至數萬 bp · 錯誤特性依流程而異,可由模型推定甲基化 品質足夠時,read 同時涵蓋兩變異 → 支持同一分子(cis) 實心/空心小圓 = 甲基化狀態,也在同一條分子上
兩個變異位點相距 3 kb。上:在本示意中,約 100 bp 的 Illumina reads 可分別觀察兩個位點,但沒有單條 read 同時涵蓋兩點。下:一條較長的 ONT read 涵蓋兩點,並可在完成修飾辨識時關聯中間的甲基化訊號。

此圖說明短讀與長讀的主要資訊差異。上半部並非表示短讀無法偵測變異; 在本比較條件下,Illumina 可分別辨識兩個位點,且單鹼基錯誤率通常較低, 但不能由單條 read 建立 3 kb 的分子連結。實際效能依平台、化學版本、basecaller 與變異類型而異。

Illumina
讀長常見約 100–150 bp,依平台與建庫而異可達數千至數萬 bp,分布依流程而異
單鹼基準確度通常較高依化學、basecaller 與變異類型而異; 常較具挑戰
跨越多個變異限於片段長度與建庫設計較能建立長距離相位與分子連結
甲基化bisulfite-seq 是常見方法之一native-DNA 流程可搭配模型由訊號推定修飾
常見優勢高準確度的局部變異偵測長距離 phasing 與分子連結

長讀 indel 判讀的主要限制

ONT 與 Illumina 的錯誤特性不同。 是 ONT indel 錯誤的常見高風險區域, 例如 AAAAAA

原因在判讀原理上:

為什麼同一個鹼基連續重複的區段特別容易讀錯長度 奈米孔定序靠電流訊號判讀鹼基。 當序列是各種不同鹼基交替時,每個鹼基造成的電流變化明顯,容易分辨。 但當同一個鹼基連續重複時,電流會維持在同一個平台上, 六個與七個造成的訊號差異可能很小,因此增加長度判讀錯誤。 長度誤判可能形成表觀插入或缺失,是假陽性 indel 的常見來源之一。 一般序列:好判讀 序列 A C G T A C T G 電流訊號 每個鹼基造成明顯的高低變化 → 容易數 連續重複:難判讀 序列 T T T T T T T 電流訊號 一路維持在同一個平台 六個與七個差異可能很小 → 容易數錯 數錯一個的後果:形成表觀插入或缺失 參考序列 A T T T T T T G (六個 T) 讀出來 A T T T T T T T G 多數了一個 → 報成一個「插入」 這類假訊號單靠提高門檻未必能解決;僅憑目前資料可能難以與真實插入缺失區分。 可加入序列以外的證據,例如檢查支持 reads 是否集中於一致的 haplotype。
左上:一般序列的電流訊號隨鹼基組合變化。右上:連續重複時,六個與七個重複單元的訊號差異可能很小,因而增加長度判讀錯誤。下方:一個單元的誤差可形成表觀插入或缺失;僅憑目前證據可能難以與真實 indel 區分。

下表提供效能示例,用於比較 SNV 與 indel 的相對差異。 數值解讀需同時記錄 caller 名稱與版本、資料集、truth set 與指標定義:

CallerSNV F1INDEL F1
ClairS(示例)0.710.32
DeepSomatic(示例)0.810.53

在此示例中,indel F1 低於 SNV F1,表示 somatic-indel 的整體偵測效能仍有改善空間; 後續方法會利用更多 read-level 特徵處理此問題。

補充:重複序列中的等價比對位置

除了 homopolymer,另一個原因是 alignment 位置的模糊性: 同一個 deletion 在重複序列中可有多種等價表示位置,使不同 reads 的訊號分散。 這些差異會反映在 ;CIGAR 是描述 read 與參考序列對齊操作的字串。

三項核心數值

意思本教材示例值
某個位置被多少條 read 覆蓋tumor 50×,normal 25×
支持 alt allele 的 read 比例germline het 在簡化二倍體模型中 0.5;somatic 依 purity、copy number 與 clonality 而異
樣本中腫瘤細胞的比例合成資料用 0.2 / 0.4 / 0.6 / 0.8 / 1.0

以下以簡化數值示例說明低腫瘤比例如何減少可用訊號:

低腫瘤比例為什麼難:把數字算出來就懂了 在本簡化模型中,定序深度相同時,腫瘤 DNA 在樣本中的佔比越低,支持一個真變異的 read 數就越少。 在腫瘤 DNA 佔兩成且符合模型假設的樣本上,一個所有腫瘤細胞都帶有的變異期望約有五條 read 支持。 定序本身也可能在位置產生錯誤 read;背景若接近真訊號,會增加低比例樣本的判讀困難。 同樣 50× 的定序深度,腫瘤 DNA 佔比不同的結果 腫瘤 DNA 佔比 支持真變異的 read 數 好不好判斷 100% 25 較易判讀 60% 15 中等難度 20% 5 較難判讀 定序錯誤 各位置可能有 1–2 模型中的背景假設 在本模型中,腫瘤 DNA 佔 20% 時期望真訊號約 5 條,背景約 1–2 條。 兩者距離較近,過濾門檻會面臨 precision–recall 取捨。 門檻過嚴可能漏掉真變異,過鬆則可能保留較多假陽性;實際結果依資料與模型而異。
每個方塊代表一條支持變異的 read。在本模型中,tumor DNA fraction 為 100% 時期望約 25 條,20% 時約 5 條;下方另以每個位置約 1–2 條錯誤 read 作為背景假設。少量背景錯誤可能與低比例變異訊號重疊。

在二倍體、單拷貝、clonal、無偏取樣且 tumor DNA fraction 為 0.2 的簡化模型中, 期望支持數為 50×0.2÷2=5 條。訊號數量不足是主要限制之一;背景錯誤、品質與演算法也會影響可靠性。

basecaller 是實驗變數

是把電流訊號轉成 A/C/G/T 的那一步。不同版本的 basecaller 會產生不同的錯誤特性,所以:

同一個細胞株,不同 basecaller,可視為兩份不同的資料集

此記錄並非次要細節。跨 basecaller 的同株資料可作為穩健性評估的一部分;例如 HCC1395_HKUHCC1395_NYGC 來自同一細胞株,但流程不同。 因此分析時應將 (細胞株、平台、basecaller、、 caller 版本、benchmark 來源與混合方式)與結果一併記錄。

真實證據

合成不同 purity 的樣本

若要評估方法在不同 tumor DNA fraction 下的效能,可依計算後的比例混合 tumor 與 normal BAM, 建立預先設定的合成梯度:

# 1. 先量出兩個 BAM 的實際 coverage(本例量到 tumor 50×、normal 25×)
mosdepth --by 500 tumor_cov  tumor.bam
mosdepth --by 500 normal_cov normal.bam

# 2. 抽樣率不是目標 fraction,要從實測深度回推:
#      抽樣率 = (目標 fraction × 合成後總深度)÷ 來源深度
#    總深度取 25×(兩邊都拿得出來),目標 DNA fraction 0.6:
#      tumor  需要 0.6×25 = 15× → 15 ÷ 50 = 0.30
#      normal 需要 0.4×25 = 10× → 10 ÷ 25 = 0.40
samtools view -s 1.30 -b tumor.bam  > tumor_sub.bam
samtools view -s 1.40 -b normal.bam > normal_sub.bam

# 3. 合併成指定 DNA fraction 的樣本
samtools merge dna_frac_0.6.bam tumor_sub.bam normal_sub.bam
samtools index dna_frac_0.6.bam

-s 的小數部分是抽樣率,不是你要的 fraction。 兩個來源深度不同時直接填 0.60/0.40 會得到 30×:10× = 0.75,不是 0.6。 以 tumor 50×、normal 25×、合成後總深度 25× 為例,五個梯度的抽樣率是:

目標 tumor DNA fractiontumor 抽樣率normal 抽樣率
0.2-s 1.10-s 1.80
0.4-s 1.20-s 1.60
0.6-s 1.30-s 1.40
0.8-s 1.40-s 1.20
1.0-s 1.50不混入 normal

這樣控制的是 tumor DNA/read fraction,五個樣本的總深度也才一致 —— 否則深度與 fraction 兩個變數會同時在動,之後看到效能下降就分不清是哪一個造成的。

判讀練習

同樣是 50× coverage 的樣本,你在某個位點看到 3 條 read 支持一個 1 bp 的 deletion, 而且那個位置位於一段 TTTTTTT 裡面。

你會怎麼看待這個候選點?

展開答案

此候選應列為低可信並以其他證據複核,因為三項風險同時存在:

  • 只有 3/50 條 read 支持(VAF 0.06),支持數偏少、可信度較低
  • 它是 indel,在 ONT 資料中通常較具挑戰
  • 它落在 homopolymer 裡,是 ONT 較容易發生長度判讀誤差的區域

但請注意:列為低可信候選不等於可以直接刪除。 低 purity 樣本中的 genuine somatic 變異也可能只有少數 reads 支持。 僅依低支持度刪除候選可能降低

因此需加入更細緻的證據,例如支持 reads 是否具有一致的 haplotype 來源,而非只依數量判定。

此問題也可能受資料可辨識性限制:某些 false positives 在現有特徵下與真變異非常相近, 使模型無法可靠區分。 若 truth set 在這種困難區域的標註不一致,特徵相近的位點可能得到相反標籤, 模型因而難以學得穩定規則。評估時應將 label uncertainty 納入解讀。

實作練習

檢查資料讀長

讀長會影響可連結的變異距離,仍需同時考慮 coverage、品質與演算法。取得新資料時可先檢查:

# 讀長的統計摘要
samtools stats aln.bam | grep -E '^SN' | grep -E 'length|reads mapped'

# 讀長分布(看有多少條真的夠長)
# -F 0x900 排除 secondary 與 supplementary,否則同一條 read 會被數好幾次
samtools view -F 0x900 aln.bam | awk '{print length($10)}' | sort -n | \
  awk '{a[NR]=$1} END {print "中位數", a[int(NR*0.5)]; print "第 90 百分位", a[int(NR*0.9)]; print "最長", a[NR]}'

# 覆蓋度
mosdepth --by 500 out aln.bam && head out.mosdepth.summary.txt

估算簡化模型中的預期支持數

可使用資料的 coverage,估算在二倍體、單拷貝、clonal 與無偏取樣假設下的預期支持 read 數; 這不是經驗證的 detection limit:

預期支持 read 數=覆蓋度×tumor DNA fraction÷2

例:覆蓋度 50×、tumor DNA fraction 為 20% 時 50×0.2÷2=5 條。

若期望值僅為兩至三條,可靠偵測低頻變異可能較困難。資料量是限制之一, 仍需比較增加定序深度、改善品質與調整模型的相對效益。

學習檢核

本模組術語

CIGAR
描述一條 read 如何對上參考基因體的緊湊字串。例如 5M1I5M 表示兩端各有 5 個對齊欄位,中間有 1 個相對於參考序列的插入;M 可能代表吻合,也可能代表錯配。
ONT(奈米孔定序)
Oxford Nanopore Technologies。以電流訊號讀取 DNA,可產生長 read;在 native-DNA 流程與適當模型下,可由訊號推定 5mC,通常不需 bisulfite 轉換。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
aneuploidy(非整倍體)
染色體數目異常。腫瘤裡非常普遍,也可能使 cellular purity 與 DNA fraction 不一致。
basecalling(鹼基判讀)
把定序儀的原始訊號(ONT 是電流)轉成 A/C/G/T 字母的步驟。不同 basecaller 版本會產生不同的錯誤特性 —— 所以「同一個細胞株、不同 basecaller」是兩份不同的資料集。
coverage(覆蓋度/深度)
某個位置被多少條 read 覆蓋。50× 表示平均每個位置約有 50 條 read 覆蓋,不代表它們均支持同一 allele。
homopolymer(同聚物)
同一個鹼基連續重複的區段,例如 AAAAAA。nanopore 在此類區段較容易發生長度判讀錯誤,是 indel 假陽性的常見來源之一。
indel(插入/缺失)
短的插入(insertion)或缺失(deletion)。在 nanopore 資料上通常比 SNV 更難可靠判讀,因為 homopolymer 與 alignment 位置漂移都可能製造假訊號。
long read(長讀)
單條可達數千至數萬鹼基的定序片段(例如 ONT、PacBio)。若可靠地同時覆蓋多個 variant,可提供它們位於同一 DNA 分子上的直接觀測證據。
provenance(資料來源履歷)
記錄資料來源、細胞株、定序平台、basecaller、reference build、caller、benchmark 與混樣方式。在本實驗室中,這些資訊是重要實驗變數,而非附註。
recall(召回率)
在指定評估範圍內,所有真陽性中被找出的比例:TP / (TP + FN)。若只對固定的 caller 候選集做後處理,recall 只能維持或下降,不能恢復 caller 從未輸出的真陽性;報告時應說清楚這個候選集範圍。
reference genome(參考基因體)
用於比對的標準序列(人類資料常用 GRCh38)。所有座標均相對於指定版本;更換 build 會改變座標系,座標不可直接比較。
tumour DNA fraction(腫瘤 DNA 比例)
樣本 DNA 中源自腫瘤的比例。與 tumor purity(細胞比例)在 aneuploid 或 WGD 的情況下會不一樣。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。

模組 4 · Data literacy

資料格式讀寫能力

從 FASTA、FASTQ、BAM 到 VCF,先建立檔案層級與範例,再拆解 BAM 的 CIGAR、HP/MM/ML 與 VCF 的 GT/PS。

約 60 分鐘建議先修:定序

本模組學習目標

  • 說出 FASTA、FASTQ、BAM、VCF 在 NGS 資料鏈中的角色,以及每種格式的一筆 record 代表什麼
  • 用一個小型例子,從 FASTQ 的 read 追到 BAM 的 alignment record,再追到 VCF 的位點紀錄
  • 區分檔案格式、record、欄位、BAM tag 與 VCF FORMAT,認出 GT、PS、HP 與 MM/ML
  • 在知道 BAM 的角色後,判讀 CIGAR 字串並計算它消耗的參考序列與 read 長度
  • 區分一般沒有 HP 的 untagged read,與帶有 somatic signal 但來源未定的 HP3

為什麼重要

做 NGS 分析時,你不會只拿到一個「結果檔」。同一批 DNA 觀測會在流程中留下不同格式:有的檔案保存參考序列,有的保存原始 read,有的保存每條 read 如何對齊,有的則把許多 read 的證據整理成變異位點。

所以本模組的第一個問題不是「CIGAR 怎麼解碼」,而是:我現在看到的檔案正在描述哪一層資料?先掌握 FASTA、FASTQ、BAM、VCF 的角色,再往下讀 record、欄位與 tag,最後才把 CIGAR 放回 BAM 的位置。

從參考序列與原始 reads 到變異紀錄的資料鏈 由左至右展示四種常見的 NGS 資料層級:FASTA 提供參考序列,FASTQ 保存定序 reads,BAM 保存每條 read 與參考的對齊紀錄,VCF 保存以位點為單位的變異紀錄。下方提醒 BAM 是 read-level 資料,而 VCF 是 site-level 資料;兩者不能當成同一種表格。 同一個分析流程,會留下不同層級的檔案 先認出「這個檔案在描述什麼」,再讀它裡面的欄位 FASTA 參考序列 >chr7 ACCTGATC... 比對時的座標基準 不是變異清單 搭配 FASTQ 原始 read 觀測 @read_001 ACCTGATC IIIIIIII 序列+每個鹼基的品質 還沒有參考座標 比對 BAM read-level 對齊紀錄 read_001 chr7 100 MAPQ 60 ... HP:i:1 ... 一筆通常是一條對齊 read 含位置、欄位與 tags 判讀 VCF site-level 變異紀錄 #CHROM POS REF ALT chr7 105 A G GT:PS 0|1:105 一列通常是一個位點 不是一條 read 閱讀順序:格式 → record → 欄位 → tag/FORMAT BAM 回答「哪些 read 在哪裡、怎麼對齊」;VCF 回答「哪些位點被提出為變異候選」。 因此看到 VCF 位點時,可以用 CHROM/POS 回到 BAM,檢查支持它的 read 證據。
從左到右是參考序列、原始 read、read-level 的對齊紀錄與 site-level 的變異紀錄。下方的閱讀順序是本模組的主線:先判斷檔案格式,再判斷一筆 record,接著讀欄位,最後才讀 BAM tag 或 VCF FORMAT。

本節會用一個很小的 toy locus 貫穿範例。它不是可直接拿去分析的完整檔案,而是把同一個位置在不同資料層級的樣子並排,讓你能回答「這一列在記錄什麼」以及「我要回哪個檔案找證據」。

概念與互動

一、先建立檔案地圖

格式/檔案它保存什麼一筆 record 通常代表什麼它回答的問題
序列一條序列或 contig 的 header 與鹼基參考座標上的標準序列是什麼?
定序儀產生的 read 序列與品質四行 read record:名稱、序列、分隔線、品質定序儀觀察到了哪些片段?
已對齊至參考的 read;它是 SAM 文字格式的二進位版本一筆 alignment record,通常對應一條 read這條 read 被放在參考的哪裡?對齊得怎樣?
.baiBAM 的索引,不是另一批生物學觀測由座標建立的查詢索引如何快速取出某個區間的 BAM records?
由 read 證據提出的變異紀錄一列通常代表一個基因體位點哪個位置被提出為 REF/ALT 變異候選?

FASTA 與 FASTQ 不是同一份資料的兩種副本。FASTA 在這裡提供比對基準;FASTQ 保存尚未有參考座標的 read。把 FASTQ 與 FASTA 比對後,才會得到 BAM;再由 BAM 的多條 read 證據整理出 VCF。VCF 的一列也不等於一條 read,而且通常是 caller 提出的候選,不是脫離原始證據的事實宣告。

二、用同一個小例子追過四種格式

假設我們只看 chr7 上一小段 toy reference。為了讓字串短一點,下面的座標從 100 開始;真實檔案會有完整的 chromosome sequence、header 與更多欄位。

1. FASTA:比對的參考序列

reference.fasta
>chr7
ACCTGATC

這段序列的 chr7:100–107 依序是 A C C T G A T C。FASTA 告訴我們「參考是什麼」,但還沒有任何 sample read,也沒有變異結論。

2. FASTQ:尚未定位的 read 觀測

reads.fastq
@read_001
ACCTGATC
+
IIIIIIII
@read_002
ACCTGGTC
+
IIIIIIII

每筆 FASTQ record 有四行:名稱、序列、+ 分隔線、每個鹼基的品質字串。這裡的 I 只是 toy example 的品質字元;重點是 read 還沒有 chr7:105 這種參考座標。

3. BAM:把每條 read 放回參考座標

BAM 是二進位檔,不能像文字檔一樣直接讀出一整列。為了教學,下面用「從 SAM/samtools view 選出的欄位」簡化顯示;這不是 BAM 的二進位內容:

QNAME       RNAME POS  MAPQ CIGAR SEQ       TAGS
read_001   chr7  100  60   8M    ACCTGATC  HP:i:1
read_002   chr7  100  60   8M    ACCTGGTC  HP:i:2

這兩條 read 都從 chr7:100 開始,並各自跨過 chr7:105。第二條 read 在這個位置讀到 G,而 reference 是 A。此時我們仍在讀每條 read 的觀測;還沒有把它們壓縮成一列 VCF。

4. VCF:把同一位置整理成一列變異紀錄

sample.vcf
##fileformat=VCFv4.3
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT sample
chr7   105 .  A   G   60   PASS   .    GT:PS  0|1:105

VCF 這一列把前面的觀察摘要成:在 chr7:105,reference allele 是 A,alternate allele 是 GGT:PS 是這個 sample 欄位的格式說明,後面的 0|1:105 才是對應值。真正要確認這一列是否由可靠 read 支持,仍要用 CHROMPOS 回到 BAM。

三、從檔案讀到細節:四個層級

層級先問什麼本例
檔案格式這份檔案的資料模型是什麼?FASTQ 是 read;BAM 是對齊後的 read;VCF 是位點。
record/row一筆資料代表一個什麼東西?BAM 的 read_002 是一條 alignment record;VCF 的 chr7:105 是一個位點 row。
固定欄位這筆資料的座標、序列或狀態放在哪一欄?BAM 的 POSMAPQCIGAR;VCF 的 REFALTFILTER
tag/FORMAT工具附加了什麼額外判讀?BAM 的 HPMMML;VCF 的 GTPS
讀任何基因體檔案的四個層級:格式、一筆紀錄、固定欄位、附加標籤 把讀檔案拆成由外往內的四層,每一層先問一個固定的問題。 第一層是檔案格式,問這份檔案的一筆資料代表什麼;BAM 的一筆是對齊後的 read,VCF 的一筆是一個位點。 第二層是單一紀錄,問眼前這一筆究竟是誰。 第三層是固定欄位,問座標、序列與狀態放在哪一欄,例如 BAM 的 POS、MAPQ、CIGAR,VCF 的 REF、ALT、FILTER。 第四層是工具附加的標籤,例如 BAM 的 HP、MM、ML 與 VCF 的 GT、PS。 關鍵是層級順序不能跳:先確定外層格式,才知道內層那個短標籤描述的是一條 read 還是一個位點。 由外往內四層,順序不能跳 ① 檔案格式 這份檔案的「一筆資料」代表什麼? FASTQ → 一條 read BAM  → 一條對齊後的 read VCF  → 一個位點 ② 一筆紀錄 眼前這一筆是誰? BAM: read_002 這一條 VCF: chr7:105 這一列 ③ 固定欄位 座標與狀態在哪一欄? BAM: POS · MAPQ · CIGAR VCF: REF · ALT · FILTER ④ 附加標籤 工具多寫了什麼判讀? BAM tag: HP · MM · ML VCF FORMAT: GT · PS 第四層最容易出錯:HP 與 GT 都是短短的鍵值,長得很像。 但只要先確定第一層是哪一種格式,就不會把一條 read 的標籤當成整個位點的結論。
四層是由外往內的,順序不能跳。縮排就是「再鑽進去一層」:先知道這是哪一種檔案,才知道一筆紀錄是什麼;知道一筆是什麼,才知道欄位在描述誰。

BAM tag 與 VCF FORMAT 欄位都像短短的鍵值,但不要把它們混為一談:HP 是寫在 read record 上的 BAM tag;GT 與 PS 是寫在 VCF sample 欄位中的 FORMAT 子欄位。先辨認外層格式,才不會把一個 read 的標籤誤當成整個位點的結論。

同一個位置,在 BAM 裡是很多筆紀錄,在 VCF 裡只有一列 左邊是 BAM:位置 chr7:105 被六條 read 覆蓋,每條 read 自己是一筆 alignment record, 每筆各自帶著一個 HP tag,標示這條 read 被指派到哪一條 haplotype; 六條 read 在該位置各自讀到 A 或 G。 右邊是 VCF:同一個位置只有一列,欄位寫的是整個位置的結論 —— CHROM chr7、POS 105、REF A、ALT G,以及 sample 欄位裡的 GT 0 直線 1 與 PS 105。 兩邊都是形如「名稱冒號值」的短標籤,但長在不同的東西上: HP 長在一條 read 上,GT 與 PS 長在一個位置上。 因此看到這類標籤時,要先分辨它描述的是單一分子還是整個位點。 同一個位置,在兩種檔案裡是兩種東西 BAM:一條 read 一筆紀錄 chr7:105 read_001 HP:Z:1 read_002 HP:Z:2 read_003 HP:Z:1 read_004 HP:Z:2 read_005 HP:Z:1 read_006 HP:Z:2 A G A G A G 六筆紀錄,每一筆各自帶一個 HP 整理成 VCF:一個位置一列 CHROM chr7 POS 105 REF / ALT A / G GT 0|1 PS 105 這一列是整個位置的結論, 不屬於其中任何一條 read。 一列,不是六列。 HP 長在一條 read 上;GT 與 PS 長在一個位置上。 兩者都寫成「名稱:值」,所以看到這種短標籤,要先問它描述的是一個分子還是一個位點。
同一個 chr7:105,在 BAM 是六筆紀錄、每筆各帶一個 HP,在 VCF 是一列、整列只有一組 GT 與 PS。所以 HP:Z:1 講的是「這條分子來自哪一邊」,GT 0|1 講的是「這個位置的兩份拷貝各是什麼」——它們不是同一個層級的話。

四、先讀 VCF 的關鍵欄位

VCF 部分本例初學者先記住什麼
CHROMPOSchr7105用來定位並回到 BAM 查詢;座標必須和 reference build 一致。
REFALTAG這一列比較的 reference allele 與 alternate allele。
FILTERPASS表示通過該流程設定的篩選;不是「任何情況下都已證明為真」。
GT0/10|10 是 REF、1 是第一個 ALT;斜線代表未定相,直線代表已提供相位順序。
105同一個 PS 的位點屬於同一個 phase set;不同 PS 的 HP1/HP2 方向不可直接當成一致。

0|1 只說明兩個 allele 的相位順序已被表示出來,不代表第一條一定是父系,也不代表這一列不需要回看 BAM。PS 是一個分組編號,不是支持 read 的數量。

五、再讀 BAM:CIGAR 只是其中一個欄位

讀 BAM 時,可以把一筆 alignment record 想成一列「read 如何被放回參考」的資料。POS 告訴你從哪個參考座標開始,MAPQ 是比對位置的信心摘要,SEQ 是 read 序列; 則用一串數字與字母,描述 read 與參考序列之間各段如何對齊。

先用固定規則讀 CIGAR:每個操作碼分別消耗「參考序列」或「read」。互動元件只做這一個局部任務;它不是另一種檔案格式。

互動元件(列印版保留說明;數位版可操作)
先看預設的 5M1I5M,再輸入較短的 10S8M。每一段都問自己:它消耗參考、消耗 read,還是兩邊都消耗?
操作碼意思消耗參考消耗 read
M有對齊的欄位;可能吻合,也可能錯配
Iinsertion:read 有、參考沒有
Ddeletion:參考有、read 沒有
S:read 保留,但這段沒有納入對齊
Hhard clip:該段序列不保留在這筆 alignment record 中

M 不等於完全吻合。如果要知道 M 中哪些鹼基真的不同,要一起看 read 序列、參考序列或 MD tag;不能只靠 CIGAR 的 M 判斷。

六、soft clip:BAM 對齊資訊的一個判讀例子

當 read 的一端無法可靠地對上參考時,比對器可能把那一端標成 S。soft-clipped 的序列仍保留在 BAM,所以它和 hard clip 不同;只是該段不消耗參考座標。

soft clip:read 端部未可靠對齊參考序列時的示意 最上方一列是參考基因體序列,每個字母一格。 第二列示意左端 soft clipping:紅框表示未納入對齊的 read 端,圖中以 GCT…概略表示, 對應的 CIGAR 為 10S;該序列仍保留在檔案中。右側另示意 2D,表示參考序列存在而 read 沒有。 第三列示意右端 soft clipping,方向相反。 下方比較兩種情況:clipping 可分散於不同 read 的端部;若多條 read 的 clipping 位置集中, 可作為結構變異斷點候選,仍需結合其他證據確認。 參考基因體 (比對的基準) C A C A T T A G G C T A T A 比對從這裡開始 左端被剪的 read 前端未可靠對齊 GCT… A T T A G – – T 此 read 的 CIGAR 10S 5M 2D 1M 序列仍保留於檔案 不計入對齊區段 2D=參考有、read 沒有 右端被剪的 read 後端未可靠對齊 A T T A G G C T AGC… 此 read 的 CIGAR 8M 10S 單一 read 的 clipping 可見於技術或比對現象;若多條在同一位置出現 —— 位置分散:可見於一般現象 clipping 可分散於不同 read 的端部 位置集中:結構變異斷點候選 read 與參考序列的對齊可能不一致,需進一步確認
上方先對照參考與兩條 read 的端部 clipping;下方比較 clipping 分散與集中。集中在同一座標的 soft clip 可列為結構變異斷點候選,但也可能由低品質、重複序列或其他 alignment 問題造成,仍需其他證據確認。

把候選訊號當成候選,不要當成結論

若多條 read 在相近位置、以相同方向出現 soft clip,這比單一 read 的 clipping 更值得檢查,因為它可能表示 sample 與 reference 在該處的結構不同。但「集中」本身不能排除重複序列、低 mapping quality、定序錯誤或比對器選擇;應搭配 coverage、read 序列與其他變異證據。

七、BAM tags:HP、MM/ML tag 與 somatic haplotype

BAM tag它描述什麼本模組的判讀邊界
工具對這條 read 的 haplotype assignment,例如 HP:i:1 或其他工具版本的 HP 值HP1/HP2 是工具標籤,不自動代表父系/母系;沒有 HP 不代表 read 支持相反 allele。
HP3 分層中,帶有 somatic signal,但工具尚未可靠判定它源自哪一條 germline haplotypeHP3 不是「沒有 HP」。一般 untagged read 只是沒有 HP assignment;只有同時有 somatic signal 且來源未定,才使用 HP3 這個概念。
MM 記錄 read 上修飾的位置與類型;ML 提供相應的修飾機率/信心值這些 tags 可能在 BAM→FASTQ→BAM 的轉換中遺失;看到欄位空白時先檢查流程,不要直接解讀成「沒有甲基化」。

這裡的 HP3 是一個「帶有 somatic signal、但來源未定」的工具分類;它不等於普通的未標籤 read,也不等於已經證明存在一個獨立的細胞族群。

真實資料與證據

把命令和它讀寫的格式對上

下面不是一串需要盲目複製的指令,而是一張「哪個步驟讀哪個檔案、產生哪個檔案」的對照表。執行前仍需依平台、版本與路徑調整。

# 1. 為參考 FASTA 建立索引;產生 reference.fasta.fai
samtools faidx reference.fasta

# 2. FASTQ + FASTA → SAM;--MD 讓輸出帶有 MD tag(若下游需要)
minimap2 --MD -ax map-ont -t 10 reference.fasta reads.fastq -o alignment.sam

# 3. SAM → 排序後 BAM;再為 BAM 建立 .bai 索引
samtools sort -@ 10 alignment.sam -o alignment.bam
samtools index -@ 10 alignment.bam

.fai.bai 是讓工具快速依座標取資料的索引,不是新的 read 或新的變異結論。比對時使用的 reference FASTA 版本也要和後續查詢座標一致。

把 VCF 位點回溯到 BAM read

假設 VCF 有一列 chr7:105 A>G。先取出它的座標,再用同一個座標區間查 BAM;這個動作把「site-level 的候選」連回「read-level 的證據」。

# 1. 先看 VCF 的非 header rows
bcftools view -H sample.vcf | head -3

# 2. 回到相同座標,看每一條 BAM alignment record
samtools view alignment.bam chr7:105-105

# 3. 用 reference FASTA 產生該位點的 pileup
samtools mpileup -f reference.fasta -r chr7:105-105 alignment.bam

# 4. 把 read 名稱、位置、MAPQ、CIGAR 與 tags 一起留下
samtools view alignment.bam chr7:105-105 | cut -f 1,3,4,5,6,12-

若 VCF 與 BAM 使用不同的 reference build,座標可能看似合法卻查到錯的區域。若 CIGAR 型式、MAPQ 或 pileup 顯示不一致,先檢查 alignment 品質、重複序列與 indel 對齊歧義,再判斷生物學意義。

轉換 BAM 時保留 MM/ML

如果原始 BAM 有甲基化 tags,轉成 FASTQ 再重比對時要明確把 tags 帶過去;否則輸出的 BAM 可能格式正常,卻沒有可用的 MM/ML。

# -T '*' 把所有 tags 帶進 FASTQ header/comment
samtools fastq -T '*' methylcall.raw.bam > methylcall.raw.fastq

# -y 讓 minimap2 把 FASTQ header 裡的 tags 寫回 BAM
minimap2 -ax map-ont -y reference.fasta methylcall.raw.fastq

重比對後請直接檢查 BAM 的 tags 是否仍存在。若漏掉 -T '*'-y,流程可能不報錯,但後續需要 MM/ML 的分析會拿不到原始修飾資訊。

預測與結果檢視

你看到 VCF 的一列:chr7 105 A>G PASS GT:PS 0|1:105。如果你想知道這個候選是否真的有 read 支持,應先回哪一種檔案?

同時,這列中的 0|1PS=105 各自告訴你什麼?

展開答案

先回 BAM。用 VCF 的 CHROMPOS 查詢該區間,再查看每條 read 的序列、MAPQ、CIGAR 與可用 tags;需要時再對照 reference FASTA。FASTQ 是尚未放回座標的原始 read,不能直接回答哪條 read 覆蓋 chr7:105

0|1 表示 REF 與 ALT 的順序已被定相表示;PS=105 表示這個位點屬於編號為 105 的 phase set。它們都不等於支持 read 數量,也不會取代對 BAM 的檢查;HP1/HP2 也不因此自動帶有父系/母系意義。

另一條 BAM record 的 CIGAR 是 60S40M。這條 read 總長多少?它消耗了多少參考序列?

展開答案

read 長 100 bp,參考涵蓋 40 bp。S 仍保留在 read,所以 60+40=100;但 S 不消耗參考,只有 40M 消耗 40 個參考位置。

如果許多 read 在相近座標出現相同方向的 S,可把該處列為結構變異斷點候選;仍需結合其他證據,不能由單一 CIGAR 直接下結論。

實作練習

練習一:從一列 VCF 開始追證據

選一列 VCF,先寫下 CHROMPOSREFALT,再逐步回答:

  1. 它是一個 site-level row,還是一條 read?
  2. 要回 BAM 查哪一個座標區間?
  3. 在 BAM record 中,哪些固定欄位告訴你 read 的位置、對齊型式與品質?
  4. 有哪些 HP、MM/ML tags?沒有 HP 時,能不能直接寫成 HP3?

最後用 pileup 或 IGV 對照支持與反對的 read;不要只看 VCF 的 FILTER=PASS 就跳過 read-level 檢查。

練習二:讀 CIGAR 的兩個總和

對每個 CIGAR,分別把「消耗 read」與「消耗參考」的操作碼加總,再用上方解碼器核對:

CIGARread 長度參考涵蓋長度先看哪個規則?
10M1010M 兩邊都消耗
5M2I5M1210I 只消耗 read
5M2D5M1012D 只消耗參考
3S7M107S 留在 read、不佔參考

如果你只記得一句話:先辨認檔案的資料粒度,再讀欄位;CIGAR 是 BAM 對齊欄位的解碼規則,不是 NGS 檔案鏈的起點。

學習檢核

本模組術語

BAM
已比對到參考基因體的 read 的二進位格式(SAM 的壓縮版)。每一列是一條 read,帶著它的位置、CIGAR、品質與各種 tag。
CIGAR
描述一條 read 如何對上參考基因體的緊湊字串。例如 5M1I5M 表示兩端各有 5 個對齊欄位,中間有 1 個相對於參考序列的插入;M 可能代表吻合,也可能代表錯配。
FASTA
以文字保存 DNA 或 RNA 序列的格式;在本模組中,FASTA 主要用來提供比對所需的參考基因體序列。
FASTQ
存放 read 序列與每個鹼基品質分數的文字格式;每筆紀錄由四行組成。
HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
MM/ML tag
BAM 中儲存每條 read 甲基化判讀的兩個 tag:MM 記錄位置、ML 記錄機率。在轉換或重新比對流程中可能遺失,需確認 tags 是否保留。
PS tag(phase set)
標示某群 variants 屬於同一 phase block 的編號。同一 PS 內的相位方向可相互比較;不同 PS 的 HP1/HP2 方向彼此獨立。
VCF
存放 variant 的文字格式。每一列是一個位點,記錄位置、ref/alt allele、品質、FILTER 與各種 FORMAT 欄位。
reference genome(參考基因體)
用於比對的標準序列(人類資料常用 GRCh38)。所有座標均相對於指定版本;更換 build 會改變座標系,座標不可直接比較。
soft clipping
read 端部未與參考序列對齊,但序列仍保留在 BAM 中(CIGAR 為 S)。大量 clipping 集中於同一位置時,可能提示結構變異斷點,仍需其他證據確認。
somatic haplotype
在 germline haplotype 之下再細分出來的層級。某條 HP1 的 read 若帶有 somatic 突變,就屬於 HP1-1;HP2 的則是 HP2-1。無法判定來源的歸為 HP3

模組 5 · Germline variant calling

Germline variant calling:從證據到判定

說明 Clair3 與 DeepVariant 的角色,以及 phasing 如何提供額外證據、協助區分變異與定序雜訊。

約 35 分鐘建議先修:資料格式

本模組學習目標

  • 說明 variant caller 在做什麼判斷,以及為什麼它不是單純數 read
  • 說明 phasing 資訊如何作為辨識定序錯誤的輔助證據
  • 說出 Clair3 與 DeepVariant 在流程中的位置
  • 說明為什麼 phasing 與 calling 是來回兩次,而不是單向的一次

為什麼重要

本課程後續工具多以 caller 輸出的候選變異為輸入,進一步進行篩選或校正。 因此需要先理解 caller 的輸出內容與限制。

germline calling 的情境相對單純:一個人只有兩條染色體,變異要嘛在其中一條、要嘛兩條都有。 本節在這個單純的情境下把 caller 的判斷方式講清楚,M07 再處理腫瘤帶來的額外因素。

概念與互動

的判斷內容

某個位置有 30 條 read 支持 A、28 條支持 G。這組數字可以提出 heterozygous 候選, 但不能單獨定案 —— 因為同樣的 30 比 28,畫面可以完全不同

同樣是 30 比 28,畫面可以完全不同 兩邊的計數完全一樣:30 條 read 支持參考鹼基 A、28 條支持 G。 左半部畫出一種與真 heterozygous 相容的畫面:支持 G 的 read 正反股都有, 鹼基品質高,附近序列沒有對齊困難。右半部畫出另一種畫面:支持 G 的 read 全部落在同一股, 鹼基品質低,而且候選位置緊鄰一段同型多聚體。兩者的支持數相同, 因此僅依數量無法區分,必須看每個觀測本身帶的品質與比對資訊。 同一組計數,畫面 A 30 條支持 A 28 條支持 G 計數 30 : 28 兩邊完全一樣 候選位置 C T G C T A C G T C T A C T A C G T C T G C T A C G T C T A C T A C G T C T G C T A C G T C T A C T A C G T 支持 G 的 read:正反股都有、鹼基品質高 鄰近序列沒有重複片段,比對位置明確 同一組計數,畫面 B 30 條支持 A 28 條支持 G 計數 30 : 28 跟左邊一模一樣 候選位置 C T G C A A A A T C T G C A A A T T C T G C A A A A T C T A C A A A A T C T A C A A A A T C T A C A A A A T 同型多聚體 支持 G 的 read:全部同一股、鹼基品質低(淡字) 右側是一段連續 A,比對位置本身就有歧義 數量一樣,畫面不一樣 —— caller 判斷的是後者。 所以 30 比 28 只能提出候選;每一個觀測還帶著品質、股向與鄰近序列,這些才是判定的依據。
兩邊的計數一模一樣。左邊支持 G 的 read 正反股都有、鹼基品質高,鄰近序列也沒有對齊困難。右邊支持 G 的 read 全部落在同一股、鹼基品質低(畫成淡字),而且緊鄰一段連續的 A,比對位置本身就有歧義。數量分不出這兩者。

所以 caller 讀的不是兩個數字,而是這個位置的整張畫面 —— 把覆蓋此處的 read 排成一張表(一列一條 read、一欄一個位置,這種排法叫 pileup), 再把表上每個格子的資訊編碼成好幾層數值送進模型。 都是這種做法:

caller 把一個位置的 read 堆疊變成多層數值,再由模型判定基因型 由左而右三步。第一步:把候選位置周圍的參考序列與覆蓋此處的 read 排成一張表, 每一列是一條 read,每一欄是一個位置,中間那一欄是待判定的候選。 第二步:同一張表被編碼成好幾層數值,每一層記錄一種資訊 —— 鹼基種類、鹼基品質、比對品質、read 落在哪一股;深淺代表數值大小。 第三步:這疊數值送進神經網路,輸出三種基因型的機率: 兩條都是參考、一條有變異、兩條都有變異。此例的機率集中在一條有變異,即 heterozygous。 不同 caller 的通道定義與模型結構並不相同,此圖為示意。 ① 這個位置的 read 堆疊 候選 參考 C T A A G C T C T A G G C T C T A A G C T C T A G G C T C T A A G C T C T A G G C T C T A A G C T C T A G G C T C T A A G C T 一列是一條 read,一欄是一個位置 每個格子還帶著品質與股向 ② 編碼成多層數值 鹼基種類 鹼基品質 比對品質 整條 read 一個值 read 落在哪一股 深=正股 淺=反股 深淺=數值大小。實際通道數與定義 依 caller 與版本而異,這裡只取四層示意 ③ 模型輸出基因型機率 卷積層:找局部樣態 卷積層:組合成證據 全連接層 三種基因型的機率 0/0 0.01 0/1 0.97 1/1 0.02 此例判為 heterozygous(0/1) 模型看的不是「幾比幾」,而是整張帶著品質與比對資訊的畫面。 Clair3 與 DeepVariant 都屬於這種做法,但兩者的通道定義、模型結構與訓練資料並不相同。
① 候選位置周圍的 read 堆疊。② 同一張表被編碼成多層數值:鹼基種類、鹼基品質、比對品質、read 落在哪一股,深淺代表數值大小。③ 這疊數值送進神經網路,輸出三種基因型(0/00/11/1)的機率。實際通道定義與模型結構依 caller 與版本而異。

兩個工具的內部步驟不同:DeepVariant 把「做數值」「跑模型」「寫 VCF」拆成三個程式; Clair3 則先用輕量模型掃過所有位置,只把信心不足的少數位置交給看完整比對的模型重判。

variant caller 在流程中的位置,以及兩個常用工具的內部步驟 上方是輸入與輸出:比對後的 BAM 與參考序列進入 variant caller, 輸出 germline VCF,再供後續的 phasing 工具使用。 中間列出 DeepVariant 的三個步驟:先把每個候選位置的 read 堆疊做成多層數值, 再由神經網路輸出基因型機率,最後寫成 VCF。 下方列出 Clair3 的兩段式設計:先用較輕量的模型掃過所有候選位置, 大多數位置在這一步就定案,只有少數信心不足的位置再交給看完整比對的模型重判。 兩者的步驟名稱與細節依版本而異。 aln.bam(比對後的 read) reference.fasta(參考序列) variant caller Clair3 / DeepVariant germline VCF 位置+基因型+品質分數 後續 phasing 用其中的 het 位點當錨點 DeepVariant:三個步驟 make_examples 把 read 堆疊做成多層數值 call_variants 神經網路輸出基因型機率 postprocess_variants 整理成 VCF Clair3:先快掃一遍,難判的才細看 輕量模型掃全部位置 用每欄的摘要統計 多數位置在此定案 機率明確,不必再算 少數位置信心不足 留給下一步重判 完整比對模型再判 看整段比對的細節 兩段式的用意:把昂貴的計算只花在難判的少數位置上。實際步驟名稱與門檻依版本而異。
上:caller 吃 BAM 與參考序列,吐出 germline VCF,供後續 phasing 使用。中:DeepVariant 的三個步驟。下:Clair3 的兩段式設計 —— 把昂貴的計算只花在難判的少數位置上。步驟名稱與門檻依版本而異。

把 read 先分成兩群,判斷就變簡單了

前面那張畫面還有一個沒用上的線索:這些 read 分別來自哪一條染色體。 一個人的每個位置有兩條染色體,一條來自父親、一條來自母親。 把 read 依這兩條分成兩群(也就是 ),同一個畫面會變得好判斷得多:

先把 read 分成兩群,再判定變異:haplotype 資訊如何幫助 germline calling ① 六條 read、四個位置;其中三個位置各出現了兩種鹼基,但看不出哪些是真的變異、哪些是錯誤。 ② phasing 把 read 分成兩群之後,位置 1 與位置 3 的差異在同一群裡每一條 read 都一致, 與真的 heterozygous 變異相容;位置 2 的差異則是兩群各零星一條,與定序錯誤相容。 ③ 因此實際流程是來回兩次:先做一次 calling 取得可靠的 heterozygous 位點, 用它們把 read 分成 HP1 與 HP2,再把 haplotype 標籤當成模型的額外輸入重判一次。 ④ 最終判定中,位置 1 與位置 3 保留為 heterozygous 變異,位置 2 被判為錯誤而移除。 ① 定序後的 read:混在一起 G T T A A T C A G C T A A T C A G T T A A C C A 六條 read、四個位置;其中三個位置出現兩種鹼基。 哪些是真的變異、哪些是錯誤?這樣排看不出來。 ② phasing:把 read 分成兩群 HP1 HP2 G T T A G C T A G T T A A T C A A T C A A C C A 位置 1、3:同一群內每條都一致 → 像真的變異 位置 2:兩群各零星一條 → 像定序錯誤 ③ 所以實際流程是來回兩次 第一次 calling 還沒有 haplotype 取得可靠的 het 位點 用這些位點 phasing 把 read 分成 HP1 與 HP2 帶著 HP 再判一次 haplotype 成為 模型的額外輸入 難判的位置在第二次才定案;容易的位置第一次就結束了。 ④ 最終判定 兩條染色體各自的鹼基 HP1 HP2 G A T C 位置 2 被判為錯誤,不寫進 VCF。 「先 call 再 phase」與「phase 幫助 call」並不衝突:先用最有把握的 het 位點做 phasing, 再把 haplotype 資訊餵回模型重判一次 —— Clair3 與 PEPPER-Margin-DeepVariant 都是這樣做。
① 六條 read 混在一起時,其中三個位置各看得到兩種鹼基,分不出哪些是真的。② 分成兩群之後:位置 1 與位置 3 在同一群裡每條 read 都一致,與真的 heterozygous 變異相容;位置 2 只是兩群各零星一條,與定序錯誤相容。③ 因此流程是來回兩次:先 call 出可靠的 het 位點 → 用它們 phasing → 帶著 HP 標籤再判一次。④ 位置 2 被移除,不寫進 VCF。

關鍵在一致性,不在數量。真的 heterozygous 變異只存在於其中一條染色體上, 所以那一群的每一條 read 都應該帶著它;隨機的定序錯誤沒有這個約束,會零星散落在兩群裡。 這個判準對錯誤率較高的平台(例如部分 ONT 資料)特別有用 —— 那正是單看計數最不可靠的情形。

這也解釋了一個看起來矛盾的地方:明明要先有變異才能 phasing,怎麼又說 phasing 幫助 calling? 因為兩者是來回兩次:先用最有把握的位點做一次 calling,用它們把 read 分群, 再把 當成模型的額外輸入重判一次。Clair3 的 full-alignment 階段與 PEPPER-Margin-DeepVariant 都採用這個順序。

同一個「集中或分散」的線索在腫瘤資料裡會再出現一次,只是那時要判斷的不只是真假, 還包括這個變異長在哪一條 上 —— 需要的證據也更多。以下這張圖先把最重要的陷阱說清楚: 兩種情況的支持 read 總數可以幾乎一樣,所以不能靠數量判斷。

以 haplotype 分布作為候選判讀的輔助證據 兩邊示意同一種畫面:中間是待判斷的候選位置,左右兩側各有一個已知參考位點, 用來把 read 分成兩個 haplotype 群組。左半部示意在一般 heterozygous、相位可靠的情境下, 支持 read 較集中於一群;右半部示意隨機錯誤的支持 read 可能分布於兩群。 系統性錯誤、mapping bias、copy-number/LOH 或 phasing 錯誤可能不符合此簡化模式。 最下方比較兩邊的數量與分布,說明僅依 read 數量可能無法區分。 候選變異(示例) 簡化情境:支持 read 多集中於一群 參考點 候選 參考點 HP1 A G A G A G A G A G HP2 T C T C T C T C T C 支持 read 集中於 HP1 HP1: 5 條  HP2: 0 條 分布集中 隨機錯誤(示例) 支持 read 可能分散於兩群 參考點 候選 參考點 HP1 A G A G A G A G A G HP2 T C T C T C T C T C 兩群皆有支持,分布較分散 HP1: 2 條  HP2: 3 條 分布分散 支持 read 的 haplotype 分布可作為重要輔助線索。 此示例兩邊的總數相近(5 條對 5 條)—— 僅依數量難以區分, 需先建立 HP1/HP2 分群,再結合品質、比對與其他證據判讀。
兩邊示意同一種畫面:中間是待判斷的候選位置,左右各有一個已知參考位點,將 read 分成兩個 haplotype 群組。左邊示意支持 read 集中於一群;右邊示意支持 read 分布於兩群。兩邊的總數相近,因此僅依數量難以區分,仍需整合品質與比對證據。
適用邊界:haplotype 一致性不能單獨定案

系統性錯誤、mapping bias,以及腫瘤裡的 copy-number 變化或 ,都可能讓分布不符合上述的簡化模式。它是重要線索,不是單獨的判定依據。

真實證據

本教材示例使用 ;部分流程也會使用 PEPPER-Margin-DeepVariant。 以下提供一組示範指令:

docker run \
  -v "${INPUT_DIR}":"${INPUT_DIR}" \
  -v "${OUTPUT_DIR}":"${OUTPUT_DIR}" \
  kishwars/pepper_deepvariant:r0.7 \
  run_pepper_margin_deepvariant call_variant \
  -b "${INPUT_DIR}/alignment.bam" \
  -f "${INPUT_DIR}/reference.fasta" \
  -o "${OUTPUT_DIR}" \
  -t 10 \
  --ont_r9_guppy5_sup

最後的 --ont_r9_guppy5_sup 是與特定 ONT 化學版本/basecaller 資料相容的模型選項。 R10 與 PacBio HiFi 應依所用版本文件選擇相容模型(例如 --ont_r10_q20--hifi)。 模型不匹配可能降低效能,且流程未必報錯;請將平台、basecaller 與模型版本記錄於

在本教材流程中,germline VCF 產生後,再由後續 phasing 工具使用其中的 heterozygous 位點作為錨點。 這是本流程的先 call、再 phase 順序;其他工具可能採用不同的整合方式。

判讀練習

某個位點有 50 條 read 覆蓋,其中 25 條支持 alt allele(VAF = 0.5)。 檢查這 25 條 read 的 ,發現 13 條屬於 HP1、12 條屬於 HP2。

請判斷此分布較支持一般 germline 變異,還是定序錯誤/比對假訊號,並說明需要補充哪些證據。

展開答案

在相位與 mapping 品質可靠、且未見 CN/LOH 等因素時,這個分布與一般 heterozygous germline 模式不一致,可列為可疑訊號。

一般 heterozygous germline 變異預期位於其中一條染色體,因此支持 read 往往較集中於 HP1 或 HP2;13 比 12 的分布需要結合其他證據判讀,不能單獨定義為錯誤。

接近均分的支持 read 可與隨機錯誤一致,但系統性錯誤、mapping bias、相位錯誤或腫瘤區域的 copy-number 狀態也可能造成類似結果。

另需注意以下情況:

  • 若位點的 DNA 拷貝數相對一般二倍體狀態改變,haplotype 比例可能失衡
  • 若為 homozygous 變異,兩條 haplotype 都可能帶有該 allele;VAF 仍會受 copy number、污染與測序品質影響,不必然等於 1.0

因此,VAF = 0.5 加上 HP 近乎均分只能提高可疑程度,仍需搭配 allele balance、base/mapping quality 與 copy-number 證據。

實作練習

執行一次 germline calling

# Clair3(Docker 範例;請依環境調整路徑)
docker run -v "${INPUT_DIR}":"${INPUT_DIR}" -v "${OUTPUT_DIR}":"${OUTPUT_DIR}" \
  hkubal/clair3:latest \
  /opt/bin/run_clair3.sh \
  --bam_fn="${INPUT_DIR}/aln.bam" \
  --ref_fn="${INPUT_DIR}/reference.fasta" \
  --threads=10 \
  --platform="ont" \
  --model_path="/opt/models/ont" \
  --output="${OUTPUT_DIR}"

模型應與定序化學版本、basecaller 與工具版本相容。模型不匹配可能降低效能, 且未必觸發錯誤;請在執行前核對模型文件,並將設定記錄於 provenance。

檢查結果的合理性

取得 VCF 後,先進行以下基本合理性檢查:

# 變異總數;典型高品質人類全基因體 callset 約為數百萬筆,實際值依篩選條件而異
bcftools view -H out.vcf | wc -l

# het 與 hom 的比例;實際值依族群、平台與篩選條件而異
bcftools view -H -g het out.vcf | wc -l
bcftools view -H -g hom out.vcf | wc -l

# SNV 與 indel 的比例;實際值依平台與篩選條件而異
bcftools view -H -v snps out.vcf | wc -l
bcftools view -H -v indels out.vcf | wc -l

這些統計若明顯偏離同類資料的預期,可能提示 coverage、模型相容性、參數、過濾條件或樣本品質問題。 請先檢查原因,再進行 phasing,以降低問題在後續流程中傳遞的風險。

學習檢核

原始文獻與程式碼

  • Clair3:Zheng Z 等,Symphonizing pileup and full-alignment for deep learning-based long-read variant calling,Nature Computational Science,2022。程式碼在 github.com/HKU-BAL/Clair3
  • DeepVariant:Poplin R 等,A universal SNP and small-indel variant caller using deep neural networks,Nature Biotechnology,2018(doi 10.1038/nbt.4235)。程式碼在 github.com/google/deepvariant

本模組術語

Clair3
以深度學習做 germline variant calling 的工具,長 read 上常用。
DeepVariant
Google 開發的 germline variant caller,把 pileup 轉成影像再用 CNN 分類。
HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
haplotype(單倍型)
同一條實體染色體拷貝上,具有一致相位的一組 alleles 或 variants。HP1 與 HP2 是任意的相對標籤。
phasing(定相)
為可判定的 variants 建立其位於不同實體染色體拷貝上的相位關係;VCF 常以 0|1 等形式表示。長 read 可提供跨位點的分子層級觀測證據。
provenance(資料來源履歷)
記錄資料來源、細胞株、定序平台、basecaller、reference build、caller、benchmark 與混樣方式。在本實驗室中,這些資訊是重要實驗變數,而非附註。
variant calling
從已比對 read 中判斷哪些位置具有足夠證據支持變異存在的過程,通常輸出 VCF。

模組 6 · Phasing and haplotagging

Phasing 與 haplotagging

介紹實驗室的核心方法,包含手動 phasing 練習,以及 somatic haplotype HP1-1、HP2-1 與 HP3 的意義。

約 70 分鐘建議先修:Germline variant calling

本模組學習目標

  • 將一組 read 分配至 HP1 與 HP2,並說明所採用的判準
  • 說明 phase set 是什麼,以及為什麼 haplotype 方向只在 phase set 內部有意義
  • 說出 switch error 是什麼、通常發生在哪裡
  • 畫出 germline haplotype 與 somatic haplotype 的層級關係,包含 HP3 的處理

為什麼重要

M0 的那個問題到這裡才真正有答案。報告說 T790M 有、C797S 也有, 但要回答它們在不在同一份 DNA 上,得先把 read 依來源分成兩群 —— 這件事就是 phasing

它產出兩個東西,之後每個模組都會用到:

  • 變異的相位寫進 VCF —— 哪些變異在同一條 haplotype 上。
  • 每一條 read 的 haplotype 寫進 BAM 的 HP tag —— 這條 read 來自哪一條。 這一步叫 haplotagging

第二個特別關鍵:M7 判斷 somatic 變異真假時用的「支持 read 是否集中在同一條 haplotype」, 以及 M9 依 haplotype 分開統計甲基化,都是在 HP tag 上算的。 沒有這一步,那些判準根本無從計算。

本模組先用一段簡化 pileup 讓你自己分一次群,再說明工具怎麼做同一件事、 以及它在哪些情況下會分錯。

概念與互動

練習一次 phasing 判讀

下面是一段 pileup,包含三個 位點;每條 read 在其覆蓋到的位點上顯示一個鹼基。 請依跨位點的 allele pattern 將 read 分群,使同群 read 的組合盡可能一致,並保留無法可靠判定的 read。

互動元件(列印版保留說明;數位版可操作)
點選 read 可在「未指派 → HP1 → HP2 → 未指派」之間切換;完成後選擇「檢查」。提示:可先以覆蓋 informative 位點最多的 read 作為暫定基準,再比較其他 read。

做完之後,注意三件事:

  • 有一條 read 在此練習中無法可靠指派 —— 它沒有覆蓋任何 informative het 位點,因此保持未標記即可。 若該 read 另帶有 somatic signal,才可能在後續流程中進入 HP3 類別;一般 untagged read 不等於 HP3。
  • 示例中有一個錯誤鹼基(檢查後會被圈出來)。該 read 在其他位點仍可能呈現一致 pattern, 因此可根據多個位點的整體證據進行分群,但此方法不保證修正所有錯誤。
  • HP1 與 HP2 整體互換仍可表示相同的相對 phasing。原因見下方說明。

cis 與 trans

phasing 的產物就是回答「兩個變異的相對位置」:

  • :在同一條 haplotype 上;藥物或功能影響需依特定 EGFR 變異與研究證據判定
  • :分屬兩條 haplotype

phase set 與 switch error

phasing 可能因缺乏重疊 read 或 informative 位點而中止,形成新的 。 VCF 用 PS 欄位標示每個 block。

是常見的 phasing 錯誤類型:自某一位置起,演算法將兩條 haplotype 的標籤對調。 它可能發生在 het 位點稀疏、read 重疊不足或證據歧義較高的區域。

phase block 的中止與 switch error 示意 上排:可區分兩條 haplotype 的位點與 read 重疊充分時,可能形成較長的 phase block。 中排:若中間缺乏可用位點或重疊 read,兩側可能形成獨立 block;兩個 block 的 HP1/HP2 方向彼此獨立。 下排:證據不足或存在歧義時可能發生 switch error,表現為某一位置後的相位標籤反轉;錯誤範圍取決於工具與資料品質。 染色體位置 → ① 位點與 read 重疊充分 → 較長的 block 一個 phase block(PS 相同) ② 中間缺乏可用位點 → 可能形成兩個 block 此區段缺乏 可區分位點 block 1 block 2 無法可靠連結 兩個 block 的 HP1/HP2 方向彼此獨立 —— 左邊的 HP1 不一定對應右邊的 HP1。 ③ 證據不足或有歧義 → 可能發生 switch error 此處起相位標籤可能反轉 switch 後的標籤可能持續錯置
三種狀況。① 位點密度與 read 重疊足夠時,可形成較長的 phase block。② 中間缺乏可用位點或重疊 read,兩側可能形成獨立 block;兩個 block 的 HP1/HP2 方向彼此獨立,左側 HP1 不一定對應右側 HP1。③ 證據不足或存在歧義時可能發生 switch error,該位置後的相位標籤可能反轉。

LOH 對 phasing 的限制

可能減少可用的 heterozygous 錨點,使 phasing 變弱或分段;LOH 可為部分、copy-neutral 或 subclonal, 未必使所有位點都變成 homozygous。缺乏 informative 位點時,跨區域連結會變得不可靠。

不同工具對 LOH 的處理能力取決於 coverage、purity、LOH 型態與演算法。若 LongPhase-TO 能在特定條件下跨越 LOH, 應以相應 benchmark 與版本文件界定其適用範圍。

haplotagging:將 haplotype assignment 寫入 read

將 variant 的 haplotype assignment 寫入 VCF; 則將每條 read 的 assignment 寫入 BAM 的 tag。 之後可在 IGV 中依 haplotype 分組或著色顯示。

somatic haplotype 的延伸層級

到目前為止介紹的是標準 germline phasing。接著再說明 somatic haplotype 的延伸層級:

germline haplotype 與 somatic haplotype 的層級示意 上層是由 germline SNP 區分的 HP1 與 HP2。 中層示意帶有 somatic 變異且可判定來源的 read,可標為 HP1-1 或 HP2-1。 下層示意尚未能可靠判定 germline 來源、但帶有 somatic signal 的 read 可標為 HP3; 若同一 somatic allele 已有可靠的 haplotype assignment,流程可依條件重新分類部分 HP3 read。 第一層 germline haplotype 用 germline SNP(綠點)把 read 分成兩群 HP1 HP2 發生 somatic 突變 發生 somatic 突變 第二層 somatic haplotype 在 germline haplotype 基礎上再細分 圖示命名:來源 + 流水號 HP1-1 源自 HP1 的 somatic haplotype HP2-1 源自 HP2 的 somatic haplotype HP1-1-1 再累積一個 somatic assignment 第三層 無法判定來源的 read read 未涵蓋足夠的 germline informative SNP HP3 有 somatic signal,來源未定 它帶有 somatic signal,但缺乏足夠的 germline 錨點或其他判定證據, 因此尚無法可靠判斷源自 HP1 或 HP2。 依既有 assignment 重新分類 若同一 somatic allele 在其他 read 上已有可靠的 HP1-1 assignment, 可在條件成立時將部分 HP3 read 重新分類為 HP1-1。 圖示 LongPhase-S 流程的最後一步。
在 germline haplotype(HP1/HP2)下,帶有 somatic 變異且可判定來源的 read 可再細分為 HP1-1 與 HP2-1。尚未能可靠判定來源、但帶有 somatic signal 的 read 可先標為 HP3;若同一 somatic allele 已有可靠的 haplotype assignment,流程可依條件重新分類部分 HP3 read。
標籤意思
HP1 / HP2已指派至 germline haplotype 的 read,不表示只涵蓋 germline 變異
HP1-1帶有 somatic 變異,且可判定源自 HP1
HP2-1帶有 somatic 變異,且可判定源自 HP2
HP1-1-1在 HP1-1 之上再累積一個 somatic assignment;不應單獨解讀為已證實的 subclone
HP3帶有 somatic signal,但尚未能可靠判定源自哪一條 germline haplotype

若某個 somatic allele 在其他 read 上已有可靠的 HP1-1 assignment, 流程可在條件成立時將攜帶相同 allele 的部分 HP3 read 重新分類為 HP1-1;此步驟可能增加可用 read, 但也需評估相同 allele、mapping 與相位錯誤造成的誤分類風險。

真實證據

以下示範 germline phasing 與 haplotagging 指令:

# 1. 對 germline VCF 執行 phasing
longphase-s phase \
  -s SNP.vcf \
  -b alignment.bam \
  -r reference.fasta \
  -t 8 \
  -o phased_prefix \
  --ont

# 2. 依 phased VCF 將 read 標記為 HP tag
#    注意 -s 吃的是上一步的產物:phase 的 -o 給的是「前綴」,實際檔名是 <前綴>.vcf
longphase-s haplotag \
  -r reference.fasta \
  -s phased_prefix.vcf \
  -b alignment.bam \
  -t 8 \
  -o tagged_prefix

依目前版本,LongPhase-S 的 --ont--pb 參數要求與 LongPhase-TO 的處理方式不同。 LongPhase-TO 僅支援 ONT,某些不相容參數可能被接受但不產生預期效果;請依版本文件核對, 不要預期流程在所有版本都提示警告。

完成後,可在 IGV 中依 HP tag 分組,觀察 read 是否呈現 haplotype 分層。

判讀練習

在一段區域完成 haplotag 後,若有 30% 的 read 沒有 HP tag,請列出至少三個可能原因, 並說明可如何區分這些原因。

展開答案

可從以下方向逐一排查:

  • read 未覆蓋 informative het 位點 —— 沒有足夠的判斷依據,可能保持未標記。
  • 這段區域可能是 —— 若區段缺乏可用的 het 位點,read 的 haplotype assignment 會變得困難。 若未標記 read 集中於連續區段,應優先檢查 LOH、低複雜度或 coverage。
  • mapping quality 太低被濾掉 —— 以此版本設定為例,haplotag 預設 -q 1, 而 estimate_purity 預設為 -q 20;同一份資料用不同子命令可能得到不同結果。
  • 證據不夠一致 —— 在預設 -p 0.6 等門檻下,read 的 allele 若未明顯偏向某一條 haplotype, 工具可能保持未標記。
  • phase set 破碎 —— 若 phasing 本身就斷成很多小段,能用的錨點自然變少。

可先檢查未標記 read 是否集中在特定區域(優先檢查 LOH、低複雜度或 coverage), 或均勻散布(再檢查 read 長度、mapping quality 與參數設定)。

實作練習

執行 phasing 與 haplotagging

用上一節那兩道指令跑一次自己的資料(phase 產生 phased_prefix.vcfhaplotag 產生 tagged_prefix.bam)。 兩個步驟都完成後,再依下面三項檢查輸出。

以 IGV 檢查 haplotagging 結果

建議將 tagged_prefix.bam 載入 IGV,依序檢查以下項目:

  1. 在 read 上按右鍵 → Group alignments byphase(或 tag HP
  2. 前往一個 het 位點
  3. 在相位品質良好的區域,通常可觀察到 read 分成兩層,且同一層的 read 在該位點上呈現一致 allele pattern

這項可視化有助於理解 haplotype 分層。若分群不清,請檢查輸入 VCF、coverage、mapping quality、 phase set 與工具參數,不能僅憑單一區域判定 phasing 失敗。

量化 phasing 的品質

# phase block 的 contig+PS 鍵數;需搭配 block 長度與 switch error 評估
bcftools query -f '%CHROM\t[%PS]\n' phased_prefix.vcf | grep -v '\t\.$' | sort -u | wc -l

# 計算帶有 HP tag 的 read 比例
total=$(samtools view -c tagged_prefix.bam)
tagged=$(samtools view tagged_prefix.bam | grep -c 'HP:')
echo "標記率: $tagged / $total"

標記率沒有通用門檻可以照抄:它同時受 read 長度、heterozygous 位點密度、coverage、 平台與工具版本影響,同一份資料的不同區段也會不一樣。判讀方式是自己建立基線 —— 先看同一份資料在 het 位點密度正常的區段拿到多少,再拿可疑區段跟它比; 明顯偏低時才依上方「30% 沒有 HP tag」那份清單逐項排查。

學習檢核

本模組術語

HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
PS tag(phase set)
標示某群 variants 屬於同一 phase block 的編號。同一 PS 內的相位方向可相互比較;不同 PS 的 HP1/HP2 方向彼此獨立。
cis
兩個 variants 在同一條 haplotype 上。
haplotagging
根據已 phase 好的 variants,把每一條 read 指派到 HP1 或 HP2,並把結果寫回 BAM 的 HP tag。
heterozygous(異型合子)
在一般二倍體位點上,兩份 allele 不同(例如一份 A、一份 G)。此類位點可作為區分 haplotype 的資訊錨點;複雜拷貝數情況需另行解讀。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。
phasing(定相)
為可判定的 variants 建立其位於不同實體染色體拷貝上的相位關係;VCF 常以 0|1 等形式表示。長 read 可提供跨位點的分子層級觀測證據。
switch error
phasing 結果自某一位置起將兩條 haplotype 的方向對調,是常見的 phasing 錯誤類型。
trans
兩個 variants 分別在兩條不同的 haplotype 上。

模組 7 · Somatic variant calling: tumour–normal and tumour-only

Somatic variant calling:tumor–normal 與 tumor-only

說明配對正常樣本提供的個體基線,以及 tumor-only 分析在 germline 與技術性 artifact 判斷上的限制。

約 55 分鐘建議先修:Phasing

本模組學習目標

  • 說明配對正常樣本提供了什麼,以及沒有它時失去什麼
  • 區分本教材使用的 PON 與 GATK 語境中的 PoN,並說明兩者共同的涵蓋缺口
  • 說明為什麼 somatic 不等於「腫瘤 VCF 減掉正常 VCF」,並列出四個失準來源
  • 解釋 TINC 為什麼讓「normal 有訊號就排除」的規則失效
  • 說明 read-level 的 haplotype 分布為什麼可以在沒有正常樣本時提供替代證據

為什麼重要

本模組比較兩種分析設計:有配對正常樣本的 tumor–normal(TN)模式, 以及只有腫瘤樣本的 tumor-only(TO)模式。是否有 matched normal 會改變可用的對照證據與不確定性。

差異不只是少一個輸入檔案;它會改變可辨識的變異類型與後續判讀方式。

概念與互動

同一批 read,兩種對照,兩種輸出

先把整件事放在一張圖裡。下圖的上下兩排腫瘤 read 完全相同—— 同樣六條 read、同樣四個候選位置。唯一改變的是右邊拿什麼當對照:

同一批腫瘤 read,有配對正常組織與只有腫瘤時的判定差別 上下兩排的腫瘤 read 完全相同:六條 read、四個候選位置。位置 ① 與 ③ 是這個人天生就有的 germline 變異,② 是定序 artifact,④ 是真的 somatic 變異。 上排有配對的正常組織:① 與 ③ 在正常組織裡都看得到,所以都排除,輸出只剩 ④。 下排沒有正常組織,改查族群資料庫:① 的族群等位基因頻率 0.31,高於資料庫收錄門檻 0.001, 查得到所以排除;③ 的頻率只有 0.0002,低於門檻,資料庫裡沒有這一筆,因此被留下來成為假陽性。 兩排的差別只有一個位置,而那個位置的成因是「族群裡常見」與「這個人有」不是同一件事。 位置 ② 兩排都靠 read 的分布排除,與有沒有正常組織無關: 支持 ① 與 ③ 的是同三條 read,支持 ④ 的兩條也在這三條裡面, 但支持 ② 的兩條分屬兩群不同的 read,與同一次突變的來源應該一致不符。 ① ③ germline 變異(天生就有) ② 定序 artifact ④ 真 somatic 變異 顏色是給讀者看的答案,程式看不到 有配對的正常組織 —— tumour–normal(TN) ① 腫瘤樣本的 read ref T A G G G C T G G A T A G A T A T A G G T C G G T A G G 四個位置都跟參考不一樣,全部列為候選。 ①③ 各 3 條支持;② 的 2 條散在兩群。 ② 對照:這個人自己的正常組織 T A G G G A T G G A T G T A G G T A G G ① ③ 在這裡也看得到 → 兩個都排除 ④ 都沒有 → 保留;② 靠 read 分布排除 ③ 輸出 留下來的候選 ④ 真 somatic 已排除 ① ② ③ 輸出裡沒有假陽性 沒有配對正常組織 —— tumour-only(TO) ① 完全相同的腫瘤 read ref T A G G G C T G G A T A G A T A T A G G T C G G T A G G 同一批 read、同一批候選。 唯一改變的是右邊拿什麼當對照。 ② 對照:公開族群資料庫 每個候選在族群中的等位基因頻率 ✓ 排除 不在資料庫裡 → 由 read 分布排除 ✗ 未收錄,留下來 不在資料庫裡 → 但 read 分布支持它 0.0001 0.001 0.01 0.1 1 虛線=資料庫的收錄門檻(af-ge-0.001) ③ 輸出 留下來的候選 ④ 真 somatic ③ 私有 germline 已排除 ① ② 多了一個假陽性 兩排的差別只有位置 ③ —— 它是這個人自己的 germline 變異,族群裡幾乎沒人有,所以查不到; 配對的正常組織查得到,因為那份對照就來自同一個人。位置 ② 兩排都靠 read 的分布排除,跟有沒有 normal 無關。
上排用這個病人自己的正常組織,下排改查公開族群資料庫。輸出的差別只有位置 ③ —— 那是這個人自己的 germline 變異,族群裡幾乎沒人有,所以資料庫查不到,於是被留下來變成假陽性。位置 ② 兩排都靠 read 的分布排除,跟有沒有正常樣本無關。圖上的顏色是給讀者看的答案,程式看不到。

請注意這張圖真正的重點:位置 ① 與 ③ 都是這個人天生就有的 , 在腫瘤樣本裡長得一模一樣(各三條支持、VAF 都是 0.5)。它們的命運不同, 不是因為變異本身有什麼差別,而是因為資料庫知不知道它

位置 ④ 兩種模式都留得住,那是我們要的 。 caller 產生的是 ,還不是最終答案;本教材以 作為 (TN)calling 的範例,(TO)則以 ClairS-TO 為例, 實際輸入與過濾流程請依版本文件確認。

沒有正常組織時,改用什麼當對照

在部分臨床或研究情境,matched normal 可能因成本、檢體量或取得條件而缺失。 替代方案是公開的族群資料庫:利用 allele frequency 與已知變異紀錄提供 germline 線索。 本教材在 LongPhase-TO/ClairS-TO 情境中將這組集合稱為 (population database set), 它包含 1000 Genomes、gnomAD、dbSNP、CoLoRSdb 等來源。

上圖下排的橫軸就是這件事的關鍵。資料庫有一個收錄門檻—— 實際下載的檔名裡寫著 af-ge-0.001,意思是只收頻率 0.001 以上的位點。 位置 ① 的族群頻率 0.31,遠高於門檻,查得到;位置 ③ 只有 0.0002,落在門檻左邊, 資料庫裡根本沒有這一筆。「族群常見」與「這個人有」不是同一件事,缺口就從這裡來。

在 GATK Mutect2 語境,PoN 通常指由多個正常樣本建立的 recurrent-artifact panel。 名稱相同、內容不同 —— 而且更重要的是,這兩種資料各守住一個方向,中間會留下一格:

兩種叫做 PON 的資料各守一個方向,中間留下一格涵蓋不到 把候選變異放在兩個軸上:橫軸是這個變異在族群中的等位基因頻率,縱軸是它在多份正常樣本中 反覆出現的程度。族群資料庫(1000G、gnomAD、dbSNP、CoLoRSdb)能排除的是右半邊:族群中常見的 germline 變異。GATK Mutect2 的 recurrent-artifact PoN 能排除的是上半邊:在很多正常樣本裡 反覆出現的技術性 artifact。左下角那一格兩者都涵蓋不到,而那一格裡同時住著三種東西 —— 這個人私有的 germline 變異、沒見過的 artifact,以及我們真正想找的 somatic 變異。 因為它們在這兩個軸上的座標一樣,任何靠查表的方法都分不出來。 兩種叫做「PON」的資料,各守住一個方向 罕見 常見 橫軸:這個變異在族群中的等位基因頻率 縱軸:在多份正常樣本中反覆出現的程度 GATK PoN 涵蓋 (反覆出現的技術性 artifact) 族群資料庫涵蓋 (常見 germline) 兩種資料都涵蓋不到 反覆出現的 artifact 族群常見 germline 這個人私有的 germline 沒見過的 artifact 真的 somatic 變異 左下角那一格裡有三種東西 這個人私有的 germline 族群裡幾乎沒人有,所以資料庫沒收錄 沒見過的 artifact 沒有人統計過它,所以 PoN 裡也沒有 真的 somatic 變異 它是新長出來的,本來就不會在任何資料庫裡 三者在這兩個軸上的座標一樣。 所以「再多加幾個資料庫」不會把它們分開。 要把這一格拆開,必須換一個軸 —— 不再問「這個位置別人有沒有」, 而是問「支持它的那些 read,彼此的結構是否像一次真的突變」。這就是 read-level 證據要做的事。
橫軸是族群頻率,縱軸是在多份正常樣本中反覆出現的程度。族群資料庫排除右半邊,GATK 的 recurrent-artifact PoN 排除上半邊,左下角那一格兩者都涵蓋不到 —— 而那一格裡同時住著這個人私有的 germline、沒見過的 artifact,以及我們真正要找的 somatic 變異。因為三者在這兩個軸上座標一樣,再多加幾個資料庫也不會把它們分開。

下方元件用同一組候選點數一次數量,看 precision 怎麼掉下來:

互動元件(列印版保留說明;數位版可操作)
注意不是所有候選都受到同樣影響。符合資料庫條件的常見 germline 變異通常仍可被標記;private germline 與未被收錄的 artifact 可能保留為額外候選,需以其他證據判讀。

TN calling 也不是把兩個 VCF 相減

前面那張圖為了講清楚缺口,把 TN 流程畫得很乾淨:normal 有訊號就排除。 實務上不能這樣做,而且失準的地方在配對正常樣本時就已經發生:

為什麼 somatic 不等於「腫瘤 VCF 減掉正常 VCF」 四種機制會讓「兩個 VCF 相減」的直覺失準。 一、正常樣本裡混進了腫瘤 DNA,真的 somatic 變異在正常樣本中也會出現低頻支持, 照「有訊號就刪」的規則會刪掉真答案。 二、正常樣本的深度通常比腫瘤低;就算真有低頻訊號,25× 下期望只有 0.5 條 read, 看到 0 條的機率約六成,所以「沒看到」多半只是深度不夠。 三、germline 變異的 VAF 不是固定 0.5:少一份拷貝會往上偏,多一份會往下偏, 所以不能用固定門檻判斷是不是 germline。 四、兩邊的 caller 各自都會漏報;正常樣本漏掉一個 heterozygous 位點,差集就會多留一個 germline。 常見但不成立的直覺 腫瘤 VCF 正常 VCF = somatic 這個等式不成立 下面四件事都會讓它失準 —— 而且前兩件在配對正常樣本時就已經發生: ① normal 有訊號 ≠ 不是 somatic 少數 read 也帶了這個變異 因為正常組織裡本來就混了 一點腫瘤細胞(TINC) 照「有訊號就刪」 會刪掉真的 somatic ② normal 沒訊號 ≠ 真的沒有 兩邊的深度本來就不一樣 腫瘤 正常 50× 25× 若正常樣本混入 4% 腫瘤 DNA: somatic 的 normal VAF ≈ 0.02 25× × 0.02 ≈ 0.5 條 read 看到 0 條的機率約 60% 「沒看到」多半只是 深度不夠,不是證據 ③ VAF 不是 0.5 ≠ 不是 germline 同一個 germline 變異: 兩份都在 少一份 多一份 0 0.5 1 VAF 少一份=LOH;多一份=擴增 固定門檻會把偏掉的 germline 誤判成 somatic ④ 兩邊的 caller 都可能漏報 腫瘤 VCF 正常 VCF 虛線那一行是漏掉的 heterozygous 位點 差集就會多留一個 germline 當成 somatic 四件事的共同點:「有沒有訊號」是二元的,但底下的證據是連續的。 所以配對模式仍然需要一整套機率與品質過濾,而不是一個減法。
四個失準來源。① 正常組織裡本來就混了一點腫瘤細胞,真 somatic 在 normal 也會有低頻支持。② 正常樣本的深度通常只有腫瘤的一半;就算真有低頻訊號,25× 下期望只有 0.5 條 read,看到 0 條的機率約六成。③ germline 的 VAF 不是固定 0.5,copy number 會把它推上去或拉下來。④ 兩邊的 caller 各自都會漏報。共同點是:「有沒有訊號」是二元的,底下的證據卻是連續的。

TINC:normal 裡的訊號強度說明三種不同的事

第一項值得單獨看一次,因為它最容易被寫成錯的規則。下圖三欄的腫瘤樣本完全相同 (24 條 read、6 條帶變異、VAF 都是 0.25),差別只在配對正常樣本裡有幾條:

同一個位置,在配對正常樣本裡看到訊號,有三種完全不同的意思 三欄的腫瘤樣本完全相同:24 條 read 裡有 6 條帶變異,VAF 都是 0.25。 差別只在配對正常樣本。左欄正常樣本一條都沒有,這是最單純的 somatic。 中欄正常樣本有 1 條,VAF 0.04 —— 這是正常組織裡混進了腫瘤細胞(tumour-in-normal contamination),變異仍然是 somatic,但「normal 有訊號就排除」的規則會把它刪掉。 右欄正常樣本有 12 條,VAF 0.50,那是 heterozygous germline 該有的樣子,應該排除。 所以判斷依據不是「normal 有沒有訊號」,而是「訊號有多強」,需要一個門檻; 門檻放得太低會刪掉被污染樣本裡的真 somatic,放得太高會留下 germline。 同一個位置,normal 裡的訊號強度說明三種不同的事 ① 乾淨的正常樣本 normal 完全沒有訊號 腫瘤樣本 24 條 read tumour VAF = 6/24 = 0.25 配對正常樣本 24 條 read normal VAF = 0/24 = 0.00 保留為 somatic 候選 腫瘤有、正常沒有 —— 這是最單純的情況 ② 正常樣本被腫瘤污染 normal 有一點訊號 腫瘤樣本 24 條 read tumour VAF = 6/24 = 0.25 配對正常樣本 24 條 read normal VAF = 1/24 = 0.04 仍然是 somatic 0.04 遠低於 germline 的 0.5 這是污染,不是遺傳 ③ 這其實是 germline normal 有一半訊號 腫瘤樣本 24 條 read tumour VAF = 6/24 = 0.25 配對正常樣本 24 條 read normal VAF = 12/24 = 0.50 判為 germline,排除 0.50 就是 heterozygous germline 該有的樣子 判斷依據不是「有沒有」,是「有多強」 0 0.25 0.5 0.75 1 normal 樣本在這個位置的 VAF 門檻 T 保留 排除 門檻放在哪裡是取捨:放太低會刪掉被污染樣本裡的真 somatic,放太高會留下 germline。
normal VAF 0.00 是最單純的 somatic;0.04 是正常組織裡混進了腫瘤細胞,變異仍然是 somatic;0.50 才是 heterozygous germline 該有的樣子。所以判斷依據不是「normal 有沒有訊號」,而是「訊號有多強」—— 需要一個門檻,而門檻放太低會刪掉被污染樣本裡的真 somatic,放太高會留下 germline。

VAF 可作為輔助訊息,但實際值取決於 purity、copy number、zygosity、multiplicity、 clonality 與 depth(完整關係式見 M8)。因此不能只用「有沒有訊號」或單一固定門檻判定。

沒有正常組織時,還剩下什麼證據

回到那張 涵蓋不到的左下角。要把住在同一格裡的三種東西分開, 必須換一個問法:不再問「這個位置別人有沒有」,而是問「支持它的那些 read,彼此的結構像不像一次真的突變」

真的變異一定是從某一條既有的 上長出來的,所以支持它的 read 應該集中在一條 haplotype 上。如果同一個「變異」的支持 read 分散在兩條染色體上, 那等於同一個位置各獨立突變了一次 —— 機率極低,更像比對或定序造成的問題:

沒有正常組織時,改看支持 read 落在哪一條 haplotype 上 兩欄的支持 read 總數刻意設成完全一樣:12 條 read 裡有 4 條帶著這個候選變異, VAF 都是 0.33。光看數量分不出來,要看這 4 條落在哪裡。 左欄的 4 條全部同時帶著 HP1 的 germline allele,也就是這個變異只出現在一條染色體上 —— 跟「一次體細胞突變從一條既有 haplotype 長出來」相容。 右欄的 4 條有 2 條帶 HP1 的 allele、2 條帶 HP2 的 allele,等於同一個位置在兩條染色體上 各獨立發生了一次一樣的突變,機率極低,更像比對或定序造成的問題。 這個判準不需要配對正常樣本,只需要同一條 read 上同時看得到 germline 錨點與候選位置, 所以它是 long read 才拿得到的證據。但它有例外:真的發生兩次獨立突變,或 phasing 本身出錯時, 判斷都會失效,因此只能作為補充證據。 兩邊的支持 read 一樣多 —— 分得出來的是它們的分布 同一條 long read 上同時看得到 germline 錨點與候選位置,才問得出「這個變異在哪一條上」。 真的 somatic 變異 4 條支持 read 全在 HP1 germline 錨點 候選位置 germline 錨點 T A C T A C T A C T A C T G C T G C G G A G G A G G A G G A G G A G G A HP1 HP2 6 條 6 條 支持這個候選的 read:4 條,VAF = 4/12 = 0.33 其中 HP1:4 條  HP2:0 條 所有支持 read 都在同一條 haplotype 上 一次體細胞突變只會發生在一條染色體上, 所以這個分布跟真的 somatic 相容。 定序或比對造成的 artifact 4 條支持 read 分散在兩條上 germline 錨點 候選位置 germline 錨點 T A C T G C T G C T A C T G C T G C G G A G A A G G A G G A G A A G G A HP1 HP2 6 條 6 條 支持這個候選的 read:4 條,VAF = 4/12 = 0.33 其中 HP1:2 條  HP2:2 條 同一個變異同時出現在兩條 haplotype 上 同一個位置在兩條染色體上各突變一次的機率極低, 更像是比對或定序造成的問題。 這個判準不需要配對正常樣本,只需要 read 夠長 —— 所以它是 tumour-only 拿得到的替代證據。 但它有例外:真的發生兩次獨立突變,或 phasing 本身出錯時都會失效,所以只能當補充證據。 LongPhase-S 把它實作成 read-level 與 haplotype origin 兩個過濾器,門檻與細節見 M12。
兩欄的支持 read 總數刻意設成一樣(12 條裡 4 條,VAF 都是 0.33),因為重點正是「光看數量分不出來」。左欄 4 條全在 HP1;右欄 2 條在 HP1、2 條在 HP2。這個判準不需要配對正常樣本,只需要 read 夠長到同時蓋住 germline 錨點與候選位置 —— 所以它是 long read 才拿得到的證據。
實作對照:LongPhase-S 與 LongPhase-TO

這個想法在兩個工具裡有不同的實作:LongPhase-S 做成 read-level 與 haplotype origin 兩個過濾器(四個過濾器與各自的門檻見 M12);LongPhase-TO 把它擴展成三個位點的 ,用路徑結構判斷(見 M13)。

一句話總結

tumor-only 的核心困難

配對正常樣本提供的是這個人的 germline 對照;population database set 提供的是族群層級的 germline 證據。兩者不能互換:族群裡罕見的私有 germline 與尚未觀察到的 artifact 會落在資料庫的涵蓋範圍之外,成為額外候選,其中部分是 false positive。 補救的方向不是再加資料庫,而是改用 read-level 的連結結構、copy number、LOH 與品質等 不依賴「別人有沒有」的證據 —— 但這些都是補充證據,系統性 artifact 或 phasing error 仍會造成例外。

真實證據

TN calling 指令示範

docker run \
  -v ${INPUT_BAM_DIR}:${INPUT_BAM_DIR} \
  -v ${OUTPUT_DIR}:${OUTPUT_DIR} \
  -u $(id -u):$(id -g) \
  hkubal/clairs:v0.4.1 \
  /opt/bin/run_clairs \
  --normal_bam_fn ${INPUT_BAM_DIR}/normal.bam \
  --tumor_bam_fn  ${INPUT_BAM_DIR}/tumor.bam \
  --ref_fn ${INPUT_REF_DIR}/reference.fasta \
  --threads 64 \
  --platform ont_r10_dorado_sup_5khz_ssrs \
  --output_dir ${OUTPUT_DIR}

TO 模式:準備 population database set

mkdir PoN
BASE=http://www.bio8.cs.hku.hk/clairs-to/databases
wget -P PoN $BASE/gnomad.r2.1.af-ge-0.001.sites.vcf.gz
wget -P PoN $BASE/dbsnp.b138.non-somatic.sites.vcf.gz
wget -P PoN $BASE/1000g-pon.sites.vcf.gz
wget -P PoN $BASE/CoLoRSdb.GRCh38.v1.1.0.deepvariant.glnexus.af-ge-0.001.vcf.gz

注意:有些文件把資料夾變數寫成 PATH="PoN" 再使用 $PATH;這會覆寫 shell 的可執行檔搜尋路徑。此處改用 BASE, 實際參數仍應依工具版本文件核對。

四個檔案名稱(gnomaddbsnp1000gCoLoRSdb)都指向族群 germline 資料庫,與本教材的 population database set 定義一致;它不同於 GATK Mutect2 所稱的 recurrent-artifact PoN。 其中兩個檔名帶著 af-ge-0.001 —— 那就是前面那張圖裡的收錄門檻, 低於這個頻率的位點不在檔案裡,所以查不到。

haplotype-aware somatic indel calling 在不同 tumor DNA fraction 下的 F1、precision、recall
haplotype-aware recalibration 的效果。在此資料中,改善主要出現在 precision;若僅對既有候選進行後處理,通常可移除部分假陽性,但無法恢復 caller 未輸出的變異。

判讀練習

某個腫瘤樣本的一個位點有 50 條 read 覆蓋,其中 24 條支持 alt(VAF = 0.48), 且未被所使用的 population database set 涵蓋。

在 tumor-only 模式下,請列出需要檢查的證據與可能分類。

展開答案

VAF 約 0.5 且未被族群資料庫涵蓋時,可優先考慮 private germline, 但不能排除 somatic 或其他來源。

在簡化的 diploid、單拷貝模型下,somatic VAF 可近似為 purity/2; 較一般的模型還受 purity、multiplicity 與 total copy number 影響,並會受到 normal DNA、 clonality、mapping bias 與 depth 影響,因此不能單獨依 VAF 分類。

接著檢查這 24 條支持 read 的 haplotype 分布:如果幾乎全部落在同一條 haplotype 上,與「真的變異」相容(private germline 或 somatic 都會這樣);如果大致均分在兩條上, 更像 artifact —— 因為那等於同一個位置各自獨立突變了一次。此外還要看 copy number、LOH、品質與獨立證據。

要注意這個判準本身是理想化的:實務資料不會這麼乾淨, 系統性 artifact 或 phasing error 都會造成例外,所以它是提高或降低疑慮,不是定案。 前面提到的三位點路徑結構()就是為了讓這個判準更穩健: 左右鄰居都要對得上,才算得出「跟某一條既有 haplotype 只差候選這一格」的那條路徑。

實作練習

比較兩種 calling 設計的結果

此練習比較 paired 與 tumor-only 的輸出差異。若有配對資料,可在相同參考序列與 相近過濾設定下執行兩種模式,再比較結果:

# isec 要求 bgzip 壓縮+索引,少了索引會直接報錯
bcftools index -f paired.vcf.gz
bcftools index -f tumoronly.vcf.gz

# 配對模式找到、而僅腫瘤模式未找到的候選(數量依資料與設定而異)
bcftools isec -C paired.vcf.gz tumoronly.vcf.gz | wc -l

# 僅腫瘤模式多出的候選(可能包含 private germline、artifact 或 paired caller 漏報)
bcftools isec -C tumoronly.vcf.gz paired.vcf.gz | wc -l

若檔案還是未壓縮的 .vcf,先 bcftools view -Oz -o out.vcf.gz in.vcf 轉成 bgzip 格式再建索引;一般的 gzip 壓出來的檔案 bcftools index 不接受。

檢查多出來的候選是什麼

上面第二條指令的輸出,就是本模組那張圖裡的位置 ③。逐項檢查它們:

下面第 2 步先講一件事再看指令:HP 標籤的型別依工具而異。 longphase-s haplotag 寫的是整數 HP:i:somatic_haplotag 與整個 longphase-to 寫的是字串 HP:Z:。 只 grep 其中一種,另一種資料會安靜地數出 0,所以下面用 HP:[iZ]: 同時涵蓋兩者。

# 1) 在配對正常樣本裡數這個位置的 ref/alt read —— 接近一半提示 private germline
#    第 5 欄是每條 read 在該位置讀到的字母,可以直接數(. 與 , 代表與參考相同)
samtools mpileup -f reference.fasta -r chr1:1000000-1000000 normal.bam

# 想要精確數字而不是用眼睛數,讓 bcftools 把 AD 欄挖出來
bcftools mpileup -f reference.fasta -r chr1:1000000-1000000 -a AD normal.bam \
  | bcftools query -f '%POS\t%REF\t%ALT\t[%AD]\n'

# 2) 支持 read 落在哪一條 haplotype 上
#    haplotag 過的 BAM 裡直接數 HP 標籤;兩邊都有支持就要提高疑慮
samtools view tumor.haplotagged.bam chr1:1000000-1000000 \
  | grep -oE 'HP:[iZ]:[12]' | sort | uniq -c

第 1 步的兩道指令是同一件事的兩種讀法:samtools mpileup 給的是可以用眼睛看的 pileup 字串,bcftools mpileup 給的是 VCF —— 後者預設帶 allele depth, 所以要加 -a AD 才數得出來。

兩項要合起來看。VAF 接近 0.5 可提示 private germline, 但仍需排除污染、比對偏差與其他模型不確定性;haplotype 分布可提示 artifact, 但真的兩次獨立突變或 phasing error 都會造成例外。沒有單一證據可以定案。

學習檢核

原始文獻與程式碼

  • ClairS(tumour-normal):ClairS: a deep-learning method for long-read somatic small variant calling,bioRxiv,2023。程式碼在 github.com/HKU-BAL/ClairS
  • ClairS-TO(tumour-only):ClairS-TO: a deep-learning method for long-read tumor-only somatic small variant calling,Nature Communications,2025。程式碼在 github.com/HKU-BAL/ClairS-TO
  • DeepSomatic:Accurate somatic small variant discovery for multiple sequencing technologies with DeepSomatic,Nature Biotechnology,2025。程式碼在 github.com/google/deepsomatic

本模組術語

ClairS
配對 tumor–normal 的 somatic variant caller。tumor-only 版本叫 ClairS-TO。
DeepSomatic
Google 的 somatic variant caller,同樣有 tumor-only 版本。
PON(正常樣本面板/族群資料庫(依流程而異))
PON 依分析流程有兩種用法,兩者不可互換:本教材的 tumor-only 流程以它指稱 population germline database set(如 1000G、CoLoRSdb、dbSNP、gnomAD 的聯集);GATK Mutect2 的 Panel of Normals(PoN)則由多個正常樣本建立,用來標記反覆出現的技術性 artifact。兩者都不能完全取代同一病人的 matched normal。
TINC(腫瘤污染正常樣本)
Tumour-in-normal contamination:配對正常樣本含有腫瘤來源訊號,使 genuine somatic 變異也可能在 normal 中被觀察到,因而可能被錯誤過濾。
candidate(候選變異)
caller 提出、但尚未被確認的變異位點。本實驗室多數工具位於 caller 之後,進行再校正,處理的就是這些 candidates。
copy number(拷貝數)
某段基因體在細胞內的拷貝數。多數正常常染色體區段為 2,可再分為 major 與 minor allele copy number。
germline variant(生殖系變異)
在生殖系形成、通常存在於多數細胞的變異;可遺傳給子代,但不代表必然傳遞。
haplotype(單倍型)
同一條實體染色體拷貝上,具有一致相位的一組 alleles 或 variants。HP1 與 HP2 是任意的相對標籤。
somatic variant(體細胞變異)
在非生殖系細胞譜系中、通常於受精後取得的變異;可只存在於部分細胞,通常不由親代遺傳給子代。癌症基因體學常分析此類變異。
triplet graph
LongPhase-TO 判斷候選變異真假時用的最小結構:候選位置加上左右各一個變異,共三個位置。把 read 上看到的 allele 組合畫成路徑後,真的 somatic 變異會形成一條「跟某一條 germline haplotype 只差候選這一格」的新路徑;定序錯誤則湊不出一致的路徑。因為左右兩側都要對得上,所以三個位置是最小單位。
tumour-normal(配對腫瘤/正常)
同時定序病人的腫瘤與正常組織;正常樣本提供個體 germline 背景,有助於辨識 somatic 候選。
tumour-only(僅腫瘤)
只有腫瘤樣本、沒有配對正常樣本。在成本或檢體受限時很常見,但少了 germline 對照,分析難度會大幅提高。

模組 8 · Tumour mixtures

腫瘤樣本的混合組成

說明 purity、DNA fraction、ploidy、copy number、multiplicity、LOH 與 TINC 如何影響變異判讀,並檢視簡化模型的適用範圍。

約 75 分鐘建議先修:Somatic variant calling

本模組學習目標

  • 寫出 VAF、purity、copy number 與 multiplicity 之間的關係式,並說明每一項的角色
  • 區分 tumor cellular purity 與 tumor DNA fraction,並說明兩者何時產生差異
  • 區分 copy-loss LOH 與 copy-neutral LOH,並說明為什麼只看 coverage 會漏掉後者
  • 解釋為什麼低 purity 讓 somatic calling 變困難

為什麼重要

到目前為止,「腫瘤樣本」在流程裡就是一袋 read。但那袋 read 來自一堆混在一起的細胞: 有癌細胞,也有正常細胞;癌細胞之間彼此也不完全相同;而且同一個位置在不同細胞裡可能有不同的 DNA 份數。

結果就是:同一個觀測到的數字,可以由好幾種不同的細胞組成算出來。 所以這一章的第一件事,是把 purity、copy number、multiplicity、CCF 這幾個名詞各自「在數什麼」講清楚 —— 它們常被混用,而混用會直接讓結論出錯。

概念與互動

先把名詞跟「在數什麼」對起來

這些名詞看起來很多,但它們其實只做一件事:在不同層級上數東西 數的是細胞 數的是一個細胞裡有幾份 DNA 數的是read。搞混它們,通常就是搞混了分母。

下面用一個玩具檢體把三層對齊:10 個細胞,其中 6 個是腫瘤細胞, 腫瘤細胞裡有 3 個帶著我們要看的那個突變,每個細胞在這個位置都有 2 份 DNA。

purity、CCF、copy number、multiplicity 與 VAF 各自在數什麼 用同一個玩具檢體(10 個細胞、每個細胞在這個位置有 2 份 DNA)把五個名詞對齊在三個計數層級上。 細胞層:purity 是腫瘤細胞佔全部細胞的比例,6 除以 10 等於 0.6; CCF 是帶有這個突變的腫瘤細胞佔全部腫瘤細胞的比例,3 除以 6 等於 0.5,兩者的分母不同。 拷貝層:copy number 是一個細胞在這個位置有幾份 DNA,此例為 2; multiplicity 是突變坐落在其中幾份,此例為 1;ploidy 是整個基因體平均的 copy number。 整個檢體在這個位置共 20 份 DNA,腫瘤細胞貢獻 12 份、正常細胞貢獻 8 份,其中 3 份帶突變。 read 層:VAF 是帶變異的 read 佔全部 read 的比例,3 除以 20 等於 0.15, 也是這五個數字中唯一可以由定序資料直接數出來的。 由上往下計算答案唯一,但由 VAF 往上反推並不唯一。 另外提醒:一條 read 是一個 DNA 分子,不是一個細胞,同一個細胞會給出很多條 read。 這一章的名詞,其實是在三個不同層級上數東西 玩具檢體:10 個細胞,每個細胞在這個位置有 2 份 DNA ① 細胞層 數的是「細胞」 腫瘤細胞 6 個 正常 4 個 實心小點=帶有這個突變(3 個) purity 腫瘤純度 腫瘤細胞 ÷ 所有細胞 6 ÷ 10 = 0.6 CCF 癌細胞比例 帶突變的腫瘤細胞 ÷ 腫瘤細胞 3 ÷ 6 = 0.5 兩個分數的分母不一樣 ② 拷貝層 數的是「DNA 份數」 一個細胞 2 份,1 份帶突變 腫瘤細胞 12 份 正常 8 份 整個檢體 20 份,3 份帶突變 copy number 拷貝數 這個位置有幾份 → 這裡是 2 multiplicity 佔幾份 突變在其中幾份 → 這裡是 1 ploidy 倍性 整個基因體平均的拷貝數 ③ read 層 數的是「read」 20 條 read,3 條帶變異 VAF = 3 ÷ 20 = 0.15 VAF 變異等位基因頻率 帶變異的 read ÷ 全部 read 唯一能直接數出來的一層 read 不等於細胞 一條 read 是一個 DNA 分子 同一個細胞會給出很多條 由上往下算,答案唯一;由下往上反推,答案不唯一。 腫瘤佔 0.6、其中一半帶突變、每個細胞 2 份裡有 1 份帶突變 → VAF 一定是 0.15。 但只拿到 VAF = 0.15 時,上面兩層有很多組合都能算出同一個數字。
同一個檢體、同一個位置,三層各自的分子與分母。 注意 purity 的分母是所有細胞,CCF 的分母只有腫瘤細胞 —— 這是最常被互換的一對。 最右邊那層是唯一能從資料直接數出來的:20 條 read 裡有 3 條帶變異,VAF = 0.15。

這張圖裡有兩件事值得停下來看。

第一,方向是不對稱的。給定上面兩層,VAF 只有一個答案 —— 腫瘤佔 0.6、其中一半帶突變、每個細胞 2 份裡帶 1 份,算出來就是 0.6×0.5÷2=0.15。 但拿著 VAF=0.15 往上反推,會有很多組合都成立。整章的難處都在這個不對稱上。

第二,read 不是細胞。一條 read 是一個 DNA 分子,同一個細胞會貢獻很多條 read, 而且哪一條 read 來自哪個細胞在 bulk 資料裡查不到。所以「數 read」永遠只是「數細胞」的間接代理。

copy number、multiplicity 與 ploidy:一個位置有幾份

中間那層最容易被跳過,但它是後面所有推論的地基。三個詞的差別很小、影響很大: copy number 是「這一段在一個細胞裡有幾份」,multiplicity 是「其中幾份帶著這個突變」, 是「把整個基因體的 copy number 平均起來」。

為什麼要分這麼細?因為同一個突變、同樣「每個腫瘤細胞都有」, 只要拷貝狀態不同,VAF 就完全不同:

copy number、multiplicity 與 ploidy 的差別,以及它們如何改變 VAF 四格比較同一個位置在不同拷貝狀態下的樣子,四格都假設檢體全是腫瘤細胞且所有腫瘤細胞都帶有這個突變。 正常細胞:兩份,沒有突變。 腫瘤細胞情況一:兩份、突變佔一份,VAF 為二分之一。 腫瘤細胞情況二:帶突變的那一份被複製,變成三份、突變佔兩份,VAF 升為三分之二。 腫瘤細胞情況三:另一份整條遺失,只剩一份且帶突變,VAF 升到一,這就是 copy-loss LOH。 因此同一個突變在不同拷貝狀態下會給出完全不同的 VAF。 下半部說明 ploidy 與 copy number 的差別: copy number 是某一段的份數,沿基因體會變動;ploidy 是把整個基因體的 copy number 平均起來的值。 同一個突變,落在不同的拷貝狀態上,VAF 就不一樣 下面四格都假設:檢體全是腫瘤細胞,而且每個腫瘤細胞都帶有這個突變。差別只在拷貝狀態。 正常細胞 copy number = 2 multiplicity = 0 VAF = 0 這個位置沒有突變 腫瘤細胞 ① copy number = 2 multiplicity = 1 VAF = 1 ÷ 2 = 0.50 最單純的情況 腫瘤細胞 ② copy number = 3 multiplicity = 2 VAF = 2 ÷ 3 = 0.67 帶突變的那份被複製了 腫瘤細胞 ③ 已遺失 copy number = 1 multiplicity = 1 VAF = 1 ÷ 1 = 1.00 另一條整條掉了 copy number 是「某一段」的份數;ploidy 是「整個基因體」的平均 沿著基因體看,每一段的 copy number 可能都不一樣: 2 1 3 4 2 ← 基因體位置 → 把上面這條曲線沿長度平均起來 ≈ 2.3,這就是這個腫瘤的 ploidy(正常細胞是 2)。
四格都假設檢體全是腫瘤細胞、而且每個細胞都帶有這個突變 —— 唯一的差別是拷貝狀態。VAF 從 0.50 變成 0.67 或 1.00,不是因為突變變多了, 是因為它所在的那份 DNA 被複製了,或另一份被丟掉了(那正是 copy-loss )。 下半部區分 copy number(某一段的份數)與 ploidy(整個基因體的平均)。

把「腫瘤細胞佔多少」「一個細胞有幾份」「突變佔幾份」「多少腫瘤細胞帶著它」四件事寫進同一個式子, 就是下一節的關係式。

VAF 的完整關係式

M1 使用了簡化情境:「purity=0.5、樣本為 diploid,且每個腫瘤細胞帶有一份變異拷貝,因此 VAF 為 0.25」。在一般情況下,關係式為:

VAF=purity×multiplicity×CCFpurity×totalCN+(1purity)×2
模型假設:這條 VAF 關係式何時成立

正常細胞的拷貝數設為 2,tumor totalCN 在此位置可代表腫瘤群體,且 read depth 與 DNA 量近似成正比; 實務上仍需考慮 allele-specific copy number、mapping/定序偏差與估計不確定性。

符號意思是否可直接觀測
purity通常需估計
totalCN該位置的 (整體平均值即 通常需估計
multiplicity通常需推論
CCF通常是分析所要估計的目標
VAF支持 alt 的 read 比例可由 reads 估計
VAF 的組成與參數不可識別性 上半部拆解 VAF 的分子與分母。 分母是這個位置上總共有幾份 DNA 被讀到, 由腫瘤細胞貢獻的份數加上正常細胞貢獻的份數組成。 分子是其中帶有這個變異的份數。 下半部示範:同一個 VAF 0.20 可由多種生物狀態產生, 因此僅依 VAF 通常無法直接反推出帶有此突變的細胞比例。 VAF 定義為「帶變異的份數 ÷ 總讀取份數」 分子 帶有變異的份數 腫瘤細胞裡 × 每個細胞帶了幾份 × 有多少比例的腫瘤細胞帶著它 分母 總共讀到的份數 腫瘤細胞貢獻 正常細胞貢獻 腫瘤那邊的份數取決於 該位置有幾份染色體 VAF 可由 reads 估計;purity、copy number、multiplicity 與 CCF 通常需由多項證據推論: ① 腫瘤細胞佔多少比例 ② 該位置有幾份染色體 ③ 變異佔了幾份 ④ 多少比例的腫瘤細胞帶著它 同一個 VAF = 0.20,可由三種狀態產生 情況 A 腫瘤佔 40%,兩份染色體 所有腫瘤細胞都帶著它 → clonal 狀態(時間需其他證據) 情況 B 腫瘤佔 50%,三份染色體 突變佔一份,所有腫瘤細胞都有 → clonal 狀態(時間需其他證據) 情況 C 腫瘤佔 80%,兩份染色體 但只有一半的腫瘤細胞有 → subclonal CCF(時間需其他證據)
圖上方拆解分子與分母:分母是此位置讀到的 DNA 總量,由腫瘤與正常細胞共同貢獻;分子是其中帶有變異的份數。下方示範同一個 VAF 0.20 可由多種生物狀態產生,僅第三例具有 subclonal CCF。

VAF 是可由 reads 估計的觀測量;purity、totalCN、multiplicity 與 CCF 通常需由多項證據估計或推論。 這些參數之間存在可識別性限制,因此「估計腫瘤細胞比例」本身就是一個獨立的研究題目。

互動元件(列印版保留說明;數位版可操作)
先以 CN=2、multiplicity=1、CCF=1 作為基準,確認曲線為 purity 的一半;再將 total CN 調至 3 或 4,比較曲線與右側 tumor DNA fraction 和 cellular purity 的差異。可以順手驗算上圖:purity 0.50、total CN 3 時預期 VAF 顯示 0.200,與 purity 0.40、CN 2 得到的數字相同。

LOH 的常見機制及其可觀測差異

是「原本 heterozygous 的區域只剩下一種 allele」。 但其形成機制不只一種;以下比較兩類常見情形:

互動元件(列印版保留說明;數位版可操作)
比較四種狀態,並特別觀察 Copy-neutral LOH:在理想示意中 coverage 近似正常,但 heterozygosity 降低。
coverage(理想示意)heterozygosity僅依 coverage 是否可偵測
正常1
Copy-loss LOH1×(理想上減少一半)0通常可見
Copy-neutral LOH2×(理想上不變)0難以由 coverage 單獨辨識

低 purity 對 somatic variant detection 的影響

回到最上面那一層。purity 低的時候,突變本身沒有變少,但它在整池 DNA 裡被稀釋, 落到 read 上就只剩幾條支持:

tumor purity 越低,同一個突變在 read 上的訊號越淡 五個檢體帶有同一個 clonal、diploid 的 somatic 變異,每個腫瘤細胞在這個位置的兩份 DNA 中有一份帶突變, 差別只在腫瘤細胞佔的比例。 由左到右腫瘤細胞比例為五分之一到五分之五,對應的 VAF 依序為 0.10、0.20、0.30、0.40、0.50。 在十條 read 的示意圖中,帶變異的 read 數依序為一到五條。 換算到 50 倍覆蓋度,期望的支持 read 數依序為 5、10、15、20、25 條。 最左側以紅色底標示:purity 0.2 時只期望看到約五條支持 read, 與隨機定序錯誤偶然湊出的支持數量同一個量級,因此過濾參數必須隨 purity 調整。 purity 越低,同一個突變在 read 上的訊號就越淡 五個檢體帶有同一個 clonal 變異(腫瘤細胞的 2 份裡有 1 份帶突變),只有腫瘤細胞的比例不同。 purity 0.2 腫瘤 1 / 5 個 帶變異 1 / 10 條 VAF 0.10 50× 下約 5 條 purity 0.4 腫瘤 2 / 5 個 帶變異 2 / 10 條 VAF 0.20 50× 下約 10 條 purity 0.6 腫瘤 3 / 5 個 帶變異 3 / 10 條 VAF 0.30 50× 下約 15 條 purity 0.8 腫瘤 4 / 5 個 帶變異 4 / 10 條 VAF 0.40 50× 下約 20 條 purity 1.0 腫瘤 5 / 5 個 帶變異 5 / 10 條 VAF 0.50 50× 下約 25 條 低 purity 的難處不是訊號消失,是訊號縮到跟定序錯誤同一個量級 purity 0.2 時,50× 覆蓋度上只期望看到 5 條支持 read(上圖最左欄)。 隨機錯誤在同一個位置湊出 5 條的機會並不低 —— 這就是過濾參數必須跟著 purity 調整的原因。
同一個 clonal 變異、同樣每個腫瘤細胞 2 份裡帶 1 份, 只有腫瘤細胞比例不同。VAF 恰好是 purity 的一半,換到 50× 覆蓋度上就是 5、10、15、20、25 條支持 read。 最左邊被標出來的原因見下方說明。

以下把最左邊那一格算清楚:50× coverage、purity 0.2,以及一個 clonal 的 diploid somatic 變異:

預期 VAF=0.2×1÷(0.2×2+0.8×2)=0.10
支持 read 數=50×0.10=5

因此預期僅有約五條支持 read。ONT 的錯誤率受 basecaller、序列脈絡與 read 品質影響; 在此深度下,少量錯誤 read 可能與變異訊號重疊,降低可分辨性。

這說明 LongPhase-S 為何採用 purity 感知的過濾:低 purity 通常需要重新校準過濾參數, 並以驗證資料在 sensitivity 與 precision 間取得平衡。

在 LongPhase-S 的此實作中,流程先估計 purity,再依 purity 調整過濾參數;其他方法也可能採用聯合或迭代估計。

真實證據

LongPhase-S 以 ASCAT 作為 purity 估計的比較基準。ASCAT 是常用的 allele-specific copy-number、purity 與 ploidy 估計方法; 具體適用範圍與資料平台應依研究設計說明。

該研究報告 LongPhase-S 在低 purity 合成樣本上的估計誤差多數低於 10%, 交叉驗證 MAE 約 4%、R2 約 0.95;解讀時應同時確認誤差定義、資料集與切分方式。

這項比較僅涵蓋合成樣本,且假設來源 tumor BAM 接近純腫瘤。 細胞株仍可能包含少量正常或異質細胞,因此此假設限定了 purity 結果的適用範圍。

不同 tumor purity 下 somatic SNV calling 的 F1-score 折線圖,八個 cell line 分別呈現
不同 purity 下的 F1-score。虛線是 caller 原始輸出,實線是加上 LongPhase-S 之後。在此資料中,多數曲線隨 purity 下降而下降,顯示低 purity 是常見困難;實際表現仍取決於方法與資料。

解讀合成資料結果時應明確標示的限制

「本方法在標示為 purity 0.2(或 DNA fraction 0.2,依研究定義)的樣本上誤差小於 10%」應完整表述為「在來源 tumor BAM 接近純腫瘤,並依指定 coverage/read fraction 混合的合成樣本上, 誤差小於 10%」。

實際檢體可能具有不同的細胞組成、拷貝數與技術變異;報告合成資料結果時,應同時說明合成方式與其前提。

先提出預測,再查看解答

兩個 somatic 變異在同一個腫瘤樣本裡,VAF 分別是 0.30 與 0.15。

可否僅據此判斷「第一個比第二個早發生」?

展開答案

不足以直接判斷,但可作為演化順序的線索。

「較早發生的突變會被更多後代細胞繼承,所以 VAF 較高」這個推理在其他條件相同時成立。 問題是其他條件經常不同:

  • 兩個位置的 local copy number 可能不一樣。CN=4 的位置上,同一個 CCF 會給出不同的 VAF。
  • multiplicity 可能不同。若突變所在的拷貝後續被保留並複製,multiplicity 可能 > 1。
  • 其中一個可能落在 LOH 區域,VAF 會被推高。

subclone 重建可使用此線索(稱為 read-AF)排序候選演化樹; 該方法將其限定為「只在最小成本候選集合形成之後用來選擇與排序」, 且最高分並列時全部保留,不強行決定唯一順序。

此例示範以弱線索排序並保留不確定性的做法。

實作練習

合成不同 DNA fraction 的混合樣本

以下是評估混合樣本穩健性的常用設計之一:

# 1. 先量測兩個 BAM 的有效 coverage
mosdepth --by 500 tumor_cov  tumor.bam
mosdepth --by 500 normal_cov normal.bam

# 2. 依實測 coverage 回推抽樣率(-s 的格式是 seed.fraction)
#    抽樣率 =(目標 fraction × 合成後總深度)÷ 來源深度 —— 推導與五個梯度的數值見 M3
#    以 tumor 50×、normal 25×、總深度 25×、目標 DNA fraction 0.6 為例:
samtools view -s 1.30 -b tumor.bam  > t_sub.bam
samtools view -s 1.40 -b normal.bam > n_sub.bam

# 3. 合併
samtools merge dna_frac_0.6.bam t_sub.bam n_sub.bam
samtools index dna_frac_0.6.bam

可建立 0.2 / 0.4 / 0.6 / 0.8 / 1.0 五個 DNA fraction 梯度, 以評估方法在低 DNA fraction 條件下的效能變化;這是一組常見的基礎評估設計。

此合成流程的前提與限制

上面的配方假設來源 tumor BAM 接近純腫瘤,tumor/normal coverage 已校正,且每細胞 DNA 量差異可忽略。 實際細胞株可能仍包含少量正常或異質細胞。

因此「本方法在標示為 purity 0.2(或 DNA fraction 0.2,依研究定義)時誤差小於 10%」應表述為「在以此方式合成的樣本上,誤差小於 10%」。 此結果的適用範圍受合成方式與來源樣本前提限制。

以 heterozygous 位點密度初步篩查 LOH

# 計算沿染色體分箱的 het 位點密度
# 需與配對 normal、鄰近可呼叫區域及 coverage 比較,以列出 LOH 候選
bcftools view -H -g het sample.vcf | awk '{print $1, int($2/1000000)}' | \
  sort | uniq -c | awk '{print $2, $3, $1}' | head -40

可呼叫區域的 het 密度受樣本、族群、coverage、caller 與過濾條件影響,應以配對 normal 或鄰近區段建立基線。 若某區段密度顯著低於基線,可列為 LOH 候選;purity 混合可能保留部分 het reads,仍需結合 allele balance、coverage 與其他證據。

學習檢核

本模組術語

LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
cancer cell fraction(癌細胞比例)
帶有某個特定突變的腫瘤細胞佔全部腫瘤細胞的比例。用來區分 clonal(1)與 subclonal(<1)突變。不等於 VAF。
copy number(拷貝數)
某段基因體在細胞內的拷貝數。多數正常常染色體區段為 2,可再分為 major 與 minor allele copy number。
mutation multiplicity
在帶有某突變的細胞中,該突變所占的拷貝數;是 VAF 與 cancer cell fraction 換算時的重要參數。
ploidy(倍性)
細胞內染色體套數。多數正常常染色體為 2(diploid);腫瘤可呈現 3、4 或其他非整倍體狀態。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。

模組 9 · Methylation primer

甲基化入門

介紹 5mC、allele-specific methylation、MM/ML tags,以及區分直接證據與註記的方法。

約 45 分鐘建議先修:Phasing

本模組學習目標

  • 說明 5mC 是什麼、ONT 為什麼能直接偵測它
  • 說明 MM/ML tag 可能在流程中遺失的情況,以及保留方法
  • 區分「甲基化當作證據」與「甲基化當作事後註記」兩種用法
  • 說明什麼是 within-ALT residual structure:固定 haplotype 與 allele 之後,仍存在的 read 層級甲基化分群

為什麼重要

一條 ONT read 除了序列,還帶著一串「這個 C 有沒有被加上甲基」的紀錄。 這件事的用處不只是「多一種資料」:同一群細胞的甲基化模式會比較像, 所以甲基化其實是一個關於「這條 read 來自哪一群細胞」的線索 —— 而 bulk 資料本來查不到這件事。

實驗室有兩個題目用到這個線索,但用法剛好相反: 一個把它當成判斷依據(會影響結果),另一個刻意不讓它影響判斷(只當事後註記)。 這一章先講清楚兩個題目各自在做什麼,再談為什麼其中一個要刻意不用。

概念與互動

5mC:序列之外的表觀遺傳資訊

是在胞嘧啶(C)的 5 位碳上加上甲基。在序列字母表示上,它不改變 C 的識別; 5mC 可與基因調控及表現相關,但作用取決於基因組脈絡。

在哺乳類,5mC 主要集中於 位點(一個 C 後面接著一個 G),但也可能出現在非 CpG 脈絡。 在本節的分析中,基本單位是「某個 CpG 位點上,一條 read 的 methylated 或 unmethylated 狀態」。

bisulfite-seq 是測量甲基化的常用方法之一,會將未甲基化的 C 轉換為 U(在定序中通常讀為 T),流程較為繁複。 可利用電流訊號搭配修飾辨識模型推定 5mC,通常不需 bisulfite 前處理; 在完成修飾辨識且保留 MM/ML 後,同一條 read 可同時提供序列變異甲基化狀態。

同一分子上的序列與甲基化資訊 上半部區分同一段 DNA 的序列(A、C、G、T 四種鹼基)與甲基化資訊。 示意中的修飾標記位於 C 後接 G 的 CpG 位點,且不改變序列字母。 下半部示範:在完成修飾辨識且保留相應 tags 時,奈米孔定序可在同一分子上關聯序列變異與甲基化狀態, 進而比較帶有與不帶有變異的分子之甲基化模式。 同一段 DNA 的序列與甲基化資訊 第一層 序列本身 A C G T C G A T C G T A C C G ← 四種鹼基 框線標示 C 後接 G 的 CpG 位點 第二層 甲基化標記 ← 示意中的修飾標記 實心 = 已甲基化 空心 = 未甲基化。序列鹼基仍為 C,差異在修飾狀態。 奈米孔定序:在同一分子上關聯序列與修飾資訊 變異位置 有變異 有變異 沒有變異 沒有變異 序列與修飾資訊可在同一分子上配對,便能比較帶有與不帶有變異的分子之甲基化模式。
上方區分序列與甲基化資訊;示意中的修飾標記位於 C 後接 G 的 CpG 位點,且不改變序列字母。下方示範同一分子可同時關聯變異與修飾狀態。

這些資料在程式裡是什麼形狀

先把資料結構看清楚,後面兩種用法就都好懂了。 一條 read 在一個區域內會經過好幾個 CpG 位點,每個位點上它是 methylated 或 unmethylated —— 所以一條 read 就是一個 0/1 向量,一個區域就是一張 read × CpG 的表。

甲基化資料在程式裡的形狀:read × CpG 的 0/1 表 左:一個區域內的六條 read,每條 read 在五個 CpG 位點上各有一個甲基化狀態, 實心表示已甲基化、空心表示未甲基化。 中:同一份資料寫成矩陣,列是 read、欄是 CpG 位點,實心記為 1、空心記為 0。 右:把每條 read 看成一個 0/1 向量後,可以計算兩條 read 之間的差異, 得到 read 對 read 的距離矩陣,再用一般的階層式分群把 read 分成兩群。 本圖說明後面兩種用法共用同一份資料形狀, 而分群這一步是純粹的向量距離計算,與基因體座標無關。 在程式裡,甲基化就是一張 0/1 表 一列是一條 read,一欄是一個 CpG 位點。實心=已甲基化(1),空心=未甲基化(0)。 ① read 上的甲基化 C1 C2 C3 C4 C5 R1 R2 R3 R4 R5 R6 6 條 read × 5 個 CpG(點在 read 下方) ② 寫成 0/1 矩陣 C1 C2 C3 C4 C5 R1 1 1 1 0 1 R2 1 1 1 1 1 R3 1 0 1 1 1 R4 0 0 1 0 0 R5 0 0 0 1 0 R6 0 0 0 0 1 到這一步已經跟基因體座標無關 ③ 算距離、分群 R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6 群 1:R1 R2 R3 群 2:R4 R5 R6 後面兩種用法,用的都是這張表。 兩條 read 的距離=兩個 0/1 向量的差異;分群用一般的階層式方法,這一步不需要任何生物學。 差別只在:分出來的群要拿去做什麼
從 read 上的實心/空心點,到 0/1 矩陣,到 read 之間的距離與分群。 最後一步只是向量之間的差異加上一般的階層式分群,不需要任何生物學知識 —— 兩種用法的差別不在這裡,而在分出來的群要拿去做什麼

用法一:當作證據 —— 判斷一個候選是不是 somatic

第一個題目是 tumor-only 的 somatic 變異判讀:手上有一堆候選位置,要決定哪些是真的 somatic 變異。 甲基化在這裡派上用場的理由很具體 —— somatic 變異只存在腫瘤細胞裡,所以帶著它的那些 read 全部來自同一群細胞, 而不帶它的 read 則來自腫瘤與正常細胞的混合。兩側的甲基化組成因此會不一樣。

甲基化當作證據:用來判斷候選變異來自哪一群細胞 三格比較同一個候選位置的三種可能身分。 若候選是 somatic,帶變異的 ALT read 只會來自腫瘤細胞,因此這一側的甲基化模式偏向一致; 不帶變異的 REF read 同時來自腫瘤與正常細胞,因此偏向混合。 若候選是 germline,兩側都同時來自腫瘤與正常細胞,兩側都是混合。 若候選只是定序錯誤,帶變異的 read 只是全部 read 的隨機子集,兩側組成看起來相同。 因此兩側甲基化組成的差異可以量化成數值特徵,交給分類器判斷候選要保留或丟棄。 在這種用法下,甲基化參與了判斷。 用法一:甲基化當作證據 關鍵直覺:甲基化模式像是「這條 read 來自哪一群細胞」的指紋。read 上的圓=這個位置是什麼,read 下的點=甲基化。 候選是 somatic 只有腫瘤細胞帶著它 ALT read(帶變異) REF read(沒有變異) ALT 側:全部來自腫瘤細胞 → 甲基化模式一致(單一) REF 側:腫瘤+正常混在一起 候選是 germline 所有細胞都帶著它 ALT read(帶變異) REF read(沒有變異) ALT 側:腫瘤與正常都有 → 甲基化模式也是混合 REF 側:一樣是混合 候選是定序錯誤 隨機落在任何 read 上 ALT read(帶變異) REF read(沒有變異) ALT 側:只是 REF 的隨機子集 → 兩側的組成看起來一樣 沒有「只屬於一群細胞」的痕跡 分類器只是把這些「組成」算成數字再組合起來 實際用的特徵例如:REF 與 ALT 兩側各自的甲基化覆蓋量、兩側的差距、 以及每一側「單一」與「混合」各佔多少比例。這些數字進 XGBoost,輸出保留或丟棄。 注意:這種用法下甲基化已經參與判斷,所以它不能再拿來驗證同一個判斷。
同一個候選位置的三種可能身分。真 somatic 的 ALT 側來源單一、REF 側是混合; germline 的兩側都是混合;定序錯誤的 ALT 側只是 REF 的隨機子集,兩側看起來一樣。 這些「組成」被算成數值特徵送進分類器 —— 也就是說,甲基化在這裡參與了判斷

實際的特徵有三類:兩側各自的甲基化覆蓋量與其差距、每一側是單一還是混合的比例, 以及把兩側的平均甲基化程度畫成散布圖後的形狀差異。 分類器(XGBoost)本身不懂生物學,它只是學會「這幾個數字長這樣時,候選通常是真的」。

用法二要用到的任務:subclone 重建在做什麼

第二個題目常被術語擋住,但它的核心其實是一個很單純的組合問題。

腫瘤細胞一代一代分裂,過程中只會多拿到突變,不會把突變還回去。 所以拿一個小區域、看其中 k 個 somatic 位置,每個細胞在這 k 個位置上就是一個 0/1 向量; 一個細胞分裂出的後代,向量只會多出幾個 1。

bulk 定序給你的每一條 read,就是這些向量的一次取樣(read 夠長才能同時覆蓋好幾個位置)。 於是問題變成:已知看到了哪些向量,什麼樣的「一次翻一個 0→1」的路徑能最省步數地產生它們? 那條路徑就是這個區域的候選演化順序。

subclone 重建在做什麼:把 read 變成 0/1 向量,再找最短的突變路徑 以一個區域內的兩個 somatic 位置 S1 與 S2 為例。 左:腫瘤細胞一代一代累積突變,只會多拿到突變、不會退回去, 因此細胞的狀態從 00 變成 10,再變成 11。 中:bulk 定序後,每條 read 在這兩個位置上就是一個 0/1 向量, R 記為 0、A 記為 1,觀測到的狀態集合是 00、10、11。 右:重建就是在所有狀態組成的方格上,找一條從 00 出發、 每一步只把一個 0 翻成 1、能走到所有觀測狀態、且步數最少的樹。 本例選出 00 到 10 再到 11;經過未觀測狀態 01 的路徑需要多假設一個沒看到的狀態。 讀法是:先有 S1 的細胞群是 clone,之後其中一部分又拿到 S2,那一支就是 subclone。 輸出是單一區域內的候選拓撲,不是整個腫瘤的全基因體演化樹, 且最小成本並列時全部保留。 用法二要用到的任務:subclone 重建在做什麼? 以一個區域內的 2 個 somatic 位置為例(S1、S2)。R=沒有變異=0,A=有變異=1。 ① 突變只會累加 00 腫瘤起源 +S1 10 clone +S2 11 subclone 小方塊:左=S1、右=S2 實心=已經帶有這個突變 ② read 變成向量 S1 S2 R R 00 R R 00 A R 10 A R 10 A R 10 A A 11 看到的狀態:00 兩條、10 三條、11 一條 觀測狀態集合 = { 00, 10, 11 } ③ 找最少步數的樹 00 10 01 11 +S1 +S2 實線圈=有 read 看到的狀態 虛線圈=沒看到,走它就要多假設一個狀態 成本=用掉幾個箭頭,本例 2 步 這棵樹讀起來就是一句話 「先有 S1 的那群細胞是 clone;之後其中一部分又拿到 S2,那一支就是 subclone。」 clone 指整個腫瘤群體共有的組合,subclone 指後來才長出來、只占一部分腫瘤細胞的分支。 限制:這是單一區域內 read 覆蓋得到的局部順序,不是整個腫瘤的演化樹; 最小成本並列時全部保留,不強行選一個。
以一個區域內的兩個 somatic 位置為例。 左:細胞的狀態只會從 00 走向 10、再走向 11。中:每條 read 在這兩個位置上是一個 0/1 向量, 於是觀測到的狀態就是 00、10、11 三種。右:在所有狀態組成的方格上找步數最少、 又能走到所有觀測狀態的樹。clone 是整個腫瘤群體共有的那段路徑, subclone 是後來才長出來、只占一部分腫瘤細胞的分支。

這樣看的話,subclone 重建的輸出就是「這個區域內、突變發生順序的候選解」, 而不是一棵完整的腫瘤演化樹。也因為是最小成本解,並列的候選會全部保留,不強行選一個。

同一個狀態裡,read 還能再分群

現在把甲基化接回第二個題目。假設一群 read 的 haplotype 相同、在每個 somatic 位置上的 0/1 向量也完全相同 —— 依序列來看它們是「同一個狀態」,無法再分。 但它們的甲基化模式可能明顯分成兩群:

互動元件(列印版保留說明;數位版可操作)
「原始順序」通常呈現為近似隨機的排列;依 haplotype 排序未必出現明顯結構。依 allele 排序可觀察 ALT 與 REF 的差異;依甲基化群組排序後,可進一步觀察 read-level 分群。

可觀察到:ALT reads 仍可再分成兩群。 它們的 allele 與 haplotype 相同,僅依序列無法區分,但甲基化模式可能不同。

這個現象稱為 within-ALT residual structure;研究依其統計定義,在七個資料集中將其量化為主要殘餘變異來源(51.2%–80.4%)。 換句話說:固定 haplotype 與 allele 後,仍可觀察到額外的 read-level 甲基化分群。

資料說明:資料集數為何多於細胞株數

資料集不等於細胞株。同一個細胞株可能有多份不同 basecaller/流程的資料;例如 HCC1395 有 HKU 與 NYGC 兩份。

它的意義是:上一節那棵樹的一個節點裡,可能還藏著更細的分群 —— 序列證據已經用完了,但資料還沒說完。這正是甲基化在第二個題目裡的位置: 它標記已經建好的節點,而不參與建樹。

兩種角色的對照

兩個題目用的是同一份 read × CpG 表,但甲基化在流程裡的位置完全不同:

甲基化的兩種分析角色:模型輸入或推論後描述 左半部:將甲基化轉為分類器輸入特徵,使其參與判斷候選是否為真變異。 若要評估模型,應使用未參與訓練或搜尋的獨立資料。 右半部:先僅用變異證據完成推論,再附加甲基化描述結果。 在未參與推論的前提下,甲基化可作為獨立觀察。 關鍵原則是:同一證據不應同時作為推論與其獨立驗證依據。 角色一:作為模型輸入 變異本身的證據 甲基化特徵 分類器 是 / 不是真變異 甲基化已納入輸入 → 同一流程中不宜作獨立驗證 角色二:作為推論後描述 只用變異本身的證據 完成推論 推論結果 甲基化 註記 未參與推論 → 可作為獨立觀察 原則:同一證據不應同時作為推論與其獨立驗證依據。
左:將甲基化納入分類器的輸入特徵,使其參與判斷;若要評估模型,應使用未參與訓練或搜尋的獨立資料。右:先僅用變異證據完成推論,再附加甲基化描述結果;在未參與推論的前提下,它可作為獨立觀察。
用法一 somatic 判讀:當作證據用法二 subclone 重建:當作註記
在流程的哪一步進來判斷之前 —— 成為分類器的輸入特徵候選拓撲完成之後才附加
會影響結果嗎 —— 它可影響候選是否保留在此實作中不會 —— 不參與搜尋、成本或排序
是否可作為獨立驗證同一資料流程中不宜宣稱為獨立驗證若未參與推論,可作為獨立觀察

為什麼用法二要刻意不用?因為那個題目最想知道的,正是「這棵樹對不對」。 如果甲基化已經幫忙選過樹,再拿甲基化差異來說「看,這棵樹的分支確實有甲基化差異」, 那只是把自己的輸入念一次而已 —— 這是循環論證

同一個原則也適用於用法一:那裡的甲基化已經進了模型,所以評估模型效能時 必須用沒有參與訓練的資料,不能拿甲基化特徵本身當成「模型是對的」的證據。

真實證據

實務限制之一是甲基化資料的覆蓋範圍。這裡要留意計數單位:M2 列出的是六個細胞株, 而評估用的是資料集,同一株可能有多份(HCC1395 的 HKU 與 NYGC)。 以細胞株計,六個裡只有五個有可用的甲基化資料;以資料集計則多於五份。 不論用哪個單位,能做甲基化分析的樣本都比能做序列分析的少; 因此甲基化較適合作為區域層級的補充證據,而非唯一判準。

研究統計各資料集中帶有穩定甲基化差異的 sSNV 位點比例, COLO829 為 9.5%、H2009 為 35.4%,資料集間差異明顯。不可評估的主要限制之一是 ALT read 的 coverage 不足; 要估計兩組甲基化差異,兩邊都需要足夠且相對平衡的 reads。

對實驗設計的影響

依區域與效應大小,甲基化差異分析通常需要足夠且平衡的 coverage。 若研究問題包含甲基化,應在設計階段提高目標 coverage,以降低不可評估位點的比例。

先提出預測,再查看解答

若研究問題是判定「某個 somatic 突變造成周圍甲基化改變」, 現有 tumor ONT 資料顯示帶突變的 reads 甲基化程度較高。

請評估此證據是否足以支持因果結論,並指出需要補充的資料。

展開答案

不足以支持因果結論。目前觀察到的是相關性,且至少有四個替代解釋尚未排除:

  • 細胞族群不同 —— 帶突變與不帶突變的 reads 可能來自不同細胞群;在配對樣本中,後者也可能來自正常細胞。 兩者的甲基化背景可能不同,未必由突變造成。
  • 反向因果 —— 也可能是該區域原本的甲基化狀態讓突變比較容易發生。
  • coverage 不對等 —— ALT 那邊 read 少,比例估計本來就比較不穩。
  • 批次或區域效應 —— 該區域的序列脈絡就會造成 basecaller 的甲基化判讀偏差。

至少可比較配對正常樣本的同一區域,並納入獨立重複或 allele-aware 分析: 若 normal 與 tumor REF reads 的甲基化模式相似,可降低區域背景差異的解釋,但不能完全排除。

因此,該方法將甲基化定位為事後註記而非推論證據;在缺乏獨立對照時,這可避免過度的因果解讀。

實作練習

甲基化資訊存在 BAM 的哪裡

前面那張 0/1 表不是憑空來的,它從 BAM 的兩個 tag 讀出來:

tag內容
修飾類型及其相對於 read 上標準鹼基的位置與跳過規則
ML與 MM 項目對應的修飾機率或信心,以 0–255 的位元組值編碼
資料格式:ML 是機率,不是二元標籤

ML機率而不是 0/1:要得到前面那張表,還需要一個門檻把機率二值化, 或直接保留機率值。門檻怎麼定會影響分群結果,屬於分析選擇而非資料本身。

重新比對可能遺失 MM/ML 標籤

若未明確傳遞 SAM tags,將帶有甲基化的 BAM 轉成 FASTQ 再重新比對時,通常不會保留 MM/ML。 結果可能是格式正常、但修飾欄位空白的 BAM;工具是否發出警告取決於實作與版本。

在以下 samtools→minimap2 流程中,需同時保留 tags 並啟用相應選項:

samtools fastq -T '*' methylcall.raw.bam > raw.fastq
minimap2 -ax map-ont -y reference.fasta raw.fastq

-T '*' 將 tags 帶入 FASTQ comment,-y 讓 minimap2 將其寫回 BAM。 請確認工具版本及 FASTQ comment 未被其他步驟改寫;缺少 tags 時,後續需要 MM/ML 的分析將無法取得修飾資訊。

確認 BAM 是否包含甲基化資料

先確認必要的 MM/ML tags,以免後續修飾分析缺少資料:

# 抽查一條 read 是否包含 MM / ML tags
samtools view methyl.bam | head -1 | tr '\t' '\n' | grep -E '^(MM|ML|Mm|Ml):'

# 統計帶有 MM tag 的 reads(抽查多條 reads,不只查看第一條)
total=$(samtools view -c methyl.bam)
withmod=$(samtools view methyl.bam | grep -c 'MM:Z:')
echo "$withmod / $total 條 read 帶甲基化 tag"

若第二個數字為 0,先確認原始 BAM 是否已完成修飾辨識及 tag 命名格式;可能是尚未呼叫修飾,也可能在前處理中遺失。可用以下流程重新保留 tags:

samtools fastq -T '*' original.bam > with_tags.fastq
minimap2 -ax map-ont -y reference.fasta with_tags.fastq | \
  samtools sort -o remapped.bam && samtools index remapped.bam

提取並統計甲基化訊號

# 產生每個 CpG 位點的甲基化比例(bedMethyl 格式)
modkit pileup methyl.bam output.bed --ref reference.fasta

# 依 haplotype 分開統計(需要先 haplotag)
modkit pileup methyl.bam out_hp.bed --ref reference.fasta --partition-tag HP

--partition-tag HP 可將甲基化依 haplotype 分層統計, 以比較兩條 haplotype 的甲基化模式。依 M6 所述,haplotype 方向僅在同一 phase block 內一致, 因此統計應限制於同一 phase block,或先完成方向校正。

在 IGV 中檢視甲基化

在支援 base-modification 且 BAM 含有效 MM/ML、參考序列與相容版本時,IGV 可顯示 ONT 甲基化。載入 BAM 之後右鍵 → Color alignments bybase modification (5mC)。 搭配前面的 Group by phase,即可同時檢視 haplotype 與甲基化資訊。

學習檢核

本模組術語

5mC(5-甲基胞嘧啶)
胞嘧啶第 5 個碳上的甲基化修飾。這是常見的 DNA 甲基化形式,主要見於 CpG;可影響轉錄調控,效應依基因組位置與細胞類型而異。
CpG
序列上一個 C 後接一個 G(p 代表兩者之間的磷酸鍵)。哺乳類多數 5mC 位於 CpG,特定細胞或情況亦可見非 CpG 甲基化。
MM/ML tag
BAM 中儲存每條 read 甲基化判讀的兩個 tag:MM 記錄位置、ML 記錄機率。在轉換或重新比對流程中可能遺失,需確認 tags 是否保留。
ONT(奈米孔定序)
Oxford Nanopore Technologies。以電流訊號讀取 DNA,可產生長 read;在 native-DNA 流程與適當模型下,可由訊號推定 5mC,通常不需 bisulfite 轉換。

模組 10 · Evidence and benchmarking

證據、驗證與效能評估

從 precision、recall、F1、資料來源與參考標註品質,系統性評估效能結果與適用範圍。

約 60 分鐘建議先修:Somatic variant calling建議先修:腫瘤混合體

本模組學習目標

  • 批判性解讀效能圖,而非僅依最高長條判斷
  • 解釋為什麼 precision 明顯上升時 F1 可能幾乎不動
  • 說明 truth set 之間的可靠度差異,以及 LongPhase-S 以加權方式處理它的做法
  • 指出 data leakage、distribution shift 與 label noise 各自的徵兆

為什麼重要

後續閱讀的論文通常會包含多張長條圖與折線圖。 判讀圖表未呈現的資訊,是研究與工程實務中的重要能力。

本節的目標不只是計算 F1,也包括培養批判性解讀與驗證能力。

本模組的數字來自兩項工作

下面會反覆引用兩組具體結果。它們是不同的方法、處理不同的問題,先在這裡分清楚, 後面提到時就直接用名字稱呼:

名稱它是什麼本模組用它示範什麼
indel 精修模型 接在 somatic caller 後面的一個後處理模型。它把每個候選 indel 周圍的 pileup 編碼成一張影像,再用卷積神經網路(CNN)判斷這個候選是真的還是假的。 輸入是配對 tumor–normal 的 long-read 資料。關鍵性質是:它只會刪掉候選,不會生出新的候選。 precision 上升而 F1 幾乎不動的原因、模型選擇該用什麼分數、 以及兩個長得一樣卻標記相反的候選
LongPhase-S 的腫瘤 DNA 比例估計 由樣本本身估計腫瘤比例,再依估計值調整過濾參數。方法本身在 M12 展開, 這裡只借它的評估設計 交叉驗證要以什麼為單位切分、benchmark 可靠度不同時怎麼加權

第一項的那句「只會刪掉候選」,是本模組第一個要拆解的東西 —— 它替所有後處理方法設下了一個效能上限。

概念與互動

先釐清三項指標

指標計算公式所代表的問題僅移除候選的後處理如何影響
TP ÷(TP+FP)所報變異中屬於真陽性的比例通常上升(移除 FP)
TP ÷(TP+FN)所有真陽性中被找出的比例至多維持,可能下降
precision 與 recall 的調和平均兩項指標的綜合表現依 TP、FP、FN 的變化而定
固定候選集合下,precision 上升而 F1 變化有限 上半部定義三個指標: precision 是所報變異中屬於真陽性的比例,recall 是所有真陽性中被找出的比例, F1 是兩者的調和平均。 下半部示範在固定候選集合、且後處理僅移除假陽性的情況下,FP 減少而 FN 維持不變。 當 FN 遠多於 FP 時,移除一半 FP 對 F1 的改善有限;若誤刪 TP,FN 還會增加。 三項指標的計算對象 benchmark 標註的真陽性集合 所報候選 假陰性 FN 真陽性 TP 假陽性 FP precision 所報候選中的比例: TP ÷ (TP+FP) recall 所有真陽性中的比例: TP ÷ (TP+FN) 在本示例中,後處理僅移除部分假陽性 過濾前 FN 335 TP 412 FP 88 precision 0.824 F1    0.661 過濾後 FN 335(本示例維持不變) TP 412 FP 44 precision 0.904 F1    0.685 +0.080 +0.024 本示例中 FN 維持不變 —— 僅移除候選的後處理不會恢復 caller 未產生的候選。 當 FN 遠多於 FP 時,移除 FP 對 F1 的改善有限;若誤刪 TP,FN 會增加。
上方定義三項指標;下方示範在固定候選集合、且後處理僅移除假陽性的情況下,FP 減少而 FN 維持不變。因此 precision 上升 0.080,而 F1 僅上升 0.024。

第三欄的條件限定上述結論。在固定 caller 候選集合且後處理僅移除候選時,recall 至多維持,若誤刪 TP 則可能下降。 caller 未產生的候選不會由此恢復;若後處理包含 re-calling 或 assembly,則需另行評估。

觀察 precision 與 F1 的差異

互動元件(列印版保留說明;數位版可操作)
將門檻由 0.5 調至 0.9,比較 precision 與 F1 的變化;再將模擬中的 caller 漏失數設為 0,重複操作並比較兩種情境。

並非無誤的標準

評估需要參考答案;不同資料來源的標註可靠度可能存在差異:

來源形成方式可靠度評估
SEQC2多平台、多中心的共識計畫需依變異類型與區域評估
NYGC單一機構產生需依驗證設計評估
Google(orthogonal tools)多個工具交叉比對的共識需確認工具獨立性與共識形成方式

LongPhase-S 在搜尋過濾參數時, 依不同 cell line 的 benchmark 可靠度乘上相對應的權重。 此設計可能減少 benchmark 差異的影響,但比較不同論文的數字時,仍應確認 truth set 與加權方式是否一致。

評估邊界:benchmark 只涵蓋高信心區域

benchmark 通常附一個 BED 檔,標示「我們有把握的區間」。 區間外的標註信心通常較低,結果不宜直接解讀,除非有其他獨立驗證。

三項可能造成評估偏差的因素

因素可能徵兆本例的處理
測試效能異常偏高indel 精修模型按染色體切分:chr2 與 chr8 僅用於驗證;仍需檢查樣本與位點是否跨 split
訓練與測試的類別或特徵分布不同indel 精修模型的訓練集 FP 佔 4%、測試集佔 19%,因此不能只看 loss
特定類別的表現持續受限特徵相近的兩個位點被賦予相反標籤,提示可能存在標註不確定性

最後一項可由具體案例說明。下面並列 indel 精修模型送進 CNN 的兩張影像 —— 也就是兩個 deletion 候選各自的 pileup 編碼:一個是 true positive(模型給 0.997), 一個是 false positive(0.994)。 兩者的 tumor reads 都顯示集中一致的 deletion,normal reads 未見相應支持。 就這種影像編碼呈現的特徵而言,兩個候選近似。

兩個 deletion 候選點的影像編碼並列比較:左邊是 true positive 分數 0.997,右邊是 false positive 分數 0.994;在此影像中兩者外觀相近
兩個 deletion 候選點的模型分數相近:左側 true positive(0.997),右側 false positive(0.994)。兩者在此影像中都有集中對齊的 deletion,normal 均未呈現明顯異常。就此影像可見的訊息而言,兩個候選點難以區分;需要其他證據補充判讀。

該工作的結論是:在這種影像輸入下,這兩類候選沒有可辨識的差異。這類位點常落在 homopolymer 或 tandem repeat 區域, benchmark 標註的不確定性可能較高;若要判定 label noise,仍需獨立 truth 或重複實驗支持。

合成 DNA fraction 混合樣本及其適用範圍

常用流程假設來源 tumor BAM 接近純腫瘤,再依指定比例與 normal BAM 混合。 此流程可產生預先設定的 DNA/read fraction,作為近似真值;但來源樣本的純度、輸入深度、每細胞 DNA 量與拷貝數仍需校正, 實際細胞株也可能包含少量正常或異質細胞。

因此「在標示為 purity 0.2(或 DNA fraction 0.2,依研究定義)的樣本上誤差小於 10%」應完整表述為「在以此方式合成的樣本上」; 結果僅適用於該合成方式與來源樣本前提。

真實證據

用對的指標選模型

indel 精修模型有一項值得注意的模型選擇設計:它不取 validation loss 最低的那個 epoch 當最佳模型。

理由是 loss 反映所選損失函數(例如 cross-entropy)的平均目標,不必然等同於分類錯誤率; 若任務目標是「在盡量保留真 indel 的前提下,篩掉更多假的」, 兩者不是同一件事。

因此它改用以下任務導向分數挑 epoch:

score=(成功移除的 FPλ×誤刪的 TP)÷FP 總數

λ 由 benchmark 與驗證集的正負比例估計,而非人工指定(該資料約為 1.45); 應同時說明估計資料、FP 總數為零時的處理,以及權重敏感度。

validation loss 最低的 epoch 不等於任務目標最好的 epoch 兩個上下並排、共用同一條 epoch 橫軸的曲線。 上面那條是 validation loss,越低越好:它一路下降,在第 22 個 epoch 附近才到最低點。 下面那條是任務導向分數,越高越好:它在第 12 個 epoch 就到最高點,之後就開始下滑。 兩個最高/最低點落在不同的 epoch,中間相差十個 epoch。 右側說明那個分數怎麼算:成功移除的假陽性,減去 λ 倍的誤刪真陽性,再除以假陽性總數, λ 約為 1.45,由驗證集的正負比例估出,λ 越大表示越不容忍誤刪真陽性。 因此模型選的是第 12 個 epoch:那時 loss 還在下降,但任務目標已經開始變差。 同一次訓練,兩個指標的最佳點不在同一個 epoch ① validation loss —— 越低越好 最低點在這裡 ② 任務分數 —— 越高越好 最高點在這裡 0 10 20 30 epoch ↑ epoch 12:任務分數最高 ↑ epoch 22:loss 最低 它改用什麼分數挑 epoch 成功移除的 FP − λ × 誤刪的 TP FP 總數 λ ≈ 1.45,由正負比例算出 λ 越大 → 越不容忍誤刪 TP 結果選 epoch 12 loss 還在降,目標已經變差 loss 衡量的是平均分類誤差;任務要的是「少刪真的、多刪假的」。兩者不是同一件事。 所以模型選擇的標準要跟任務目標對齊,不是跟 loss 對齊。
兩條曲線共用同一條 epoch 橫軸。上面的 validation loss 一路降到第 22 個 epoch 才最低;下面的任務分數第 12 個 epoch 就到頂,之後開始下滑。兩個最佳點相差十個 epoch —— 取 loss 最低的那一個,拿到的是一個任務目標已經變差的模型。

核心原則

模型選擇的標準應與任務目標對齊,而不必與 loss 最小化完全相同。 此原則適用於 variant calling 以外的應用 ML 任務。

本例交叉驗證以樣本為分割單位

LongPhase-S 用 leave-k-out 交叉驗證評估腫瘤 DNA 比例的迴歸模型, 每次留下 1 或 2 個 cell line 當測試集。結果 MAE 約 4%、R2 約 0.95。

這種做法叫 。此處保留 cell line 作測試,有助於評估跨樣本的泛化能力。 若同一 cell line 的高度相關位點同時出現在訓練與測試中,可能造成 或效能高估。

先提出預測,再查看解答

一篇論文說:「我們的方法把 precision 從 0.72 提升到 0.89。」

請列出解讀此結果時應先確認的三項資訊。

展開答案

依重要性排序:

  1. recall 如何變化?若只報 precision 而不報 recall,可能遺漏門檻調整造成的取捨。 提高門檻通常會提高 precision,但可能只保留少量 calls。
  2. 在哪個資料集、用哪一份 truth set?Google 的 orthogonal-tools 共識與 SEQC2 的標註範圍與難度可能不同;是否限制在 內,也可能造成明顯差異。
  3. 測試資料是否參與閾值選擇或調參?若門檻在同一批測試資料上挑選,0.89 可能是 test-set overfitting 的樂觀估計,不代表泛化效能。

若資料可得,另應確認絕對數量是多少? precision 從 0.72 到 0.89,如果 TP 只有 20 個,那可能只是移除了少數幾個 FP, 統計不確定性可能較高;若未提供分母,比例的精確度難以評估。

實作練習

以標準化流程評估效能

除非已處理 variant normalization,否則不建議自行實作比對; 同一個 indel 可能有多種等價表示,多等位與複雜變異也需要額外處理。可使用專門工具:

# SNV / indel 的常用評估工具(hap.py)
docker run -v $(pwd):/data pkrusche/hap.py /opt/hap.py/bin/hap.py \
  /data/truth.vcf.gz \
  /data/query.vcf.gz \
  -f /data/high_confidence_region.bed \
  -r /data/reference.fasta \
  -o /data/result

-f關鍵參數之一:它限制在 benchmark 信心較高的區間內評估。 未限制區域時,應分層報告並說明標註信心,否則結果難以直接解讀。

解讀效能數字時的四項檢核

解讀效能數字時,可依序確認:

  1. 另一個指標呢?若只報 precision,應同時檢視 recall 的變化。
  2. 在哪個資料集、用哪一份標準答案、有沒有限制在高信心區間內?
  3. 測試資料是否參與過調參?若門檻在同一批測試資料上挑選,結果可能是對該資料集過度擬合的估計。
  4. 絕對數量是多少?precision 從 0.72 到 0.89,如果 TP 只有 20 個,統計上不穩定。

檢查訓練/測試資料是否存在洩漏

# 檢查訓練與測試的染色體名稱是否重疊(僅為初步檢查)
cut -f1 train_sites.tsv | sort -u > /tmp/train_chr
cut -f1 test_sites.tsv  | sort -u > /tmp/test_chr
comm -12 /tmp/train_chr /tmp/test_chr    # 有輸出表示染色體名稱重疊,仍需檢查座標與樣本

# 比較訓練與測試的類別比例
awk '{c[$NF]++} END {for (k in c) print k, c[k]}' train_sites.tsv
awk '{c[$NF]++} END {for (k in c) print k, c[k]}' test_sites.tsv

類別比例差異會影響評估:若訓練集的假陽性佔 4%、測試集佔 19%, 兩組資料的類別分布不同,不宜僅以 loss 判定模型優劣;仍應檢查其他特徵與品質分布。

學習檢核

本模組術語

F1
precision 與 recall 的調和平均。當資料裡 FN 遠多於 FP 時,precision 的改善對 F1 的影響有限 —— 見 M10。
cross-validation(交叉驗證)
輪流保留資料子集作為驗證折,用來估計模型的泛化能力與選擇設定;這些折是 validation,不是最終 test。最終測試集應在模型與設定確定後才使用,並另行保留。
data leakage(資料洩漏)
訓練或模型選擇階段取得了評估資料的資訊,讓效能被高估。實驗室的做法是按染色體切分,確保同一個位點不會同時出現在訓練、驗證與最終測試中。
distribution shift(分布偏移)
測試資料的組成與訓練資料存在顯著差異(例如正負樣本比例不同),使得模型表現不如預期。
high-confidence region
benchmark 建立者指定的高可信度區間,通常以 BED 檔表示;區間外不宜視為具有相同標註可靠度。
label noise(標籤雜訊)
訓練或評估標籤與真實狀態不一致的情況。在 homopolymer 與重複區域可能較常見;特徵相近的位點也可能得到相反標籤。
precision(精確率)
所有 calls 中實際為真陽性的比例:TP / (TP + FP)。後處理常以提升此指標為目標。
recall(召回率)
在指定評估範圍內,所有真陽性中被找出的比例:TP / (TP + FN)。若只對固定的 caller 候選集做後處理,recall 只能維持或下降,不能恢復 caller 從未輸出的真陽性;報告時應說清楚這個候選集範圍。
truth set(標準答案集)
評估用的參考標註。可靠度依資料來源與建立方法而異,困難區域可能包含標註錯誤。

模組 11 · LongPhase core

LongPhase:核心 phasing 流程

介紹 phase graph、phase set 與 haplotagging,以及主要失效情境與診斷方法。

約 45 分鐘建議先修:Phasing

本模組學習目標

  • 說出 LongPhase 的輸入與輸出各是什麼
  • 說明四種變異為什麼放進同一張圖一起定相,而不是各自分開處理
  • 描述圖的節點與邊各自代表什麼,並用四個計數說明一條邊的方向與去留怎麼決定
  • 說明加權投票如何決定每個變異,以及 PS 為什麼會換號
  • 說出兩道信心門檻分別對應輸出裡的哪個現象
  • 跑一個最小的 LongPhase 範例並解讀輸出

為什麼重要

是本教材後續工具共用的基礎,處理的是一般(非腫瘤)樣本的 phasing。 開始分析腫瘤資料前,先掌握這個基本流程。

它值得看清楚內部機制,原因是:後面 LongPhase-S 與 LongPhase-TO 的腫瘤專用處理, 都是接在這張圖與這套投票之上。不知道圖長什麼樣,就看不出腫瘤版改了什麼。

概念與互動

輸入與輸出

子命令輸入輸出
phasegermline SNP VCF + BAM + reference;可另外加 SV VCF、甲基化 VCF含以 | 表示相位的 GT 的 phased VCF(每種變異各自一份)
haplotag已 phase 的 VCF + BAM + reference每條 read 帶 tag 的 BAM
modcall帶甲基化的 BAM + reference甲基化位點的 VCF,可再餵回 phase--mod-file

注意這個順序:先 call variant,再 phase,最後 haplotag。 LongPhase 本身不做 variant calling —— 它需要別人先給它 het 位點當錨點。

四種變異,一張圖

LongPhase 最關鍵的設計選擇,是把四種變異放進同一張圖一起定相, 官方文件稱為 co-phasing。理由來自長讀本身:一條 read 可能同時跨過一個 SNP、 一個甲基化位點、一個小的 indel 與一個 SV —— 這四件事被同一個分子綁在一起, 分開 phasing 就把這個證據丟掉了。

四種變異進同一張圖:LongPhase 的 co-phasing 圖模型 LongPhase 把四種輸入放進同一張圖:SNP(-s,必要)、小的 indel(--indels)、 結構變異(--sv-file)、以及甲基化位點(--mod-file,由 longphase modcall 產生)。 上半部是同一段基因體上的六個位置與五條 read;第二條 read 同時跨過 SNP、甲基化、 indel 與 SV 四種類型,所以它一條就能把四種變異連在一起 —— 這是長讀才做得到的事, 也是把它們放進同一張圖(而不是各自分開 phasing)的理由。 下半部是對應的圖:每個位置拆成兩個 sub-node(allele 0 與 allele 1), read 的證據變成 sub-node 之間的邊。邊只有兩種形狀 —— 平行(0 接 0、1 接 1) 或交叉(0 接 1、1 接 0);沒有 read 跨過時就沒有邊,phase block 在那裡斷開。 四種變異進同一張圖 —— 這是 co-phasing 的意思 節點的形狀代表變異類型,顏色一律中性;顏色留給後面的 haplotype 指派。 ① 四個輸入 SNP VCF -s(必要) small indel --indels SV VCF --sv-file methylation VCF --mod-file 四個都進同一張圖, 不是各自分開 phasing。 ② 一條 read 可以同時跨過不同類型的位置 SNP MOD INDEL SNP SV MOD 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 1 0 每格數字是這條 read 在該位置看到的 allele(0=ref、1=alt)。 第 2 條 read 一次跨過 SNP、MOD、INDEL、SNP、SV —— 四種類型被同一個分子綁在一起,這是長讀才給得到的證據。 ③ 對應的圖:每個位置拆成兩個 sub-node allele 0 allele 1 平行 平行 交叉 平行 沒有 read 跨過 邊只有兩種形狀:平行(0 接 0、1 接 1)或交叉(0 接 1、1 接 0)。 要選哪一種、以及這條邊該不該留下來,由下一張圖的四個計數決定。 最右邊沒有 read 跨過 → 沒有邊 → phase block 在這裡斷開。
上半部是同一段基因體上的六個位置與五條 read;第 2 條一次跨過 SNP、甲基化、indel 與 SV 四種類型。下半部是對應的圖:每個位置拆成兩個 sub-node(allele 0 與 allele 1),read 的證據變成 sub-node 之間的邊,而邊只有平行與交叉兩種形狀。上下兩排的 x 座標刻意對齊,方便對照同一個位置。

程式內部給每個節點記一個型別,原始碼裡的註解就寫著 0=SNP 1=SV 2=MOD 3=INDEL 4=tandem repeat INDEL。 型別不只是標籤,它會改變後面的判斷 —— 例如串聯重複區的 indel(型別 4)投票權重被降到 0.1, 因為那類位置的定序錯誤率特別高。

一條邊怎麼決定方向,又怎麼被丟掉

邊不是「有」或「沒有」,而是四個加權計數。跨過兩個位置的每一條 read, 依它在兩邊看到的 allele 落進 rr、ra、ar、aa 之一:

一條邊的方向與去留,由四個加權計數決定 兩個變異之間的一條邊,其實是四個加權計數。每條跨過兩個位置的 read 會落進 rr、ra、ar、aa 之一:rr 表示兩邊都看到 ref,aa 表示兩邊都看到 alt, 依此類推。程式把它們併成兩個數字 —— para = rr + aa(平行),cross = ra + ar(交叉), 再算 ESR = 兩者的小除以大。para 大就平行連接,cross 大就交叉連接。 ESR 越小代表兩種組合差得越開、證據越乾淨;ESR 大到超過 edgeThreshold(預設 0.7) 就代表兩種組合幾乎一樣多,這條邊會被整個丟掉,不參與後面的定相。 另外兩條規則:任一端的 base quality 低於 baseQuality(預設 12)時,該條 read 只算 edgeWeight(預設 0.1)而不是 1;SNP 與甲基化之間的邊門檻收緊到 0.3。 一條邊其實是四個計數 ① 每條跨過兩個位置的 read 投進一個格子 位置 i 位置 j 0 0 rr 1 1 aa 0 1 ra 1 0 ar rr/aa = 兩邊一致 → 支持平行 ra/ar = 兩邊相反 → 支持交叉 任一端 base quality < 12(-p)時, 這條 read 只算 0.1(-e),不算 1 ② 併成兩個數字,再看它們差多少 para = rr + aa 平行的證據量 cross = ra + ar 交叉的證據量 ESR = min / max ESR 小 = 兩種組合差得開 = 證據乾淨 ESR 大 = 兩種組合差不多 = 分不出來 ③ 三種證據強度,三種結果 證據乾淨 rr aa ra ar 9 8 0 1 para = 17 cross = 1 ESR = 0.06 平行連接 ESR ≤ 0.1 → 這一票的權重 拉到 20(正常是 1) 證據普通 rr aa ra ar 7 6 3 3 para = 13 cross = 6 ESR = 0.46 平行連接 ESR 沒有低到 0.1, 這一票權重就是 1 兩種組合差不多 rr aa ra ar 6 5 5 5 para = 11 cross = 10 ESR = 0.91 整條邊丟掉 ESR 超過門檻 0.7(-1)→ 分不出來,不參與定相 SNP 與甲基化之間的邊門檻另外收緊到 0.3 —— 甲基化訊號比較吵,要求更乾淨才採信。
四個計數併成 para(=rr+aa,平行的證據)與 cross(=ra+ar,交叉的證據),再算 ESR = 兩者的小除以大。para 大就平行連接、cross 大就交叉連接;ESR 大到超過 edgeThreshold(預設 0.7)就代表兩種組合幾乎一樣多,這條邊會被整個丟掉。反過來,ESR0.1 的乾淨邊,它那一票的權重會從 1 拉到 20。

兩個細節值得記住,因為它們解釋了很多「為什麼這裡沒接起來」:

  • 低品質的鹼基會被打折。邊的任一端 base quality 低於 --baseQuality(預設 12)時, 那條 read 對這條邊只貢獻 --edgeWeight(預設 0.1),而不是 1。
  • 甲基化的門檻更嚴。SNP 與甲基化位點之間的邊,門檻從 0.7 收緊到 0.3 —— 甲基化訊號比較吵,要求證據更乾淨才採信。

heuristic phasing:加權投票

圖建好之後,LongPhase 不求全域最佳解。它沿著座標從左往右掃, 一次決定一個變異:前面最多 --connectAdjacent(預設 35)個變異各投一票, 票的權重就是上面那個 20 / 1 / 0.1,兩邊加總大的一邊贏。

heuristic phasing:前面的變異加權投票,決定下一個變異接在哪一條上 LongPhase 不是求全域最佳解,而是從左往右逐一決定。決定第 k 個變異時, 前面最多 35 個變異(connectAdjacent)各投一票;每票的權重來自它那條邊有多乾淨 —— 乾淨的邊(ESR 很小)權重 20,普通的 1,串聯重複區的 indel 只有 0.1。 兩邊權重加總,大的一邊贏,這個變異就接到那條 haplotype 上。 如果兩邊加總剛好相等,程式無法決定方向,就在這裡開一個新的 phase block, PS 換號 —— 這正是 phase block 斷開的直接原因。 最下面是一個特別的保護機制:如果很多票其實都靠同一條長 read 撐著, 那條 read 一旦有系統性錯誤就會一路投錯票。程式偵測到超過三票各自只有一條 read 支持時,會改用只採信乾淨且非 indel 的票重新計算。 從左往右一個一個決定,不求全域最佳解 ① 決定第 k 個變異:前面最多 35 個變異各投一票 已經定好相位的變異 20 邊很乾淨 20 邊很乾淨 1 普通 1 普通 0.1 重複區 indel 待決定 HP1 得票 41 HP2 得票 1.1 每一票的權重來自那條邊有多乾淨:ESR ≤ 0.1 → 20;普通 → 1;串聯重複區的 indel → 0.1 41 > 1.1 → 這個變異接到 HP1。距離超過 300 kb(-d)的變異不投票。 ② 兩邊得票相等 → phase block 在這裡斷開 HP1 得票 3 HP2 得票 3 平手 → 無法決定方向 PS = 10521 PS = 88014 同一條染色體上出現很多 PS,多半就是一路平手出來的。 ③ 一條長 read 不能一路投錯票 一條很長的 read 同時跨過下面每一個位置: 每條邊都只有這一條 read 撐著(para + cross ≤ 1)。 它要是有系統性錯誤,就會一路投出一致但錯的票。 超過三票各自只有一條 read 支持時 → 只採信 ESR < 0.2 且非 indel 的票重算 這一整套都是 heuristic:沿著座標往前掃、用加權投票決定,沒有回頭修正也不求全域最佳解。 好處是快、而且在長讀上通常夠準;代價是它對「證據剛好平手」與「單一 read 主導」很敏感 —— 所以程式才需要 ③ 這種特例保護,以及下一張圖的兩道信心門檻。
① 加權投票決定當前變異接到哪一條 haplotype。② 兩邊得票剛好相等時程式無法決定方向,就在這裡開一個新的 phase block —— 這是 PS 換號最直接的原因。③ 一個特例保護:如果很多票其實都靠同一條長 read 撐著(每條邊只有一條 read,para+cross1),那條 read 一旦有系統性錯誤就會一路投錯票;程式偵測到超過三票是這種情況時,會改成只採信乾淨(ESR < 0.2)且非 indel 的票重算。

這是一個典型的 heuristic:快、在長讀上通常夠準,但代價是它對兩件事敏感 —— 證據剛好平手,以及單一 read 主導。③ 那個特例保護就是為了後者而存在的。 另外,距離超過 --distance(預設 300000,約一個 centromere 的長度)的兩個變異不互相投票。

最後兩道信心門檻

圖定好相之後還有一步,程式把結果反過來檢查一次:先用變異的相位決定每條 read 屬於哪條 haplotype,再用已標好的 read 回頭重算每個變異。兩步各有一道門檻:

最後兩道信心門檻:哪些 read 拿得到 HP,哪些變異留得住 PS 圖定好相之後還有一步:把結果反過來檢查一次。 左邊先決定每條 read 屬於哪一條 haplotype —— 數這條 read 上有多少 allele 站 HP1、 多少站 HP2,比例要超過 readConfidence(預設 0.65)而且總數大於 1,才寫 HP 標籤; 否則這條 read 的 HP 就是空的,這是 BAM 裡有些 read 沒有 HP 的直接原因。 indel 的 allele 在這裡只算 0.1,不算 1。 右邊再用「已經標好 HP 的 read」回頭重算每個變異:兩種指派的支持數比例要超過 snpConfidence(預設 0.75)才保留,否則這個變異的 PS 會被刪掉 —— 所以 VCF 裡有些 heterozygous 位點雖然 phasing 跑完了卻沒有 PS,並不是程式沒跑到, 而是它自己判斷證據不足而收回。 圖定好相之後,還要反過來檢查一次 ① 這條 read 屬於哪一條 haplotype? 數這條 read 上的 allele 各站哪一邊 站 HP1:7 個 站 HP2:1 個 7 ÷ 8 = 0.88 > 0.65 → 標上 HP → HP:i:1 站 HP1:4 個 站 HP2:3 個 4 ÷ 7 = 0.57 < 0.65 → 不標 → 沒有 HP indel 的 allele 在這一步只算 0.1,不算 1。 ② 用標好的 read 回頭重算每個變異 兩種指派各有多少 read 支持 看到 ref 看到 alt HP1 的 read HP2 的 read 12 1 2 11 指派 A:HP1=ref、HP2=alt → 12 + 11 = 23 指派 B:HP1=alt、HP2=ref → 1 + 2 = 3 23 ÷ 26 = 0.88 > 0.75 超過 snpConfidence → 這個變異保留 PS 與定相的 GT 若比例沒過 0.75 → 這個變異的 PS刪掉 VCF 裡有 het 位點沒有 PS,多半是這裡收回的 兩道門檻各自對應一個你會在輸出裡直接看到的現象: read 沒有 HP ← 0.65 那道;het 位點沒有 PS ← 0.75 那道。兩者都不是錯誤,是程式主動說「證據不足」。
① read 上的 allele 站 HP1 與 HP2 的比例要超過 --readConfidence(預設 0.65)且總數大於 1,才寫 HP 標籤;沒過的 read 就沒有 HP。② 再用標好的 read 重算每個變異,兩種指派的支持比例要超過 --snpConfidence(預設 0.75)才保留,沒過的話這個變異的 PS 會被刪掉

沒有 HP、沒有 PS,多半不是錯誤

這兩道門檻各自對應一個你會在輸出裡直接看到的現象: BAM 裡有 read 沒有 HP,來自 0.65 那道;VCF 裡有 heterozygous 位點沒有 PS, 來自 0.75 那道。兩者都不是程式漏跑,而是它主動判斷證據不足而收回。 所以看到這些空缺時,要問的是「證據為什麼不足」,而不是「程式是不是壞了」。

三種失敗模式

phasing 的三種失敗模式與各自的徵兆 第一種是分段破碎:read 太短或中間沒有可區分的位置,導致同一條染色體被切成多個小段。 第二種是方向對調:某處證據太弱,從那一點之後兩條被互換,後半段可能整體錯置。 第三種是大量 read 無法指派:可能是局部拷貝數狀態、覆蓋度不足、或比對品質太低。 每一種都有可以在資料上直接檢查的徵兆。 ① 分段破碎 示意 多個彼此不相連的小段 原因 read 太短,或中間 沒有可區分的位置 徵兆 同一條染色體上出現 很多不同的分段編號 腫瘤樣本裡最常見 ② 方向對調 示意 從該點之後可能整體錯置 原因 某處證據太薄弱, 兩條被互相對調 徵兆 與標準答案比對時, 錯誤從某一點開始 系統性地發生 需結合資料與版本設定確認 ③ 大量 read 無法指派 示意 灰色 read 未帶 HP 標籤 原因 整段失去一條染色體、 覆蓋度不足、 或比對品質太低 徵兆 標記率明顯偏低 (標記率偏低應進一步檢查)
三種失敗模式及其可觀測指標。① 分段破碎:檢查 phase set 的數量。② 方向對調:與 truth 比對時,錯誤從某點起系統性出現。③ 大量 read 無法指派:檢查 HP 標記率。
失敗對應到上面的哪一步徵兆
斷裂投票平手,或沒有 read 跨過(沒有邊)同一條染色體上出現很多不同的 PS
某條邊的 ESR 偏高卻仍勉強過關,方向選錯與 truth 比對時,錯誤從某一點之後系統性地發生
大量 read 未標記沒過 --readConfidence(0.65)haplotag 後很多 read 沒有 HP

第一項與第三項在腫瘤樣本上可能更明顯,因為 與 copy number 異常會減少可用的 phasing 錨點。 LongPhase-S 與 LongPhase-TO 都針對這些腫瘤資料情境提供額外處理。

真實證據

最小可跑範例

# 1. 準備輸入(見 M4)
samtools faidx reference.fasta
minimap2 --MD -ax map-ont -t 10 reference.fasta reads.fastq -o aln.sam
samtools sort -@ 10 aln.sam -o aln.bam && samtools index aln.bam

# 2. germline calling(Clair3 或 PEPPER-DeepVariant,見 M5)
#    產生 SNP.vcf

# 3. phasing
longphase-s phase \
  -s SNP.vcf \
  -b aln.bam \
  -r reference.fasta \
  -t 8 \
  -o phased \
  --ont

# 4. haplotagging
longphase-s haplotag \
  -r reference.fasta \
  -s phased.vcf \
  -b aln.bam \
  -t 8 \
  -o tagged

co-phasing:把其他三種變異一起帶進去

# 甲基化要先用 modcall 產生 VCF,才能餵給 phase
longphase-s modcall \
  -b aln.bam \
  -r reference.fasta \
  -t 8 \
  -o modcall

# 四種一起 co-phase;每種變異會各自輸出一份 phased VCF
longphase-s phase \
  -s SNP.vcf \
  -b aln.bam \
  -r reference.fasta \
  --indels \
  --sv-file SV.vcf \
  --mod-file modcall.vcf \
  -t 8 \
  -o phased \
  --ont

注意modcall 的 help 顯示 -b, --bam-file, 但選項表註冊的長選項其實是 --methylbamfile;短選項 -b 兩者都通。 同理 phase 的 help 寫 --sv-window--sv-threshold, 選項表註冊的是 --svWindow--svThreshold

把圖直接印出來看

前面那三張圖不必只當示意圖 —— --dot 會為每一條染色體輸出一個 dot 檔,裡面就是實際建出來的邊:

longphase-s phase -s SNP.vcf -b aln.bam -r reference.fasta --ont --dot -o phased

# 每一行是一條邊:<位置>.<allele> -> <位置>.<allele>
# allele 相同 = 平行連接,相反 = 交叉連接
head -20 phased.chr20.dot

如何驗證輸出

# 在已定相的 heterozygous records 檢查 | 與 PS
grep -v '^##' phased.vcf | head -5

# BAM 裡應該有 HP tag
samtools view tagged.bam | grep -o 'HP:i:[12]' | sort | uniq -c

# 有多少 read 沒被標到?
samtools view -c tagged.bam
samtools view tagged.bam | grep -c 'HP:i:'

最後兩行的差就是沒過 --readConfidence(0.65)那道門檻的 read。 請將差值除以總 read 數,再依資料品質與分析目標判讀;比例偏高時,回到 M6 的排查清單。

參數對應到哪一步

參數很多,但每一個都落在前面某一張圖上。按階段記比按字母記容易得多:

階段參數預設它在做什麼
讀 BAM-q, --mappingQuality1比對品質低於此值的 alignment 直接丟掉
-x, --mismatchRate3錯配率過高的 read 標為不可信
-L, --overlapThreshold0.2同一條 read 的多段比對若重疊超過此比例,只留較長的那段
建邊-d, --distance300000距離超過此值的兩個變異不連邊
-a, --connectAdjacent35每個變異往後連接幾個變異(也就是投票的範圍)
-p, --baseQuality12低於此值的鹼基,其 read 對這條邊只算 --edgeWeight
-e, --edgeWeight0.1打折後的權重
定邊方向-1, --edgeThreshold0.7ESR 超過此值 → 兩種組合太像,丟掉這條邊
收尾檢查-m, --readConfidence0.65read 要多一致才寫 HP
-n, --snpConfidence0.75變異要多一致才保留 PS
SV 專用-w, --svWindow20評估斷點周圍 CIGAR 的視窗大小
-h, --svThreshold0.10read 要多支持才算支持這個 SV
指令提醒:-h 不是 help

phasehaplotag 的選項表裡, -h 綁的是 --svThreshold(需要一個參數), 而 help 只有長選項 --help,沒有對應的短選項。 所以想看說明就要寫完整的 --help

想做的事寫法
看說明longphase-s phase --help
調 SV 支持門檻-h 0.15--svThreshold 0.15

同一張表裡 -1--edgeThreshold-L--overlapThreshold —— 短選項的字母跟參數名稱沒有明顯關聯, 所以指令寫長一點反而不容易記錯。

來源提醒:help 與實際參數不一致時

以上差異都是在原始碼裡核對過的:help 字串與 longopts 註冊表本來就不完全一致。 權威是原始碼裡的 longopts 表 —— 在 twolinin/longphase 的 repo 根目錄, phasePhasing.cpphaplotagHaplotag.cppmodcallModCall.cpp。使用新參數前先檢索該表確認名稱,並記錄版本。

判讀練習

你在一條染色體上完成 phasing,發現輸出的 VCF 裡有 將近 200 個不同的 PS

這正常嗎?該從哪裡查起?

展開答案

數量偏高,建議檢查。在 read 長度與 heterozygous 位點密度足夠時,長讀通常可形成較大的 phase blocks;實際數量仍取決於資料品質與參數設定。

回到投票那張圖:新的 PS 只在兩邊得票相等時產生。 所以問題一定是「為什麼投票投不出結果」,可能的來源有三個層次:

  1. 沒有票可投。先看 read 長度分布(samtools stats 的平均與 N50)。 如果 read 只有 2–3 kb,跨不過兩個 het 位點的邊本來就少,block 破碎可能是預期結果。
  2. 可投票的位點太稀疏。如果 VCF 裡的 het 位點本來就少(樣本雜合度低, 或這條染色體有大段 ),可用錨點就會減少。
  3. 票都被丟掉了。邊的 ESR 若普遍偏高(兩種組合都差不多), 就會大量觸發 --edgeThreshold 而整條邊被丟掉。這通常伴隨較高的錯配率 或比對問題,可用 --dot 把圖印出來直接看有多少邊真的存在。

再看斷點的位置分布:集中在特定區段多半是該區段有問題(LOH、重複序列、低 coverage); 均勻散布則是全域性的 read 長度或參數問題。-d(預設 300000)與 -a(預設 35)都會限制投票範圍,資料 read 特別長時可依版本文件評估是否調整。

腫瘤樣本中,LOH 是造成這種現象的常見可能性之一:該區域的兩條染色體變得難以區分, 可用錨點可能大幅減少。腫瘤專用工具因此需要額外處理 LOH 區域,否則 phase blocks 可能變得零碎。

實作練習

執行最小流程

# 僅執行小區域測試,以縮短重複測試時間
REGION="chr20:1000000-2000000"

longphase-s phase \
  -s SNP.vcf \
  -b aln.bam \
  -r reference.fasta \
  -t 8 \
  -o phased \
  --ont

longphase-s haplotag \
  -r reference.fasta \
  -s phased.vcf \
  -b aln.bam \
  --region "${REGION}" \
  -t 8 \
  -o tagged

把兩道門檻的效果量出來

這個練習把前面那張「兩道信心門檻」的圖變成實際數字。 調鬆 --readConfidence,看有多少 read 從沒有 HP 變成有:

# 預設 0.65
longphase-s phase -s SNP.vcf -b aln.bam -r reference.fasta --ont -o strict
# 調鬆到 0.55
longphase-s phase -s SNP.vcf -b aln.bam -r reference.fasta --ont -m 0.55 -o loose

# 各自 haplotag 之後比較 HP 標記率
for p in strict loose; do
  total=$(samtools view -c ${p}.tagged.bam)
  tagged=$(samtools view ${p}.tagged.bam | grep -c 'HP:i:')
  echo "${p}: ${tagged} / ${total}"
done

標記率會上升 —— 但那不代表結果更好。放寬門檻是把不確定的 read 也貼上標籤, 標記率與正確率是兩件事,要用有 truth 的資料才分得出來(見 M10)。

確認參數名稱

# 看目前版本接受的長選項
longphase-s phase --help

# help 與實際行為不符時,以選項表為準(檔案在 repo 根目錄)
grep -A40 'static const struct option longopts' Phasing.cpp

學習檢核

原始文獻與程式碼

LongPhase:Lin JH、Chen LC、Yu SQ、Huang YT, LongPhase: an ultra-fast chromosome-scale phasing algorithm for small and large variants,Bioinformatics,2022。程式碼在 github.com/twolinin/LongPhase

本模組術語

HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
LongPhase
實驗室開發的長 read phasing 工具,是後續所有工具的共同基礎。輸出 germline haplotype。
PS tag(phase set)
標示某群 variants 屬於同一 phase block 的編號。同一 PS 內的相位方向可相互比較;不同 PS 的 HP1/HP2 方向彼此獨立。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。
switch error
phasing 結果自某一位置起將兩條 haplotype 的方向對調,是常見的 phasing 錯誤類型。

模組 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 訊號被正常細胞稀釋得越嚴重,偵測越困難。

模組 13 · LongPhase-TO: tumour-only

LongPhase-TO(tumor-only)

沒有對照組時改看 read 上的鄰居關係:LOH 偵測、三位點投票、跨 LOH 的定相、腫瘤比例估計,以及這四步在原始碼裡的落點。

約 80 分鐘建議先修:LongPhase-S

本模組學習目標

  • 說出沒有配對正常樣本時,LongPhase-TO 改用什麼證據取代對照組
  • 解釋為什麼判斷候選變異的真假,要看「支持它的 read 落在哪一條染色體上」
  • 說明偵測 LOH 為什麼用雜合位點比例而不是 coverage,以及小事件為什麼要先扣掉
  • 讀懂一個 GT:GT2:GT3 字串,包含 LOH 區內的情況
  • 在原始碼裡指出這四個步驟各自寫在哪個函式

為什麼重要

上一章的做法需要兩份樣本:腫瘤一份、同一個病人的正常組織一份。 有了正常樣本,「這個變異是不是癌細胞才有的」就有直接的參照 —— 正常樣本裡也看得到的,本來就有,不是癌症造成的。

實務上常常只拿得到腫瘤那一份。這時候少掉的不只是一個檔案,是整個對照組。 看到一個候選變異,你沒有辦法直接回答「這個人本來就有嗎」。

換了一種證據:不比對兩個樣本,改看同一批 read 內部的結構。 一條 一次跨過好幾個位置,所以「哪些 allele 綁在同一條分子上」這件事, 只有腫瘤樣本時仍然看得見。這一章就是在講它怎麼把這個結構當成缺席的對照組來用。

概念與互動

先看整件事的形狀

這個工具只有一個主要指令,但它一次做完四件事。 先把這四件事的順序記住,後面每一節都是在把其中一格放大。

LongPhase-TO 一個指令做完的四件事,以及它的輸入與輸出 輸入有三樣:只有腫瘤樣本的 BAM、別的工具產生的候選變異 VCF, 以及一份族群常見遺傳變異的清單。沒有配對的正常樣本可以對照。 中間由上而下依序做四件事:先沿著染色體找出只剩一條染色體的 LOH 區段; 再逐一判斷每個候選變異是不是真的;接著把 germline 與 somatic 變異一起定相; 最後從兩條 haplotype 的 read 有多不平衡,估計樣本裡有多少比例來自腫瘤。 第四件事算出來的比例若超過 0.9,會用它回頭把第三步重跑一次, 圖上以右側往回的虛線表示。 輸出有三樣:帶 GT、GT2、GT3 的 VCF、標出 LOH 區段的 BED, 以及寫在 VCF 檔頭的腫瘤比例。 一個 phase 指令,由上而下做完四件事 沒有正常樣本可以對照,所以這四件事都只能從腫瘤自己的 read 推出來。 輸入 腫瘤樣本的 BAM 沒有配對的正常樣本 候選變異 VCF 由 ClairS-TO 或 DeepSomatic-TO 產生 族群資料庫(PON) 大家都有的遺傳變異清單 ① 哪些區段只剩一條染色體? 用 read 被剪斷的位置切出區段邊界, 再算每個區段裡「雜合位點佔多少」, 比例低到一定程度就標成 LOH。 ② 每個候選變異是真的嗎? 看支持它的 read 落在哪一條染色體上: 全落在同一條,像是從那一條長出來的; 散在兩條,比較像隨機出現的定序錯誤。 ③ 每個變異在哪一條染色體上? 把「同一條 read 上看到的 allele」連成圖, 一次定相 germline 與 somatic 變異。 LOH 區裡只剩一條,也要接得過去。 ④ 這個樣本有多少比例是腫瘤? 看兩條 haplotype 的 read 有多不平衡, 加上 LOH 佔了全基因體多少, 一起丟進一個事先訓練好的式子。 算出來超過 0.9 時,回頭把 ③ 重跑一次。 輸出 phased VCF 每個位置的 GT · GT2 · GT3 <prefix>_LOH.bed 哪些區段只剩一條染色體 ##tumor_purity= 寫在 VCF 的檔頭裡
由上而下就是程式實際跑的順序,不是隨便排的。 ③ 需要 ① 算出來的 LOH 區段才做得下去;④ 需要 ③ 的定相結果才算得出來。 而 ④ 算出來的數字如果很高,還會回頭把 ③ 重跑一次 —— 這條回饋線是這個流程唯一的循環。

第一件事:哪些區段只剩一條染色體

人的每個位置本來有兩份,一份來自父親、一份來自母親。 腫瘤細胞常常整段整段地弄丟其中一份,這叫 。 LOH 區段對後面每一步都有影響,所以要先找出來。

怎麼找?看一個很簡單的數字:這個區段裡,「兩份不一樣」的位置佔多少。 兩份都在的時候,一個人身上大約每一千個鹼基就有一個位置是一邊 A、一邊 G, 這種位置叫 。少了一份之後,這些位置只剩一種 allele,比例就會塌下來。

怎麼找出「只剩一條染色體」的區段:先切邊界,再算雜合比例,最後跳過小事件 第一層:read 的兩端如果對不上參考序列就會被剪掉,而斷點附近會有很多 read 在同一個位置被剪。 左端被剪與右端被剪各算一種訊號。兩個方向相反、距離又很近的訊號會被配成一對, 代表中間夾著一個小事件;配不成對的落單訊號則當成大區段的邊界。 第二層:對每個區段統計雜合位點佔所有變異的比例。 一條染色體整段消失時,原本一邊 A 一邊 G 的位置會只剩一種 allele,比例因此掉到門檻以下。 圖中一段真正連續的 LOH 被中間兩個小事件墊高了比例,於是被切成三段。 第三層:算比例時把小事件區間裡的變異先扣掉,三段就併回成一段連續的 LOH, 寫進 LOH.bed,第三步定相時會用到。 這一整套只用 read 與參考的對應關係,以及變異本身是雜合還是同型,不需要正常樣本。 ① read 被剪斷的位置,就是切區段的地方 read 的一端對不上參考序列時會被剪掉。同一個位置擠了很多剪痕,代表那裡有斷點。 read 右端被剪 左端被剪 右端被剪 配成對 方向相反又很近 → 中間夾著一個小事件 落單 → 大區段的邊界 ② 每個區段算一個數字:雜合位點佔多少 一條染色體整段不見了,原本能分出兩邊的位置只剩一種 allele,這個比例就會掉到門檻以下。 門檻 正常 正常 小事件 小事件 門檻以下的三段各自被標成 LOH 問題:本來是一段連續的 LOH,被兩個小事件切成三塊。 ③ 算比例時,先把小事件區間裡的變異扣掉 跳過 跳過 併回成一段:這一整段只剩一條染色體 寫進 <prefix>_LOH.bed,第三步定相時會用到
三層。① 區段的邊界不是憑空切的:read 的一端對不上參考序列時會被剪掉,M4 的 CIGAR S), 而斷點附近會有一整排 read 在同一個位置被剪。方向相反又靠得很近的兩個剪痕會被配成一對,代表中間夾著一個小事件;配不到對的落單剪痕就當成大區段的邊界。 ② 每個區段算一次雜合比例,低於門檻的標成 LOH。③ 關鍵的一步:算比例時先把小事件區間裡的變異扣掉,否則一段連續的 LOH 會被切成好幾塊。

為什麼不看 coverage 就好?

直覺上「少一份」應該等於「深度剩一半」。但 M8 的 LOH 模擬器示範過另一種情況: 一條 haplotype 遺失之後,另一條被複製補上,深度看起來完全正常, 可是兩份都來自同一個親代 —— 這叫 copy-neutral LOH。

只看 coverage 會整個漏掉這一類。雜合比例則對兩類都有反應: 不管是「少一份」還是「一份變兩份一樣的」,原本能分出兩邊的位置都會消失。

為什麼小事件非扣不可?因為一段大 LOH 裡面常常夾著幾個小的重排 ( 這類劇烈斷裂—融合就會製造這種局部訊號)。這些小區間裡雜合位點會短暫回來, 把比例墊到門檻之上。不處理的話,程式會以為那裡不是 LOH,於是把一段連續的區域報成三段不相干的區域。

第二件事:這個候選變異是真的嗎

候選變異不是 LongPhase-TO 自己叫出來的 —— 那是 -TO 或 DeepSomatic-TO 的工作。 LongPhase-TO 做的是再校正):把明顯不合理的候選挑掉。

第一關很直接:拿去對 這種族群資料庫比。 大家都有的變異,多半是這個人與生俱來的,不是癌症造成的,先排除掉。 但族群資料庫收不到每個人的私有變異,所以過了這一關還不夠。

第二關才是重點,而且它用的證據只有 long read 給得起: 看支持這個候選的 read,左右兩邊的鄰居是什麼

沒有正常樣本時,用「鄰居一不一致」分辨真變異與定序錯誤 上半部是同一個候選位置的兩種情況,各六條 read,而且兩邊帶候選 allele 的 read 都剛好三條 —— 所以光數數量分不出來,要看它們落在哪裡。 左邊:三條帶 T 的 read,左右鄰居都是 C 與 A,也就是三條全部落在同一條染色體(HP2)上。 右邊:三條帶 T 的 read,一條的鄰居是 HP1 的組合、一條是 HP2 的組合、 一條的組合在這個人身上根本不存在,因此無法歸屬。 下半部把同樣的資料畫成路徑圖:三個位置各有兩種 allele,一條 read 走出一條路徑。 左邊出現第三條完整的路徑,而且它跟 HP2 只差候選這一格,符合「變異從某一條既有染色體長出來」; 右邊帶 T 的 read 各走各的,沒有任何一條路徑被穩定支持。 同一個候選位置:它是真的變異,還是定序錯誤? 兩邊帶 T 的 read 都是三條 —— 數量分不出來。要看的是這些 read 的左右鄰居 ① 真的體細胞變異 三條帶 T 的 read,鄰居組合完全一樣 左鄰居 候選位置 右鄰居 A G T A G T C G A C T A C T A C T A HP2 HP2 HP2 → 它有固定的出身:長在 HP2 上 ② 定序錯誤 三條帶 T 的 read,鄰居組合各不相同 左鄰居 候選位置 右鄰居 A G T C G A A T T C T A A T A C G A HP1 HP2 → 它沒有固定的出身 把同一批 read 畫成路徑:三個位置,一條 read 走一條路 HP1 HP2 第三條路徑 A G T C T A 三條 read 走出同一條新路徑, 而它跟 HP2 只差候選這一格 —— 像是從 HP2 長出來的。 HP1 HP2 帶 T 的三條 A G T C T A 三條 read 各走各的 沒有哪一條新路徑被穩定支持 —— 這是隨機出現的訊號。
兩邊帶 T 的 read 刻意都是三條 —— 光數數量分不出真假,這正是重點。 差別在鄰居:左邊三條的鄰居都是 C 與 A,也就是三條全落在同一條染色體上;右邊三條各有各的鄰居,湊不出一致的來源。 下半部把同一批資料畫成路徑圖後更清楚:左邊多出一條完整的新路徑,而且它跟 HP2 只差候選這一格;右邊則沒有任何一條新路徑被穩定支持。

背後的理由是癌症怎麼發生的。一個體細胞變異只會發生在某一個細胞的某一條染色體上, 之後那個細胞分裂出來的後代才帶著它。所以真變異必然掛在一條既有的 haplotype 底下, 形成一條「跟母體只差一格」的新路徑。定序錯誤沒有這個身世,它落在哪條 read 上是隨機的。

為什麼要三個位置,兩個不夠?

M11 講過兩個位置之間的一條邊:它其實是四個計數(rr/ra/ar/aa), 能回答的是「這兩個位置該平行接還是交叉接」。

但這裡要問的是另一個問題:候選 allele 在左右兩側是不是都指向同一條 haplotype。 只有一個鄰居時,「跟左邊一致」很容易碰巧發生;要有左鄰居右鄰居, 才看得出「這條新路徑從頭到尾只跟某一條差一格」。所以最小單位是三個位置, 這個結構就叫

實際上一個候選點周圍不會只取一組三位點。程式會拿它左右幾個變異輪流搭配, 組出很多組三位點,每一組各自看一次、各投一票,最後看票數決定留不留。 一組看走眼不會定生死,這是把單一雜訊的影響攤掉的常見做法。

第三件事:把每個變異掛回染色體

前兩件事做完,才輪到定相本身。做法跟 M11 一樣 —— 把「同一條 read 上看到的 allele」連成一張圖,再沿著圖走出兩條 haplotype。 差別在這裡多做兩件事:somatic 變異也要一起掛上去,而且LOH 區要接得過去

定相的結果有三條軌道,以及它們怎麼寫成 VCF 的 GT、GT2、GT3 上半部是六個位置的定相結果。左邊四個位置在正常區,兩條 germline haplotype 都在; 右邊兩個位置落在 LOH 區,HP1 整段不存在,圖上畫成灰色虛線的空軌道。 第三條軌道 HP2-1 是 HP2 的體細胞後代:它跟 HP2 完全一樣,只有帶紅點的兩個位置不同。 下半部把其中三個位置的 VCF 欄位攤開來看。 一般的遺傳變異只有 GT;正常區的體細胞變異 GT 是 0 直槓 0,靠 GT2 說明它長在哪一條上; LOH 區的位置 GT 有一側寫成一個點,表示那一條 haplotype 不存在, 而 GT2 與 GT3 分別代表剩下那一條再往下分出來的兩支。 定相的結果:三條軌道,以及它們怎麼寫進 VCF 同一條 read 上看到的 allele 被連起來,就得到下面三條軌道。 正常區:兩條都在 LOH 區:只剩一條 HP1 整段不存在 HP2 HP2-1 A G A C G G T T G T G A T T A T 紅點 = 只有癌細胞才有的變異 HP2-1 跟 HP2 只差紅點那兩格 —— 它是 HP2 的後代 ① 一般的遺傳變異 GT 0|1 GT2 ./. GT3 ./. 兩條 haplotype 一邊 ref、 一邊 alt,跟癌症無關。 GT2、GT3 空著。 ② 正常區裡的體細胞變異 GT 0|0 GT2 .|1 GT3 ./. 兩條 germline 都是 ref, 所以 GT 是 0|0。 GT2 第二格是 1 = 長在 HP2 上。 ③ LOH 區裡的體細胞變異 GT 0|. GT2 1|. GT3 0|. GT 有一側是「.」,代表 那一條 haplotype 不存在。 GT2 與 GT3 是剩下那條的兩支。
三條軌道。HP1 與 HP2 是與生俱來的兩條;HP2-1 是 HP2 的體細胞後代 —— 它跟 HP2 完全一樣,只有帶紅點的位置不同,名字本身就記錄了來源。 進到 LOH 區之後 HP1 整段不存在,程式用 LOH 邊界兩側的連結判斷「留下來的是哪一條」,再讓它一路接過去。 下半部是同樣三個位置寫成 VCF 的樣子。

結果寫在 VCF 的 FORMAT 欄位,分成三層。用下面的解碼器把七種常見組合逐一看過一次:

互動元件(列印版保留說明;數位版可操作)
從下拉選單逐一檢視。最快的讀法是先看 GT 有沒有「.」—— 有就代表這裡是 LOH 區,那一側的 haplotype 不存在。
欄位回答的問題怎麼讀
GT與生俱來的兩條長什麼樣有一側是 . = 這裡是 LOH
GT2癌細胞才有的變異長在哪一條上哪一格是 1,就是長在那一條上;1|1 代表判不出來
GT3LOH 區裡,剩下那一條再往下分的第二支非 LOH 區通常用不到,寫 ./.

為什麼 LOH 區要多一層?因為那裡只剩一條 germline haplotype 可以掛, 但癌細胞在那一條上可能先後長出兩批不同的變異,屬於不同的細胞群。 只有 GT2 一格的話,這兩批會被混在一起;多一層 GT3 才分得開。

第四件事:這個樣本有多少比例是腫瘤

檢體不會是純的癌細胞,裡面一定混著正常細胞。混得多寡直接影響每個變異的訊號強度, 所以這個比例要估出來。M12 用的是 ;這裡的比值算法一樣,差別只在數的是帶 reference allele 的 read

從兩條 haplotype 的失衡程度,估計樣本裡有多少比例來自腫瘤 挑一個已經定相好的體細胞變異位置,只數「帶 reference allele」的 read。 這個變異長在 HP2 上,所以帶 alt 的 read 全是癌細胞貢獻的; 而帶 ref 的 read 有兩個來源:HP1 上的(癌細胞與正常細胞都有) 與 HP2 上的(只有正常細胞才有,因為癌細胞那一份已經變成 alt 了)。 三格由左到右是腫瘤佔兩成、六成、九成。 腫瘤越多,正常細胞越少,HP2 這一側帶 ref 的 read 就越少, 兩側的比值於是從接近 0.5 一路往 1.0 靠。 全基因體上每個體細胞變異都算一次這個比值, 再把分布的四分位數和 LOH 佔基因體的比例一起交給一條事先訓練好的迴歸式, 就得到最後那個腫瘤 DNA 比例。 怎麼從 read 看出這個樣本有多少比例是腫瘤 在一個長在 HP2 上的體細胞變異位置,只數「帶 reference allele」的 read 各有幾條。 腫瘤細胞佔 2 成 帶 ref 的 read 有幾條: HP1 10 HP2 8 10 / (10 + 8) = 0.56 兩邊差不多 腫瘤細胞佔 6 成 帶 ref 的 read 有幾條: HP1 10 HP2 4 10 / (10 + 4) = 0.71 開始偏向一邊 腫瘤細胞佔 9 成 帶 ref 的 read 有幾條: HP1 10 HP2 1 10 / (10 + 1) = 0.91 幾乎全偏到 HP1 HP2 這一側帶 ref 的 read 只有正常細胞才貢獻得出來 —— 腫瘤越多,它就越少。 全基因體每個位置都算一次,再交給一條事先訓練好的式子 所有位置的比值分布 (取它的四分位數) LOH 佔全基因體多少 (第一步就算好了) 腫瘤 DNA 比例 ##tumor_purity=0.62
挑一個長在 HP2 上的體細胞變異。帶 ref 的 read 有兩個來源:HP1 上的(癌細胞與正常細胞都給得出來) 與 HP2 上的(只有正常細胞給得出來,因為癌細胞那一份已經變成 alt 了)。 所以腫瘤越多,HP2 這一側就越薄,兩側的比值從接近 0.5 一路往 1.0 靠。

這個數字叫什麼,要小心

程式把它寫成 ##tumor_purity=,但它量到的其實是 ,不是腫瘤細胞佔的比例。

在實驗室依覆蓋度混出來的合成樣本裡,兩者恰好相等,所以平常不容易察覺差別。 但真實腫瘤如果是 或發生過全基因體加倍,一個癌細胞貢獻的 DNA 比正常細胞多, 兩個數字就會分開。報告數字時要說清楚是哪一個。

最後一步是把兩樣東西交給一條事先訓練好的式子:全基因體所有位置的比值分布, 加上 LOH 佔了基因體多少。為什麼要加 LOH 這一項?因為 LOH 區本身就會把比值推向 1.0 (那裡本來就只剩一條),只看比值分布會高估。兩個特徵一起看,才對得起來。

模型邊界:預訓練係數何時可能失準

這條式子的係數是在幾個已知答案的細胞株資料上配出來後固定下來的, 之後每個樣本都用同一組係數。所以它的可靠度取決於新樣本跟當初那些細胞株像不像 —— 這是所有預訓練模型共通的邊界條件,不是這個工具特有的問題。

真實資料與證據

longphase-to phase \
  -s SNP.vcf \
  -b tumor.bam \
  -r reference.fasta \
  -t 8 \
  -o phased_prefix \
  --caller clairs_to_ssrs \
  --pon-file PoN/gnomad.vcf.gz,PoN/dbsnp.vcf.gz \
  --strict-pon-file PoN/1000g-pon.vcf.gz \
  --loh
指令提醒:四個常見參數錯誤

--caller 只接受 clairs_to_ssclairs_to_ssrsdeepsomatic_to,寫錯會直接報錯結束。 --pon-file 的值是一個用逗號分隔的字串,不是重複的旗標。 --strict-pon-file--pon-file 嚴格:它要求位置 ALT allele 都吻合才算命中。 --loh 不加就不會輸出 LOH 區間。

LongPhase-TO 在真實資料上訓練後的 somatic calling 效能
LongPhase-TO 的 somatic calling 結果。在此資料中,tumor-only 的絕對數值低於 tumor–normal;重點是相對於 baseline 的改善,實際差異取決於資料與評估設定。

怎麼看輸出

# 估出來的腫瘤比例寫在 VCF 檔頭
grep '##tumor_purity' phased_prefix.vcf

# LongPhase-TO 加上去的 FILTER 標籤分布
awk '!/^#/ {print $7}' phased_prefix.vcf | sort | uniq -c

# LOH 區間
head phased_prefix_LOH.bed

FILTER 欄位會出現 PASSLP_nonSomaticLP_PON: 分別是留下來的、被三位點投票否決的、被族群資料庫擋掉的。 加上 --disable-refine-somatic 就不做這一步,可以用來看再校正到底改了哪些位置。

預測與結果檢視

你在輸出的 VCF 裡看到一列的 FORMAT 是 0|0:1|1:./.

這代表什麼?這個位置的資訊完整嗎?

展開答案

一層一層拆:

  • GT = 0|0 —— 與生俱來的兩條在這裡都是 reference。 沒有 .,所以這裡不是 LOH 區
  • GT2 = 1|1 —— 有 somatic 事件,但兩格都寫成 1。 依定義這代表來源判不出來,也就是 hp3
  • GT3 = ./. —— 沒用到第三層,符合「這裡不是 LOH 區」。

所以資訊不完整:工具認定這裡有 somatic 事件, 但沒辦法說它長在 HP1 還是 HP2 上。

最常見的原因是這附近沒有可用的錨點 —— 附近沒有雜合位點, 或者跨過去的 read 太短,兩邊都連不到能區分 HP1/HP2 的位置。 回到第二件事那張圖就懂了:沒有鄰居可看,就沒有辦法判斷出身。

留意它沒有隨便挑一條寫上去。證據不足時保留「不確定」, 跟 M12 對 HP3 的處理是同一個原則:不要把猜測寫成結論。

實作練習

跑一次,然後檢查四個輸出

longphase-to phase \
  -s tumor_snv.vcf \
  -b tumor.bam \
  -r reference.fasta \
  -t 8 \
  -o phased_prefix \
  --caller clairs_to_ssrs \
  --pon-file PoN/gnomad.vcf.gz,PoN/dbsnp.vcf.gz \
  --strict-pon-file PoN/1000g-pon.vcf.gz \
  --loh
# ① LOH 一共佔了多少基因體?
awk '{s+=$3-$2} END {print "LOH 總長度:", s/1e6, "Mb"}' phased_prefix_LOH.bed

# ② 估出來的腫瘤比例
grep '##tumor_purity' phased_prefix.vcf

# ③ 有 somatic 事件的位置(GT2 不是 ./.)
bcftools query -f '%POS\t[%GT\t%GT2\t%GT3]\n' phased_prefix.vcf | \
  awk '$3 != "./."' | head -20

# ④ 其中有幾個落在 LOH 區裡(GT 帶點)
bcftools query -f '[%GT\t%GT2]\n' phased_prefix.vcf | \
  awk '$2 != "./." && $1 ~ /\./' | wc -l

③ 跑出來如果有一堆 1|1,代表很多位置判不出來源, 通常是覆蓋度或 read 長度不足;④ 的數字跟 ① 的 LOH 長度應該是相關的, 兩者兜不起來就值得回頭看 LOH 是不是切得太碎。

把圖印出來看

longphase-to phase ... --dot -o phased_prefix

--dot 會另外輸出一個 Graphviz 的 .dot 檔, 裡面就是這一章講的那張「節點是 allele、邊是 read 支持」的圖。 自己畫出一小段來看,比讀十遍說明有用。

追程式碼時的對照表

四件事在原始碼裡各有明確的落點。PhasingProcess.cpp 的建構子 從上往下讀就是整個流程,其他檔案都是被它叫起來的:

這一章講的程式裡的位置
整個流程的順序PhasingProcess.cpp 建構子,由上而下
讀 BAM、順便數剪痕BamParser::direct_detect_alleles()clipCount
由剪痕切出區段與小事件Clip::detectGenomicEventInterval()
算雜合比例、判定 LOHClip::detectLOHRegion()(門檻就寫在這個函式裡)
建圖:節點是 allele,邊是 readVairiantGraph::addEdge()
三位點投票VairiantGraph::somaticCalling()patternMining()
定相本體VairiantGraph::phasingProcess()
估腫瘤比例PurityCalculator::getPurity()
寫出 GT / GT2 / GT3VairiantGraph::exportPhasingResult()

grep 的時候會踩到的兩件事

第一,圖的類別名稱是 VairiantGraph —— 原始碼裡就是這樣拼的, 搜 VariantGraph 會一無所獲。

第二,一個候選點會被拿去跟左右各幾個變異搭配成很多組三位點, 那個「幾個」是 --somaticConnectAdjacent(預設 6)。 它跟一般定相用的 --connectAdjacent(預設 35)是兩個不同的參數,別看錯。

實作查表:LongPhase-S 與 LongPhase-TO 的差異

在兩個工具之間切換時最容易搞混的六件事:

配對版(longphase-s)僅腫瘤版(longphase-to)
somatic haplotype 寫在哪BAM 的 HP:Z:1-1VCF FORMAT 的 GT2GT3
腫瘤比例寫在哪<prefix>_purity.out 檔案VCF 檔頭 ##tumor_purity=
指定比例的參數名--tumor-purity(0.1–1.0)--purity(0–1)
掛在哪個子命令somatic_haplotagphase
--caller沒有這個參數實質必填
--loh沒有有,輸出 _LOH.bed

學習檢核

程式碼

LongPhase-TO 的程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-to; 截至本教材撰寫時尚未有對應論文,參數與行為以原始碼的 longopts 表為準。

本模組術語

BFB(斷裂—融合—橋循環)
Breakage-fusion-bridge:染色體反覆斷裂與融合造成的劇烈重排,在 coverage 上呈現特殊的階梯形狀。
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-TO
tumor-only 版本。做染色體等級的 LOH 偵測、triplet graph 再校正、somatic phasing 與腫瘤 DNA 比例估計。
PON(正常樣本面板/族群資料庫(依流程而異))
PON 依分析流程有兩種用法,兩者不可互換:本教材的 tumor-only 流程以它指稱 population germline database set(如 1000G、CoLoRSdb、dbSNP、gnomAD 的聯集);GATK Mutect2 的 Panel of Normals(PoN)則由多個正常樣本建立,用來標記反覆出現的技術性 artifact。兩者都不能完全取代同一病人的 matched normal。
aneuploidy(非整倍體)
染色體數目異常。腫瘤裡非常普遍,也可能使 cellular purity 與 DNA fraction 不一致。
heterozygous(異型合子)
在一般二倍體位點上,兩份 allele 不同(例如一份 A、一份 G)。此類位點可作為區分 haplotype 的資訊錨點;複雜拷貝數情況需另行解讀。
long read(長讀)
單條可達數千至數萬鹼基的定序片段(例如 ONT、PacBio)。若可靠地同時覆蓋多個 variant,可提供它們位於同一 DNA 分子上的直接觀測證據。
recalibration(再校正)
以額外證據重新評估 caller 已輸出的 candidates。若僅處理既有候選,可移除 false positives,但不能恢復 caller 未輸出的變異。
soft clipping
read 端部未與參考序列對齊,但序列仍保留在 BAM 中(CIGAR 為 S)。大量 clipping 集中於同一位置時,可能提示結構變異斷點,仍需其他證據確認。
triplet graph
LongPhase-TO 判斷候選變異真假時用的最小結構:候選位置加上左右各一個變異,共三個位置。把 read 上看到的 allele 組合畫成路徑後,真的 somatic 變異會形成一條「跟某一條 germline haplotype 只差候選這一格」的新路徑;定序錯誤則湊不出一致的路徑。因為左右兩側都要對得上,所以三個位置是最小單位。
tumour DNA fraction(腫瘤 DNA 比例)
樣本 DNA 中源自腫瘤的比例。與 tumor purity(細胞比例)在 aneuploid 或 WGD 的情況下會不一樣。

模組 ★ · Capstone

Capstone:整合式位點判讀

整合單一位點的多項證據,完成可重現的推論流程,並撰寫明確標示不確定性的結論。

約 120 分鐘建議先修:LongPhase-TO

本模組學習目標

  • 獨立判讀一個位點的所有證據,並得出有根據的結論
  • 在有配對正常樣本與只有腫瘤樣本兩種情境下做出不同的判斷,並說明理由
  • 在同一個位點上跑完兩種流程,並在各自的輸出檔案裡找到答案
  • 計算 precision 與 recall,並指出它們在這個案例裡的限制
  • 寫出一段明確區分「觀測到的」與「推論出來的」結論

為什麼重要

前面十四個模組各自處理一件事。這一節把它們放回同一個位點上, 要求你自己判讀,而不是照著步驟做。

評量的重點不是指令跑不跑得動,是你的解讀有沒有證據撐住。 實務上要說清楚三件事:你觀測到什麼、你從觀測推論出什麼、以及哪些結論還受資料或模型限制。 這三件事混在一起寫,別人就無法判斷你有幾分把握。

概念與互動

案例:chr9 上的一個候選點

給定條件:

項目
樣本HCC1395(乳癌細胞株),ONT R10
位置chr9:5,073,770,落在 JAK2 基因範圍內
候選變異SNV,G → T
Tumor coverage50×,其中 11 條支持 ALT
Normal coverage25×,其中 0 條支持 ALT
估計 0.6(本題簡化模型中視為 tumor DNA fraction)
該區段 2(無 CNV,無
周圍 200 bp 內的 het germline SNP2 個,皆已 phase
支持 ALT 的 11 條 read 的 10 條 HP1、1 條 HP2
序列脈絡非 homopolymer、非重複區
PON不在任何族群資料庫中

完整推理鏈示例

判讀一個候選位點的完整推理鏈 從觀測資料開始,依序檢查五類證據: 頻率是否符合預期、配對正常組織是否乾淨、支持的 read 是否集中在同一條染色體上、 序列脈絡是否容易出錯、以及公開資料庫有沒有收錄。 每一項標示定性支持程度,最後匯總成一個帶有明確不確定性的結論。 右側列出每一項如果換成只有腫瘤樣本的情況會怎麼改變。 觀測資料 tumor 50× · ALT 11 normal 25× · ALT 0 ALT 的 HP: 10 / 1 purity 0.6 · CN 2 ① 頻率符合預期嗎 11/50 = 0.22,理論值 0.30 → 相容 ② 正常組織乾淨嗎 25× 深度、0 條 → 降低 het germline 可能 ++ ③ 支持的 read 集中嗎 10 比 1 偏向一條 → 支持來源一致 ++ ④ 序列脈絡容易出錯嗎 非重複、非 homopolymer → 已知風險較低 ⑤ 資料庫有收錄嗎 沒有 —— 但這只排除「常見」的遺傳變異 若只有腫瘤樣本 ① 還在 ② 不可用 (此類證據不可用) ③ 還在,而且變成主力 ④ 還在 ⑤ 還在,但幫助有限 → 無法排除「這個人   獨有的遺傳變異」 結論該怎麼寫 有配對正常組織時 「與 somatic 變異相容,支持度較高。」 四項支持證據,其中兩項有力: 正常組織乾淨、支持 read 集中。 保留的疑慮:那 1 條例外要解釋, 而 purity 0.6 本身是估計值。 只有腫瘤樣本時 「與 somatic 變異相容,  但無法完全排除是這個人  獨有的遺傳變異。」 而且必須在報告裡明講這個限制 —— 此表述明確標示證據限制。
左:逐項檢查五類證據,標示其定性支持程度。右:改用僅有腫瘤樣本的情境時,第二類證據不可用;下方比較兩種情境的結論表述與確定程度。

任務一:是否為 somatic 變異?

請先列出支持與反對的理由,再展開解析。

展開答案

結論:目前證據與 somatic 變異相容,支持度較高。證據如下:

支持的證據:

  • VAF 與簡化模型相容。觀測 VAF = 11/50 = 0.22。 在 tumor DNA fraction = 0.6、diploid、無拷貝數變化、單拷貝且 clonal 的合成假設下, 理論預期為 0.6×1÷2=0.30。0.22 略低於此值,可能與 約 0.73 的次要 clone 或取樣波動相容;這不是對 CCF 的直接量測。
  • normal 樣本未觀測到 ALT。25× 深度、0 條 ALT。若此位點是典型 het germline, 在相同覆蓋與取樣假設下原本可預期約一半 read 支持 ALT;觀測到 0 條會降低此解釋的可能性, 但不能僅憑此結果完全排除 germline。
  • haplotype 來源偏向一致。11 條中有 10 條是 HP1。這支持 ALT read 集中於一個 haplotype, 但仍需結合 mapping/base quality、read 證據數量與 haplotagging 品質判讀,不能單獨視為證明。
  • 序列脈絡未見已知高風險特徵。此處不是 homopolymer 或重複區,因而降低部分 ONT 錯誤來源的疑慮; 這項觀察不足以排除所有 SNV 誤差。

需要保留的疑慮:

  • 那 1 條 HP2 read 可能反映定序、比對或 haplotagging 誤差,也可能是更複雜的局部訊號。 10:1 仍偏向單一來源;若比例更接近 1:1,單一 haplotype 的解釋就會減弱。
  • purity 0.6 是模型估計值而非直接量測值。如果估計偏差, 「VAF 與預期相容」這項證據也會隨之改變。
  • 11 條 read 的絕對數量不算多。統計波動的空間仍在。

任務二:如果沒有 normal 樣本呢?

同一個位點,但你只有 tumor BAM。判斷會怎麼改變?

展開答案

確定程度會下降,因為缺少配對 normal 的直接比較。

上面四條支持證據裡,第二條(normal 未觀測到 ALT)不可用, 因此排除 germline 的能力較弱。

剩下能用的:

  • 查詢 —— 不在這個族群資料庫裡,會降低常見 germline 的可能性, 但排除不了病人私有的 germline 變異(M7 的核心限制)。
  • VAF 0.22 —— 在沒有拷貝數、LOH 或 purity 偏差的簡化 diploid 假設下, 典型 het germline 的 VAF 通常接近 0.5;實際腫瘤樣本的 VAF 仍可能受這些因素影響, 因此 tumor-only 下不能以單一 VAF 值作出定論。
  • haplotype 結構 —— 這是 LongPhase-TO 主要利用的證據。 用左右兩個 germline SNP 建 ,看支持這個候選的 read 是不是都落在同一條 haplotype 上(M13 的第二件事)。本例 10:1 偏向 HP1,符合這個樣態。

因此結論可寫成:「目前證據與 somatic 變異相容,但無法完全排除私有 germline 變異」 —— 並在報告中明確標示這項限制。

這也是 tumor-only 研究需要特別報告 precision 的原因之一: 族群資料庫無法涵蓋所有個體特異的 germline 變異。

任務三:算一次效能

假設你在這個 chr9 評估資料集上跑完流程,並與所採用的 SEQC2 truth set 比對後得到:

用實際數字算一次 precision、recall 與 F1 把本例評估資料的結果分成 TP、FP、FN 三類。 precision 表示報出的候選中有多少為 TP; recall 表示 truth set 中有多少被找到;F1 是兩者的調和平均。 下半部在假設 FP 減半且未誤刪 TP 的理想化情境下,示範三個指標的變化, 說明 F1 的改善為何可能小於 precision 的改善。 先把評估結果分成 TP、FP、FN FN:漏掉的 FN = 335 TP:抓對的 TP = 412 FP:報錯的 FP = 88 報出的候選 = 500 個 truth set 中的事件 = 747 個 precision 報出候選中 TP 的比例 412 ÷ 500 = 0.824 recall truth set 找回的比例 412 ÷ 747 = 0.551 F1 兩者的調和平均 = 0.661 若 FP 減半且未誤刪 TP(理想化情境) precision 0.824 → 0.904 +0.080 F1 0.661 → 0.685 +0.024 原因:recall 不變 —— 未被 caller 產生的 FN,後處理無法補回。
先將結果分為 TP、FP、FN,再說明 precision、recall 與 F1 各自使用哪些計數。以下數值僅適用於本例的評估設定:若 FP 減半且未誤刪 TP,precision 增加 0.080,而 F1 增加 0.024;recall 不變。

算出 。然後回答: 如果你加一個後處理過濾器,把 FP 從 88 降到 44,F1 會變成多少?這個改善值得嗎?

展開答案

目前:

  • precision=412/(412+88)=0.824
  • recall=412/(412+335)=0.551
  • F1=2×0.824×0.551/(0.824+0.551)=0.661

把 FP 減半之後(假設未誤刪 TP,屬於理想化情境):

  • precision = 412/456 = 0.904(+0.080)
  • recall = 0.551(不變)
  • F1 = 0.685只有 +0.024

值得注意的是這兩個數字動的幅度差很多。precision 增加 8 個百分點, F1 只動了 2.4 個百分點 —— 因為 FN(335)遠多於 FP(88), F1 被 recall 那一側綁住了。只要 FN 一直是大宗,再怎麼壓 FP,F1 都不會有大改變。

而且這仍是理想化假設。實際過濾器可能誤刪部分 TP, 使 FN 增加並縮小改善幅度。

值得嗎?看你的用途:

  • 如果下游需要人工逐一檢視候選點,precision 提升可減少需檢視的 FP 數量;實際節省幅度仍取決於資料集與工作流程。
  • 如果你的目標是「盡量不要漏掉任何可能的 driver」,那 recall 才是關鍵,這個改善幫助有限。
  • 如果你要在論文裡宣稱「方法變好了」,只報 F1 會低估你的貢獻,只報 precision 則是選擇性呈現。 兩個都報,並解釋 FN 的組成。

最後應追查 335 個 FN 中有多少是 caller 一開始就未產生的候選。 若占大多數,後處理無法補回這些事件,應改從 caller、覆蓋度或候選產生階段處理(guardrail #10)。

真實證據

同一個位點,兩種流程各跑一次

任務二是用想的,這一節要你真的跑出來看。 同一份腫瘤資料跑兩次:一次帶配對正常樣本,一次假裝沒有。 兩種流程把答案寫在完全不同的地方,這是新手最常卡住的一點。

同一個位點跑兩種流程,答案會寫在不同的檔案、不同的欄位 左邊是有配對正常組織時跑的 longphase-s somatic_haplotag: 它的答案寫在輸出 BAM 每一條 read 的 HP 標籤上,例如 HP 冒號 Z 冒號 2-1, 意思是這條 read 屬於 HP2 的體細胞後代;估出來的腫瘤比例另外寫在 purity.out 檔案。 右邊是只有腫瘤樣本時跑的 longphase-to phase: 它的答案寫在輸出 VCF 的 FORMAT 欄位,GT 是 0 直槓 0、GT2 是點直槓 1, 同樣表示這個變異長在 HP2 上;腫瘤比例寫在 VCF 檔頭,並多輸出一份 LOH 區段的 BED。 下方是重點:兩邊對這個位點的判斷一致,都指向 HP2, 但右邊少了正常組織這個直接對照,所以無法排除這個病人私有的遺傳變異,把握較低。 要找答案時得先知道它被寫在哪裡,這是兩個工具最常被搞混的地方。 同一個位點,兩種流程把答案寫在不同地方 先知道答案寫在哪個檔案的哪個欄位,才找得到它。 有配對正常組織 longphase-s somatic_haplotag 答案寫在輸出 BAM 的 read 標籤上 read_0142 chr9 5073770 … HP:Z:2-1 ← 這條 read 屬於 HP2 的後代 腫瘤比例寫在另一個檔案 capstone_out_purity.out 沒有 LOH 輸出 只有腫瘤樣本 longphase-to phase 答案寫在輸出 VCF 的 FORMAT 欄位 chr9 5073770 … GT:GT2:GT3 0|0:.|1:./. ← 同樣是長在 HP2 上 腫瘤比例寫在 VCF 的檔頭裡 ##tumor_purity=0.61 另外多一份 <prefix>_LOH.bed 兩邊的判斷一致,但把握不一樣 右邊少了正常組織這個直接對照,所以排除不掉「這個病人私有的遺傳變異」—— 結論要照實寫出這一點。
配對版把每條 read 的歸屬寫成 BAM 的 HP:Z: 標籤,純度另外寫一個檔; 僅腫瘤版把每個位置的歸屬寫成 VCF 的 GT2,純度寫在 VCF 檔頭,並多輸出一份 LOH 區段。 兩邊對這個位點的判斷一致,但右邊少了正常組織這個直接對照。

兩個 repo 都沒有附範例資料,要自己準備一個小區段來跑。

① 有配對正常樣本

REGION="chr9:5000000-5200000"

longphase-s somatic_haplotag \
  -s phased_normal.vcf \
  -b normal.bam \
  --tumor-snv-file tumor.vcf \
  --tumor-bam-file tumor.bam \
  -r reference.fasta \
  --region "${REGION}" \
  -t 8 \
  -o capstone_sn \
  --output-somatic-vcf \
  --somatic-calling-log

# 純度寫在這個檔案裡,不會印到畫面上
grep -A2 'Estimation result' capstone_sn_purity.out

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

② 假裝沒有正常樣本

longphase-to phase 沒有 --region 參數, 所以要先把 BAM 與 VCF 切出小區段再跑:

# 先切出區段(longphase-to 不吃 --region)
samtools view -b tumor.bam "${REGION}" > tumor_sub.bam && samtools index tumor_sub.bam
bcftools view -r "${REGION}" tumor.vcf -Ov -o tumor_sub.vcf

longphase-to phase \
  -s tumor_sub.vcf \
  -b tumor_sub.bam \
  -r reference.fasta \
  -t 8 \
  -o capstone_to \
  --caller clairs_to_ssrs \
  --pon-file PoN/gnomad.vcf.gz,PoN/dbsnp.vcf.gz \
  --strict-pon-file PoN/1000g-pon.vcf.gz \
  --loh

# 純度寫在 VCF 檔頭
grep '##tumor_purity' capstone_to.vcf

# 這個位點的三層答案
bcftools query -r chr9:5073770 -f '%POS\t[%GT\t%GT2\t%GT3]\n' capstone_to.vcf

③ 把兩邊兜起來

跑完之後回答三個問題,這才是這一節的重點:

  1. 兩邊對這個位點的歸屬(HP1 還是 HP2)一致嗎?不一致的話,哪一邊的證據比較薄?
  2. 兩邊估出來的純度差多少?差距落在什麼範圍還算合理?
  3. 僅腫瘤版多報了哪些位點?其中有多少是配對版判定為 germline 的? 這個差集就是失去正常樣本的代價,而且可以量出來。

用 IGV 看一眼

capstone_sn.bam 載入 IGV,依 HP tag 分組並跳到候選位點。 要看的是:帶 ALT 的 read 是不是集中在同一條 haplotype 上,以及兩側 germline allele 是否一致。 這些視覺訊號仍要跟 mapping/base quality、覆蓋度與過濾結果一起判讀, 單看一張截圖不足以下結論。

判讀練習

最後一題著重於區分觀測與推論。

你在同一個區域找到三個候選 somatic 變異,而且有一條 read 同時跨過全部三個, 顯示 ALT–ALT–REF。你想說「我發現了一個 subclone」。

你可以這樣寫嗎?

展開答案

不可以。這是整份教材最後要留給你的一課。

你直接觀測到的是:一個 DNA 分子片段的序列上,第一與第二個變異同時存在,第三個不存在。 這不是對細胞數量或獨立分子數量的直接計數。從這裡到「存在一個 subclone」,中間隔著三道檢查:

從「你看到什麼」到「你可以寫什麼」中間隔著三道檢查 左上是你真正觀測到的東西:一條 read 跨過三個位置,前兩個帶 ALT、第三個是 REF。 右上是不能直接寫出來的結論「我發現了一個 subclone」,中間用打叉的虛線箭頭表示這一跳被禁止。 左側由上而下是三道必須先做的檢查: 第一,這個組合是不是定序或比對錯誤造成的,需要多條彼此獨立的 read 才能確認; 第二,一條 read 是一個 DNA 分子,不是一個細胞,所以分子數不等於細胞數; 第三,要把 VAF 換算成細胞比例,必須先知道該處的拷貝數與突變拷貝數。 底部是三道檢查都做完之後,實際可以寫進報告的句子: read 證據支持一個區域層級的候選拓撲,其結構與 clone 或 subclone 的分化相容, 仍需單細胞或多區域資料驗證。 右側說明這條界線為什麼重要:觀測講的是分子的狀態,結論講的是細胞族群的存在, 兩者之間隔著取樣波動、錯誤率與拷貝數三個未知。 從「你看到什麼」到「你可以寫什麼」 中間隔著三道檢查。跳過它們,結論就超出資料撐得住的範圍。 你真正看到的 T A G 位置 ① 位置 ② 位置 ③ 一條 read 上:①② 帶 ALT,③ 是 REF。這就是全部的觀測。 不能直接跳到這裡 「我發現了一個 subclone」 這句話講的是一群細胞存在 而你手上只有一條分子的序列。 檢查一 這是真的,還是錯誤? 需要多條彼此獨立的 read 都看到同樣組合,才排除得了定序與比對錯誤。 檢查二 幾條分子,不等於幾個細胞 一條 read 是一個 DNA 分子片段,不是一個細胞(guardrail #7)。 檢查三 VAF 要換算才變成細胞比例 換算需要先知道該處的拷貝數突變拷貝數,兩者都要另外估。 這條界線為什麼重要 觀測講的是分子的狀態 結論講的是細胞族群的存在 兩者之間隔著三個未知: · 取樣到的分子夠不夠多 · 錯誤率有多高 · 那一段有幾份拷貝 寫得太滿,讀的人就無法 判斷你到底有幾分把握。 三道檢查都做完之後,可以寫的是這樣一句話 「read 證據支持一個區域層級的候選拓撲,其結構與 clone/subclone 的分化相容。」 並補上一句:這是候選解釋,尚需單細胞或多區域資料驗證。
左上是你真正看到的,右上是不能直接跳過去的結論。 中間三道檢查每一道都需要額外的證據:多條獨立 read 排除錯誤、分子數不等於細胞數(guardrail #7)、 VAF 要靠拷貝數與突變拷貝數才換算得成細胞比例。底部是三道都做完之後真正可以寫的那句話。

即使三道都做完,得到的仍是與 clone/subclone 差異相容的候選解釋, 而不是已確認的細胞族群;要確認還需要拷貝數、細胞比例或單細胞/多區域資料。

(承上)那麼,如何在報告中適當表述?

展開答案

建議表述:「在 chr9:5.03–5.11 Mb 區域的 HP1 family 中, read 證據支持一個分支式、多步驟的候選拓撲,其結構與 clone/subclone 的分化相容。 此結果是區域層級的候選解釋,尚需單細胞或多區域資料驗證。」

這樣可明確區分觀測證據、模型推論與尚待驗證的部分。

實作練習

換一個自己的位點,從頭做一次

上一節用的是指定好的 chr9 位點。這一次自己挑一個, 把整套判讀重做一遍 —— 這才是驗收。

  1. capstone_to.vcf 裡挑一個 GT2 不是 ./. 的位點。 刻意挑一個證據沒那麼漂亮的(例如支持的 read 只有 5、6 條,或 GT21|1)。
  2. 把該位點的觀測值全部列出來:coverage、支持 ALT 的條數、HP 分布、序列脈絡、PON 命中與否。
  3. 用任務一的五類證據逐條檢查一次。
  4. 再用任務二的方式問一次:如果沒有正常樣本,你會少掉哪一條?
  5. 用 IGV 看一眼,確認你的判讀跟畫面對得起來。

通過標準

寫一頁報告,內容包含:

  1. 你選的位點與所有觀測值
  2. 你的判斷(somatic/germline/定序錯誤)與逐條理由
  3. 如果改成只有腫瘤樣本,判斷會怎麼變、為什麼
  4. precision 與 recall 的計算,以及它們在這個案例裡的限制
  5. 一段明確的不確定性陳述 —— 哪些結論你有信心、哪些只是「與資料相容」

第 5 點是這份教材真正要教會的事:把證據的邊界寫出來,而不是把話講滿。

延伸學習:完成 capstone 後可補哪些背景

可依研究題目選擇補充方向:

如果你的題目是需要補的背景
配對樣本的 indel卷積神經網路(CNN)基礎、把 pileup 編碼成影像、類別不平衡的處理
僅腫瘤樣本的 indel 或甲基化梯度提升樹(XGBoost)、特徵工程、PCA
subclone 重建布林超立方體、簡約演化樹、Group Steiner tree

這三列的演算法背景都是本教材尚未涵蓋的部分 —— 教材教的是怎麼判讀證據,不是怎麼訓練模型。若研究涉及這些方向,需要另外補足。

學習檢核

本模組術語

F1
precision 與 recall 的調和平均。當資料裡 FN 遠多於 FP 時,precision 的改善對 F1 的影響有限 —— 見 M10。
HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
PON(正常樣本面板/族群資料庫(依流程而異))
PON 依分析流程有兩種用法,兩者不可互換:本教材的 tumor-only 流程以它指稱 population germline database set(如 1000G、CoLoRSdb、dbSNP、gnomAD 的聯集);GATK Mutect2 的 Panel of Normals(PoN)則由多個正常樣本建立,用來標記反覆出現的技術性 artifact。兩者都不能完全取代同一病人的 matched normal。
cancer cell fraction(癌細胞比例)
帶有某個特定突變的腫瘤細胞佔全部腫瘤細胞的比例。用來區分 clonal(1)與 subclonal(<1)突變。不等於 VAF。
copy number(拷貝數)
某段基因體在細胞內的拷貝數。多數正常常染色體區段為 2,可再分為 major 與 minor allele copy number。
precision(精確率)
所有 calls 中實際為真陽性的比例:TP / (TP + FP)。後處理常以提升此指標為目標。
recall(召回率)
在指定評估範圍內,所有真陽性中被找出的比例:TP / (TP + FN)。若只對固定的 caller 候選集做後處理,recall 只能維持或下降,不能恢復 caller 從未輸出的真陽性;報告時應說清楚這個候選集範圍。
triplet graph
LongPhase-TO 判斷候選變異真假時用的最小結構:候選位置加上左右各一個變異,共三個位置。把 read 上看到的 allele 組合畫成路徑後,真的 somatic 變異會形成一條「跟某一條 germline haplotype 只差候選這一格」的新路徑;定序錯誤則湊不出一致的路徑。因為左右兩側都要對得上,所以三個位置是最小單位。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。

研究指引 · Subclone 系統發生重建 · Part 1 — from variants to a tree

上篇:從一堆變異到一棵腫瘤演化樹

先說清楚要重建的是什麼、為什麼值得重建,再說明頻率路線走到哪裡卡住、長讀把哪一件事從推論變成觀測,以及隨之而來的分析單位與限制。

建議先修:甲基化建議先修:LongPhase-TO

本模組學習目標

  • 界定 clone tree 的內容、輸入與輸出,並說明重建它的價值
  • 說明 VAF 與甲基化 β 值何以同為 marginal distribution,而演化樹所需者為 joint distribution
  • 解釋同一組 CCF 群集何以同時相容於線性與分支兩棵 clone tree,以及 parsimony 與 latent node 在其中的角色
  • 說明 epimutation 何以構成解析度高於 DNA 突變的時鐘,以及 epiallele 至少須跨越幾個位點方可量測
  • 指出長讀將哪一項由推論轉為觀測,並計算該項成立的距離範圍
  • 切出連鎖視窗與單倍型連鎖區段,並說明為何連鎖區段數大於連鎖視窗數
  • 說明 read-AF 在此路線中取代了頻率譜的哪一個角色

為什麼重要

課程模組至 Capstone 為止。前述各章所回答的均為同一類問題: 某個位置是否存在變異該變異位於哪一條染色體。 以下三頁轉向另一類問題,性質為研究方向的說明,而非課程。

重建的對象

腫瘤並非由單一均質的細胞群體構成。它自單一細胞起始, 於分裂過程中持續累積 ,因而分化為數個群體, 各自帶有不同的變異組合;M2 稱這些群體為

這些群體之間存在先後關係:某一群衍生自另一群。 將「何者衍生自何者」表示為圖,即得一棵樹 —— 節點為一群細胞,邊代表「在祖先既有的變異之上再取得一個」。 此樹稱為 即為以下三頁所要重建的對象

研究目標:用長讀定序把 subclone 的先後順序重建出來 上排三格由左到右說明這件事的形狀。 第一格是腫瘤真實的樣子:同一顆腫瘤裡有好幾群細胞,每一群帶著不同的變異組合, 而且群與群之間有先後關係 —— 某一群是從另一群長出來的。 第二格為定序實際輸出的內容:細胞被打碎並混合, 剩下的是一堆看不出來源的片段,以及每個位點各自的變異頻率,群的資訊在這一步掉了。 第三格是要重建回來的東西:一棵樹,節點是一群細胞, 邊代表在祖先的變異之上又多拿到一個,這棵樹叫 clone tree。 中排說明長讀在這裡的角色。短讀僅能給出各位點各自的頻率,屬逐位點分離的資訊; 長讀一條分子就跨過好幾個位點,因此直接看得到「這幾個變異有沒有出現在同一個分子上」, 而那正是決定先後順序需要的東西。 最下方是這兩頁的研究目標:用長讀把 subclone 的先後順序重建出來, 並且說清楚重建到哪裡為止是可信的。 讀法是:定序把群的資訊打散,重建就是把它拼回去,而長讀多帶了一種拼得回去的線索。 研究目標:把 subclone 的先後順序重建出來 ① 腫瘤真實的樣子 群 A 群 B 群 C 好幾群細胞,各帶不同的變異組合 而且群之間有先後關係 ② 定序所得 VAF 0.31 · 0.18 · 0.29 細胞被打碎,看不出誰跟誰同一群 群的資訊在這一步掉了 ③ 要重建回來的 誰從誰長出來 —— 一棵 clone tree 定序 重建 長讀在這裡的角色 短讀 只夠給每個位點各自的頻率 長讀 一條分子就跨過好幾個位點, 因此直接看得到「這幾個變異在不在同一個分子上」 這兩頁的研究目標:用長讀把 subclone 的先後順序重建出來 並且說清楚重建到哪裡為止是可信的。
定序過程消去了「哪些細胞屬於同一群」的資訊,重建即為將其還原。 中間一格為實際可得的資料:一批無法辨識來源的片段,以及各位點各自的頻率。 下半說明長讀的作用 —— 單一條分子即跨越多個位點, 因而可直接觀測「這幾個變異是否位於同一個分子上」,而該資訊正是決定先後次序所需者。

困難在於中間一格:觀測資料既不包含該樹,也不包含任何一顆完整的細胞。 bulk 定序將所有細胞打碎並混合,可得者僅有片段與頻率,樹須由此反推。

重建的價值

  • 用藥 —— 兩個可標靶的變異若位於同一群細胞,單一藥物可能同時作用於兩者; 分屬兩群則否。此即 M0 開篇的問題。
  • 抗藥 —— 治療後復發者通常源自原已存在的某一小群。 須先確定群體的組成與各自的比例,方能判斷防治的對象。
  • 時序 —— 最早發生的變異,往往即為驅動該腫瘤生長的變異。

M9 的小規模示範

M9 以兩個位點示範過完整的流程:細胞僅會取得變異而不會回復, 故狀態由 00 轉為 10,再轉為 11; bulk read 在這兩個位置上即為一個 0/1 向量; 重建即為在狀態方格上尋找一棵樹,自 00 出發、每一步僅翻轉一個位元、 可達所有觀測狀態且步數最少。

以下三頁處理的是同一問題的放大版本 —— 由兩個位點放大至數千個變異, 由單一連鎖視窗放大至整個基因體。放大之後出現兩個在小規模下不顯現的問題, 而這三頁即針對該二問題。

三篇的分工

內容
上篇
(本頁)
問題本身的結構。此領域二十年來的主要取徑、頻率路線的限制所在、 長讀將哪一項由推論轉為觀測,以及其代價。末節實作一張狀態表的抽取。
中篇 多變異連鎖視窗所提供者並非更多資料點,而是資料點之間的關係。 先寫出僅以 VAF 重建的完整流程作為對照基準,指出它三項限制各落在哪一個參數上, 再說明那些關係能補上的三格分別是什麼。
下篇 把三者合成一條聯合估計式,並處理它能不能真的建起來: 約束的來源、兩道品質閘門、兩類會產生假約束的誤讀,以及實際產量。

以下一項性質貫穿全篇。此問題已有二十年的研究史, 而它具有一項根本的性質:同一份資料可支持不只一個答案。 一項跨機構評比將 31 個 subclone 重建程式置於 51 個模擬腫瘤上執行,共 12,061 次 (2024 年線上發表,2025 年正式刊出)。其結論並非某一程式較為準確,而是 —— 更換程式對結果的影響大於更換腫瘤

同一份輸入、不同程式、不同答案,而各個答案皆與資料相符。 此現象並非實作缺陷所致,而是資料本身未攜帶足以唯一決定答案的資訊。 上篇要確立的是:所缺的是哪一部分資訊、短讀資料何以無法取得它, 以及長讀取得該資訊之後,問題的結構如何改變。

概念與互動

此路線的四個轉折

以下先回顧此領域的發展。四個轉折各自解決了前一階段的一個問題, 同時各自留下新的問題。

subclone 重建的四個轉折:從頻率分群到分子層級的共現觀測 四列,由上到下是時間順序。 第一列 2014 到 2015 年,PyClone、SciClone 與 PhyloWGS 用變異頻率分群, 第一次讓「腫瘤裡有幾群細胞、各佔多少」變成可計算的問題; 留下的問題是誰是誰的祖先仍需額外偏好才能決定。 第二列 2016 年,改成量分布的形狀:把變異數累積起來對 1 除以 f 作圖, 中性演化時那條線是直的, 904 個腫瘤中有 323 個符合;留下的問題是 driver 變異的頻率偏向兩端,中性比例可能被高估。 第三列 2024 年的大規模評比,31 個程式在 51 個模擬腫瘤上跑, 把「答案不唯一」量化出來:換程式對結果的影響大於換腫瘤。 第四列是換一種資訊來源,甲基化提供快約五個數量級的時鐘, 長讀直接觀測同一分子上的共現;代價是這種觀測只在一條 read 跨得到的距離內成立。 讀法是:前三列都在同一份資訊裡想辦法,第四列才換掉資訊本身。 subclone 重建的四個轉折 前三個轉折都在同一份資訊裡想辦法;第四個才換掉資訊本身。 年代 這一步做到了什麼 留下什麼問題 2014–2015 頻率分群 用變異頻率把突變分成幾群 PyClone · SciClone · PhyloWGS 誰是誰的祖先,還是要靠 額外的偏好才選得出來 2016 頻率譜的形狀 不分群,改看累積曲線的斜率 904 個腫瘤中 323 個符合 1/f driver 頻率偏向兩端, 中性的比例可能被高估 2024 大規模評比 把「答案不唯一」量化出來 31 個程式 × 51 個模擬腫瘤 換程式的影響比換腫瘤大 —— 資訊本身就不夠 2014–2025 換一種資訊 甲基化:快約五個數量級的時鐘 長讀:同一分子上的共現是觀測值 共現只在一條 read 跨得到 的距離內成立
四個轉折並非彼此取代,而是各自補足前一階段所不可見者。 ① 以頻率將變異分群,首次使「腫瘤含幾群細胞」成為可計算的問題。 ② 發現頻率分布本身具有形狀,可用於判定是否存在天擇。 ③ 大規模評比顯露前兩者共同的上限:答案不唯一。 ④ 兩種新的資訊來源 —— 甲基化提供解析度更高的時鐘,長讀提供分子層級的共現關係。

第一步:將一批變異的頻率繪為直方圖 —— mutation frequency spectrum

設一份腫瘤樣本含數千個 somatic 變異,各自具有其 。 將這數千個 VAF 繪為直方圖,可得一張具有結構的圖, 稱為

mutation frequency spectrum:一份腫瘤樣本裡幾千個 somatic 變異的 VAF 直方圖 橫軸是 VAF,縱軸是落在該區間的 somatic 變異個數。圖上有三塊結構。 第一塊是位於 VAF 0.30 附近的峰,代表所有腫瘤細胞都帶有的變異; 在拷貝數正常、變異只在其中一份拷貝上的條件下,峰的位置恰好是純度除以二, 所以峰在 0.30 表示純度 0.60。 第二塊是峰左邊 VAF 0.18 附近的鼓起,代表只有一部分腫瘤細胞帶有的變異, 每一個這樣的鼓起對應一群 subclone。 第三塊是中性演化檢定用的區間。要注意檢定的對象不是這張直方圖本身: 直方圖的形狀是頻率倒數的平方,真正呈直線的是把 「出現在某個頻率以上的變異數」累積起來之後對頻率倒數作圖的那條線。 原始研究刻意只在 VAF 0.12 到 0.24 這一段擬合,因為更低頻的一端混著 深度不足造成的假陽性,更高頻的一端已經進入 clonal 峰。 圖上最左邊三根長條就是那個假陽性區,標了叉號,不能拿來擬合。 讀法是:分群看第一塊與第二塊,天擇要換成累積曲線並且只用中間那一段。 把幾千個 somatic 變異的 VAF 畫成直方圖 三塊結構各自回答不同的問題,而第三塊不能直接看這張圖。 變異數 ✗ 假陽性區 ② subclonal 肩 ① clonal 峰 峰在 0.30 → 純度 0.60 0 0.1 0.2 0.3 0.4 0.5 ③ 中性檢定只在這一段擬合(VAF 0.12–0.24) VAF = 帶有此變異的 read 佔該位點所有 read 的比例 ① 所有腫瘤細胞都帶有。CN=2、multiplicity=1 時峰的位置恰好是純度 ÷ 2,可反推純度。 ② 只有一部分腫瘤細胞帶有。每一個鼓起對應一群 subclone —— 這是「分群」要抓的東西。 ③ 不可直接量測此圖的斜率:直方圖為 1/f²,須先將變異數累積,該線方對 1/f 呈直線。
三塊結構各有其意義。 最右側的峰對應全部腫瘤細胞皆帶有的變異,其位置由 決定(拷貝數正常、變異僅位於其中一份拷貝上時,恰為 purity ÷ 2)。 左側的肩對應僅一部分腫瘤細胞帶有的變異 —— 每一個肩對應一群 中性演化的檢定所用者為中段(VAF 0.12–0.24),且其量測對象並非此直方圖 —— 須先將變異數累積後對 1/f 作圖,該線方為直線。 最左側三根標記叉號的長條為假陽性區:深度不足時定序錯誤亦落於該處,不可用於擬合。 區分 ① 與 ② 即為分群;③ 所問者為是否存在天擇。

2014 至 2015 年間出現三項影響最大的做法,其思路均為對此圖分群SciClone(2014)以 beta 混合模型(以數個鐘形分布擬合一張直方圖)擬合 VAF, 且主要僅採用拷貝數正常、無 的區段,因為僅該處的 VAF 易於解釋。 PyClone(2014)改以 Dirichlet process(不需預先固定群數的分群模型) 對「帶有該變異的細胞比例」分群,並將 與正常細胞的混入一併納入模型。 PhyloWGS(2015)進一步將分群與建樹合為同一個推論。

2016 年出現另一種取徑:不進行分群,而直接分析分布的形狀。 其機制為:腫瘤指數成長時,發生越早的變異出現於越多細胞中,而此類變異本身數量越少。 將「出現於至少比例 f 以上的變異」計數,該累積數量在中性演化下正比於 1/f, 故累積曲線對 1/f 作圖為一條直線。 在 14 種癌別、904 個腫瘤中,有 323 個符合此直線關係。

以下兩點須予區分。 其一,直線為累積曲線的性質,而非直方圖的性質 —— 直方圖本身的形狀為 1/f2(累積曲線的微分),直接量測直方圖的斜率將得到錯誤的指數。 其二,原始研究刻意僅在 VAF 0.12 至 0.24 一段擬合: 更低頻的一端混有假陽性,更高頻的一端已進入 clonal 峰。

後續研究指出符合中性的比例可能被高估 —— driver 變異的頻率本即偏向 0 與 1 兩端,不易在中間頻率被觀測到, 故「該線為直線」不等同於「不存在天擇」。

由 VAF 至 CCF:換算所需的分母

前述分群的對象並非 VAF,而是 。 理由已見於 M8:VAF 為「帶變異的 read 所佔比例」,CCF 為「帶變異的癌細胞所佔比例」, 兩者相差一段換算。

換算式的分母並非 2:

從 VAF 換算到 cancer cell fraction 要經過三個估計值 上半是換算式:CCF 等於 VAF 乘上一個分數, 分子是純度乘腫瘤拷貝數再加上 2 乘以 1 減純度,分母是純度乘 multiplicity。 式子裡有三個量不是直接量到的:純度與腫瘤拷貝數各自來自另一支程式, multiplicity 也就是變異位在幾份腫瘤拷貝上,通常只能在 1 與 2 之間猜。 下半用同一個 VAF 0.30 示範三組假設的結果: 純度 0.60、拷貝數 2、multiplicity 1 時 CCF 是 1.00,讀成所有腫瘤細胞都帶有; 只把 multiplicity 改成 2,CCF 掉到 0.50,同一個變異就被讀成只有一半腫瘤細胞帶有; 把拷貝數改成 3,CCF 變成 1.30,超過 1 表示這組假設本身不成立。 讀法是:CCF 是三個估計值的商,其中 multiplicity 猜錯一格就足以讓 clonal 與 subclonal 互換。 CCF 是三個估計值的商 換算式的分母不是 2。三個量各自有誤差,其中一個通常只能猜。 CCF = VAF × 純度 × 腫瘤拷貝數 + 2 × (1 − 純度) 純度 × multiplicity 純度:另一支程式估的 腫瘤拷貝數:另一支程式估的 multiplicity:通常只能在 1 與 2 之間猜 同一個 VAF = 0.30,在三組假設下落在哪裡 CCF > 1 → 假設不成立 純度 腫瘤拷貝數 multiplicity CCF 0.60 2 1 1.00 0.60 2 2 0.50 0.60 3 1 1.30 0 0.5 1.0 1.5 multiplicity 從 1 改成 2,CCF 就少一半 —— 剛好足以把一個 clonal 變異讀成 subclonal。 前兩列都是合理的讀法,資料本身分不出來;只有第三列的 CCF > 1 才是假設出錯。
由 VAF 至 CCF 須經過三個估計值。 純度拷貝數來自其他程式,各自帶有誤差; (變異位於幾份腫瘤拷貝上)通常僅能在 1 與 2 之間推定。 推定偏差一格,CCF 即差兩倍 —— 而 CCF 相差兩倍已足以將 clonal 變異誤讀為 subclonal。 下方三條軸所繪為同一個 VAF = 0.30 在不同假設下的落點。

因此頻率路線的第一層不確定性源於換算:CCF 為三個估計值的商, 而三者皆可能偏誤。此層已於 M8 標記為「重要區分 #3:VAF 不等於 cancer cell fraction」。

以下互動用於確認一項關係:CCF 固定時,純度改變會使 VAF 如何移動。 峰的位置之所以可反推純度,依據即為此關係。

互動元件(列印版保留說明;數位版可操作)
固定 CCF=1(全部腫瘤細胞皆帶有),僅改變純度。 觀察 VAF 峰位置的移動 —— 前述頻率譜之所以能由峰位置反推純度,所用者即為此關係。 反之,純度估計偏誤將使整張圖的橫軸一併偏移。

群集之後:clone tree 仍不唯一

設換算完全正確,得到三群變異,CCF 分別為 1.0、0.6、0.3。 其次須將此三群排為一棵 ,即確定何者為何者的祖先。

可用的約束僅有一條,且屬純粹的算術:一群細胞的數量不可能多於其祖先。 故子節點的 CCF 不得超過父節點;若一個節點有兩個子節點,兩者的 CCF 之和亦不得超過該節點。

同一組 CCF 值,線性與分支兩棵 clone tree 都通過檢查 左右兩邊用的是同一組 CCF 值:1.00、0.60 與 0.30。 左邊是線性樹,0.30 那群是 0.60 那群的後代,檢查條件是 0.30 小於等於 0.60,成立。 右邊是分支樹,0.60 與 0.30 是兄弟,各自從 1.00 長出來, 檢查條件是 0.60 加 0.30 等於 0.90,小於等於 1.00,也成立。 每棵樹下方畫出對應的細胞群組成: 左邊帶 C 的細胞完全包在帶 B 的細胞裡面,右邊兩者互不重疊。 兩種情況的生物學意義完全不同,一邊是一條線上的連續演化,一邊是兩支平行分支, 但它們對得上同一組數字。 讀法是:CCF 只給出每一群有多大,不足以決定誰是誰的祖先。 同一組 CCF:1.00 · 0.60 · 0.30 兩棵樹都通過那條算術檢查,所以光靠 CCF 選不出來。 線性:0.30 那群是 0.60 那群的後代 1.00 群 A 0.60 群 B 0.30 群 C 0.30 ≤ 0.60 ✓ 全部腫瘤 帶 B 帶 C 分支:0.60 與 0.30 各自從 1.00 長出來 1.00 群 A 0.60 群 B 0.30 群 C 0.60 + 0.30 = 0.90 ≤ 1.00 ✓ 全部腫瘤 帶 B 帶 C 差別在最下面那排:左邊「帶 C」完全包在「帶 B」裡,右邊兩者互不重疊。 而這件事 CCF 沒有記錄。要選出一棵樹,方法必須自己補上一個偏好 —— 通常是取步數最少的。
同一組 CCF 值 1.0 / 0.6 / 0.3,兩棵樹皆通過該算術檢查。 :線性 —— 0.3 一群為 0.6 一群的後代(0.30.6 ✓)。 :分支 —— 0.6 與 0.3 為兄弟,各自衍生自 1.0(0.6+0.3=0.91.0 ✓)。 兩棵樹的生物學意義完全不同:左為單一路徑上的連續演化,右為兩支平行的分支。 但兩者對應同一組數字,故僅憑 CCF 無法擇一。

在此情形下,方法必須引入額外的偏好。最常用者為 : 於所有相容的樹中選取步數最少者。此為合理的偏好,但它是偏好,而非證據。 此外,為使樹得以連通,有時須補入未獲任何資料直接支持的中間狀態, 此類節點稱為

以兩個位點即可說明其必然出現的原因。設僅觀測到 0011 兩種狀態,無任何一條 read 為 1001。 但每一步僅能增加一個突變,故由 0011 之間必然經過 1001。方法只能補入其一,而所補入者 係「模型為連通所假設」,並非觀測所得。

解讀邊界:latent node 不一定是未觀測細胞群

latent node 並非「一群尚未被觀測到的細胞」。 它可能對應真實的中間世代(該群細胞其後被取代),亦可能僅為此模型記帳上的需要。 且此處有兩種並列的補法(補 10 或補 01),資料同樣無從擇一。

成因:頻率為 marginal distribution,樹所需者為 joint distribution

前述兩層不確定性表面上為兩個獨立的問題,實則同一。以兩個位點即可完整說明。

設一個連鎖視窗內有兩個 somatic 位點 A、B。頻率給出兩個數字: A 出現於 50% 的細胞、B 出現於 30% 的細胞。 此二數字各自描述單一位點,此類分布稱為

而樹所要回答的問題為:同時帶有 A 與 B 的細胞佔多少。 此為兩個位點聯合的分布,稱為 。 由邊際分布無法推得聯合分布 —— 此非統計方法不足,而是該資訊確實不存在於資料中。

更精確地說,邊際並非全無作用,它給出一個區間: 同時帶有兩者的比例至多不超過 0.30(不可能多於帶有 B 者), 至少不低於 0.50+0.301=0(兩者可完全不重疊)。 故邊際將答案限定於 0 至 0.30 之間,而此區間無法再行收窄。 樹的形狀在此區間的兩端則完全不同。

邊際頻率相同的兩種細胞組成,聯合計數與樹卻不同 左右兩種細胞組成的邊際頻率刻意做成完全一樣:A 出現在 50% 的細胞裡,B 出現在 30% 的細胞裡。 左邊的組成是:3 個細胞同時帶有 A 與 B,2 個只帶 A,5 個都沒有。 右邊的組成是:5 個只帶 A,3 個只帶 B,2 個都沒有,沒有任何細胞同時帶有兩者。 兩邊各自數出來的 A 都是 5 個、B 都是 3 個,所以邊際頻率相同。 差別出現在聯合計數表,而且剛好互換:左邊「只帶 B」的 01 是 0 個、11 是 3 個; 右邊 01 是 3 個、11 是 0 個。 因此左邊相容的樹是一條線,B 出現在已經有 A 的細胞裡; 右邊的樹分岔,因為只帶 B 的那群細胞必須另外從起點長出來。 兩邊都是每個突變只發生一次就解釋得通的樹。 要點:邊際頻率不提供 01 與 11 兩格各自的計數,而樹的形狀正取決於此二格。 頻率是邊際分布,樹要的是聯合分布 左右兩邊的邊際頻率刻意做成完全相同 —— 重點正是「光看這兩個數字分不出來」。 組成 甲 A = 0.50 B = 0.30 10 個腫瘤細胞。小方塊:左=A、右=B,實心=帶有 聯合計數:每種狀態各有幾個細胞 00 10 01 11 5 2 0 3 → 與這張表相容的樹 00 +A 10 +B 11 01 沒有任何細胞 線性:B 只出現在已經有 A 的細胞裡 組成 乙 A = 0.50 B = 0.30 10 個腫瘤細胞。小方塊:左=A、右=B,實心=帶有 聯合計數:每種狀態各有幾個細胞 00 10 01 11 2 5 3 0 → 與這張表相容的樹 00 +A +B 10 01 11 沒有任何細胞 分支:有一群細胞只帶 B,完全不帶 A 差別只有兩格:0111 誰是空的 —— 而邊際頻率對這兩格完全沒有意見。 兩邊都是「每個突變只發生一次」解釋得通的樹。若兩格都不是空的,就連這種樹都不存在了。
兩種細胞組成,上方兩個頻率刻意設為相同(0.50 與 0.30), 用以顯示僅憑此二數字無法區分兩者。 :帶有 B 的 3 個細胞亦全部帶有 A,故 B 為 A 的後代,樹為線性。 :無任何細胞同時帶有兩者,另有 3 個僅帶 B,故 B 須另行自起點衍生,樹為分支。 下排為差異所在:聯合計數表,且兩者恰好互換 —— 左側 01 為空,右側 11 為空。 此二格對應的邊際頻率完全相同。
互動元件(列印版保留說明;數位版可操作)
滑桿僅改變一項:同時帶有 A 與 B 的細胞數。 上方兩個邊際頻率始終不變,下方的聯合計數表與右側的樹則隨之改變。 將滑桿由 3 移至 0:兩端分別對應上圖的左與右,同一組邊際頻率相容於兩棵不同的樹。 中間的 1 與 2 值得留意 —— 四種狀態皆出現時,連「每個突變僅發生一次」的樹都不存在, B 必須發生兩次。真實資料中此情形通常表示某個 call 為假,或若干條 read 被指派至錯誤的 haplotype, 而此點僅能由聯合觀測發現。 切換至「僅有邊際頻率」,聯合計數表全部轉為問號,此即短讀路線的處境。

回到前述兩層不確定性,兩者為同一件事的兩個面向: CCF 換算是在估計邊際,簡約性則是在推定聯合。 短讀路線的每一項模型假設,都是在補足聯合分布這一格。

甲基化面臨同一限制:β 值與 epiallele

既然序列上的頻率不足,更換標記是否有所改善?為自然的候選。

其吸引力在於速率。(甲基化狀態的隨機翻轉)的發生速率, 文獻常引的量級為每個 、每次細胞分裂 105104;DNA 突變則為每個鹼基 1091010。 同量級相比,快約五個數量級。此即表示甲基化為解析度高得多的時鐘 —— 兩群細胞分離僅數十代時,序列上尚無任何差異,甲基化上已可觀測。

該速率應視為量級而非定值:它隨位點與量測方式差異甚大, 專供作時鐘之用的位點另有估至 103 量級者。 故「甲基化快得多」一項穩固,「快幾個數量級」則不宜作為定值引用。

此取徑已達規模化。2015 年一項研究取 19 位低度膠質瘤病人的原發與復發檢體, 分別以甲基化與以突變建樹,兩棵樹高度吻合(相關係數 0.56 至 0.90), 顯示甲基化所攜帶的譜系訊號為真 —— 惟其為「高度吻合」而非「同一棵樹」, 該研究中亦有病人的甲基化訊號跨越了基因型上已分離的分支。 2025 年的一項研究更進一步:僅以 bulk 甲基化資料,在 1,976 個淋巴系癌樣本上 推估腫瘤的生長速率與發生年齡,不需定序基因體。

然而甲基化的常規讀法具有相同的限制。單一 CpG 位點的甲基化程度以 β 值表示, 即該位點所有分子中甲基化者的比例。此亦為一個邊際。

逐位點的 β 值相同,分子層級的 epiallele 組成卻完全不同 左右兩邊都是一個區域裡的四個 CpG、六條分子。 兩邊每一個 CpG 的甲基化比例都恰好是 0.50,所以逐位點統計的 β 值完全相同。 左邊六條分子各自有不同的甲基化組合,共六種不同的組合, 而且每條分子甲基化的個數也不一樣,這是同一群細胞的隨機起伏。 右邊只有兩種組合,三條分子四個 CpG 全部甲基化,另外三條全部未甲基化, 這代表兩群不同的細胞。 差別只在把同一條分子上的四個 CpG 一起看的時候才出現, 這種一起看的組合稱為 epiallele。 要注意的是,右邊那種乾淨的兩群也可能是同一群細胞的兩條 haplotype, 一條甲基化、一條不甲基化,這種情形叫 allele-specific methylation; 要分開得看這兩群 epiallele 跟 HP 標籤對不對得上。 讀法是:β 值是邊際統計,跟 VAF 有一樣的限制。 β 值也是邊際統計 實心=甲基化,空心=未甲基化。左右兩邊每個位點的 β 值都是 0.50。 組成 甲:同一群細胞的隨機起伏 1 2 3 4 CpG β 值(每個位點各自統計) 0.50 0.50 0.50 0.50 不同的 epiallele:6 種,每條分子甲基化的數量也不同 組成 乙:兩群細胞,各自一致 1 2 3 4 CpG β 值(每個位點各自統計) 0.50 0.50 0.50 0.50 不同的 epiallele:2 種 同一條分子上的四個 CpG 一起看,才分得出「一群細胞在起伏」與「兩群細胞」。 惟「兩群」亦可能為同一群細胞的兩條 haplotype,一條甲基化、一條不甲基化 —— 須與 HP 標籤比對方能區分。
一段區域內的四個 CpG,左右兩側各位點的 β 值皆為 0.50, 逐位點統計完全無法區分。 :每個分子皆為雜亂的半甲基化,對應同一群細胞的隨機起伏。 :分子分為兩組,一組全甲基化、一組全不甲基化。 兩者的差異同樣僅在同一分子上的四個 CpG 聯合觀測時出現。 將單一分子上的甲基化組合視為一個單位,該單位稱為 惟右側的兩組未必對應兩群細胞,見下方警告。

2014 年的 methclone 即在執行此項工作:它自 read 直接計數 epiallele 的組成, 再以組成的熵變化量衡量兩個時間點之間譜系結構的改變。

資料需求:epiallele 分析需要多少 CpG 與深度

該形式為此類做法所共有,各工具所選的數值不同而已。 methclone 要求單一條 read 跨越 4 個相鄰的 CpG(對應 24=16 種可能組合), 且該位置須有 60× 以上的深度,組成比例方能估得準確。 亦即:同一條分子上須有足夠多的 CpG,且此類分子須有足夠的數量 —— 4 為 methclone 的選擇,並非自然常數。

短讀相對於此門檻的位置

人類基因體約有 2,800 萬個 CpG,分布於 3.1 Gb 上, 平均每 100 bp 一個。CpG island 內部則密集得多,約每 10 至 20 bp 一個。

一條 read 能同時看到幾個 CpG:短讀與長讀的差距 上半是基因體的平均 CpG 密度,大約每 100 個鹼基一個 CpG。 在這個密度下,一條 100 bp 的短讀只跨得到一個 CpG, 而一條 20 kb 的長讀長度是圖上這一整段的十倍,跨過大約 200 個 CpG。 下半是 CpG island 內部的密度,大約每 15 個鹼基一個 CpG。 在這裡 100 bp 的短讀跨得到約七個 CpG,達到 epiallele 分析所需的四個門檻。 兩者合起來說明:短讀要做分子層級的甲基化分析,只做得到 CpG island 這類密集區域, 長讀則不必挑區域。 讀法是:門檻不是四個 CpG 這個數字本身,而是「哪些區域達得到這個門檻」。 4 個 CpG 這個門檻,決定了短讀能分析哪些區域 短線=一個 CpG 的位置(這張圖不表示它甲基化與否)。長圓角矩形=一條 read 蓋到的範圍。 ① 基因體平均:約每 100 bp 一個 CpG(全基因體約 2,800 萬個) 100 bp read → 只跨到 1 個 CpG 這一段 = 2,000 bp 20 kb read:長度是這一整段的 10 倍,跨過約 200 個 CpG ② CpG island 內:約每 15 bp 一個 CpG 100 bp read → 跨到 7 個 CpG,達到門檻 這一段 = 200 bp 所以短讀的 epiallele 分析只做得到 CpG island 這類密集區,長讀不必挑區域。 而且同一條長讀上還帶著序列變異,所以序列與甲基化的聯合分布是同一次觀測給的。
同一段基因體,兩種讀長所能同時觀測的 CpG 數量。 :100 bp 短讀在基因體平均密度下約僅跨越 1 個 CpG,僅落於 CpG island 內時方能跨越 4 個以上 —— 亦即 epiallele 分析在短讀上僅適用於基因體的一小部分區域:20 kb 長讀在平均密度下跨越約 200 個 CpG,且不需篩選區域。 同一條分子上同時帶有序列變異,故序列與甲基化的聯合分布來自同一次觀測。

長讀將 joint distribution 轉為直接觀測

至此轉折已明確。一條 對應一個分子, 其在多個位點上的 allele 為一次觀測所得的組合,而非由兩個邊際推得。 亦即:聯合分布不需推估,可直接計數。

以下例說明兩者的差異。同一顆腫瘤、同樣兩個 somatic 位點、同樣十條分子, 兩種讀長所算得的 VAF 完全相同,故差異僅可能來自組合是否可觀測:

同樣的兩個 VAF,短讀留下兩棵樹,長讀只剩一棵 左右兩半用的是同一顆腫瘤、同樣兩個 somatic 位點、同樣十條分子, 兩邊算出來的 VAF 也完全一樣:A 是零點五零,B 是零點三零。 差別只在讀長。 左半是短讀:兩個位點相距三 kb,沒有任何一條 read 同時蓋得到, 所以每條 read 只在一個位點上有值。能算出來的就只有那兩個 VAF。 這兩個數字同時相容於兩棵樹:一棵是 B 長在 A 的細胞裡,另一棵是兩者各自從起點長出來。 兩棵都通過檢查,所以分不出來。 右半是長讀:一條分子就跨過兩個位點,所以每條 read 在兩個位點上都有值, 可以直接數出組合。十條裡面,兩個位點都是參考型的有五條, 只帶 A 的有兩條,兩個都帶的有三條,而只帶 B 的一條也沒有。 只帶 B 的分子不存在這件事,直接排除掉「兩者各自長出」那棵樹, 因為那棵樹必須要有只帶 B 的細胞。於是只剩下一棵。 最下方點出關鍵:多出來的不是精度,是一種新的觀測 —— 邊際頻率不提供哪一格為空的資訊,而該空缺的一格正是決定樹形者。 讀法是:兩邊的 VAF 刻意做成一模一樣,所以差別只可能來自組合。 同樣的兩個 VAF,短讀留下兩棵樹,長讀只剩一棵 兩側為同一顆腫瘤、同樣十條分子。VAF 刻意設為相同,故差異僅可能來自組合是否可觀測。 短讀:一條只蓋得到一個位點 A 相距 3 kb B VAF(A) = 5/10 = 0.50 VAF(B) = 3/10 = 0.30 能算的就只有這兩個數字 —— 組合看不到 相容的樹 B 長在 A 裡 兩者各自長出 長讀:一條跨過兩個位點 A 相距 3 kb B VAF(A) = 5/10 = 0.50 VAF(B) = 3/10 = 0.30 一模一樣,但還數得出組合:只帶 B 的 0 條 相容的樹 B 長在 A 裡 兩者各自長出 這棵樹需要「只帶 B」的細胞 但一條分子也沒有 長讀多給的不是精度,是一種新的觀測:哪一種組合是空的 邊際頻率不提供此資訊,而該空缺的一格正是決定樹形者。
左右兩側的 VAF 刻意設為相同:A=0.50、B=0.30。 左側兩個位點相距 3 kb,短讀無法跨越,故每條 read 僅在一個位點上有值 —— 可計算者僅有該二數字,而該二數字同時相容於兩棵樹。 右側單一條分子即跨越兩個位點,因而可計數組合:兩者皆帶有者 3 條, 僅帶 B 者為零。「兩者各自衍生」該棵樹需要存在僅帶 B 的細胞,因而被排除,僅餘一棵。

此例的關鍵在於被排除的那一格。 短讀一側並非量測較不準確 —— 其兩個 VAF 與長讀完全相同 —— 而是缺少一種觀測:哪一種組合為空。 邊際頻率不提供此資訊,而該空缺的一格正是決定樹形者。

與前述區間的說法對照:邊際僅將「同時帶有兩者的比例」限定於 0 至 0.30 之間, 兩端各對應一棵樹,中段無法收窄。此例中長讀將該比例直接計數為 0.30, 恰為區間的上界,即「帶有 B 的細胞全部亦帶有 A」,區間收斂為一點,樹因而確定。

M9 已說明此觀測的形式:將每條 read 在 k 個 somatic 位點上的 R/A 記為 0/1 向量, 即得一張狀態表;求步數最少且可達所有觀測狀態的樹,即為該連鎖視窗的候選演化次序。 在本頁的座標中,該狀態表即為聯合分布的直接樣本, 而非 CCF 群集那類邊際的整理。

惟狀態表的每一列對應分子而非細胞,此點易生誤讀。 單一細胞的兩條染色體會產生兩條不同 haplotype 的 read,同一條染色體亦可能被多條 read 覆蓋。 故「狀態 11 有 6 條 read」不等同於「有 6 個細胞同時帶有兩個變異」。 此即 M0「read 為分子片段的觀測,而非細胞標籤」一項警告在此路線上的具體後果。

尚有第二層結構須先區分。發生於某一細胞的某一條染色體上, 故同一個 somatic 位點的變異僅會出現於其中一條 上。 先將 read 依 分為兩組再各自建樹, 一方面符合生物學,一方面使各組的狀態空間減半。

代價:分析單位縮小為單倍型連鎖區段

聯合觀測有其代價:它僅在單一條 read 可跨越的距離內成立。 兩個位點若相距 100 kb,無任何一條 read 同時覆蓋兩者, 則該二位點之間的聯合分布與短讀時期同樣未知。

分析單位怎麼切出來:phase set → 連鎖視窗 → 單倍型家族 三層,由上到下是切分的順序。 第一層是 phase set。跨越兩個 phase set 之間沒有相位關係,所以分析不能跨過去。 第二層在 phase set 內按 read 實際跨得到的距離切成連鎖視窗, 圖上是三個連鎖視窗,各含 2 個或 3 個 somatic 位點,每個連鎖視窗有五條 read。 連鎖視窗裡的 read 畫成虛線外框,代表這時候還不知道它們來自哪一條 haplotype。 第三層把中間那個連鎖視窗的五條 read 按單倍型家族分成兩堆,三條一堆、兩條一堆, 外框改成實線,代表來源已經由程式判定。 第三層每一條 read 的 x 座標與第二層完全相同,因為那是同一批 read,只是重新分組。 讀法是:最小分析單位是「一個連鎖視窗的一個單倍型家族」,不是整條染色體。 最小分析單位:一個連鎖視窗的一個單倍型家族 上方小圓=somatic 位點。虛線外框的 read = 還不知道來自哪一條 haplotype。 ① phase set phase set A phase set B 跨 phase set 之間沒有相位關係,分析不能跨過去 ② 切連鎖視窗 W1 · k=2 W2 · k=3 W3 · k=2 ③ 分家族 把 W2 這五條 read 按單倍型家族分成兩堆(每一條的 x 座標與上方相同) HP1 family 每一堆各自建樹 HP2 family 狀態空間小一半 somatic 變異只發生在其中一條 haplotype 上,所以先分家族既符合生物學,也讓問題變小。 代價:兩個相距超過 read 跨距的位點之間,聯合分布仍然是未知的 —— 跟短讀時代一樣。
分析單位的切分方式。 先須落於同一個 之內 —— 跨 phase set 的相位關係本即無定義。 再依 read 實際可跨越的距離切為 ,每個連鎖視窗含 k 個 somatic 位點(k 通常為 2 或 3)。 ③每個連鎖視窗之內再依單倍型家族分為兩組。 故最小分析單位為 :一個連鎖視窗的一條單倍型家族,而非整條染色體。 上下兩層的 x 座標刻意對齊:兩者為同一批 read,僅重新分組。

以下估算此量級,並據以說明 k 為何幾乎恆為 2 或 3。 一般實體腫瘤的突變負荷約為每 Mb 1 至 10 個 somatic 變異。 取 5 個/Mb、read 跨距 20 kb,則單一固定寬度視窗內的變異數平均為 0.1 個。 依 Poisson 分布計算「至少有 2 個」的機率約為 0.5% —— 3.1 Gb 切分為 15 萬餘個固定寬度視窗,僅數百個達到條件。

尚須再乘一個係數。分析單位為單倍型連鎖區段,故兩個變異不僅須落於同一連鎖視窗,還須落於同一條 haplotype 上,方能構成 k=2 的狀態表。 一對變異落於同一家族的機率約為 ½,故 0.5% 減半至 0.24%。

突變負荷高的樣本則不同。以同一算法,50 個/Mb 時平均為 1 個/固定寬度視窗, 「至少有 2 個」的機率升至 26%,計入家族係數之後仍有兩至三萬個可用連鎖區段。 故此路線的適用性直接取決於樣本的突變負荷,且非參數調整所能改變。

read-AF:頻率的角色由分群改為排序

須澄清一項常見的誤解:長讀路線並未捨棄頻率, 而是將頻率的角色由「用於分群」改為「用於在並列的候選中排序」。

M8 已提及此量,稱為 :於同一連鎖視窗、同一單倍型家族的 read 之中, 某個 somatic 位點的 ALT 所佔比例。它與全基因體 VAF 的差別在於分母受限縮 —— 僅計入同一連鎖視窗、同一條 haplotype 的 read。

以下一點須明確:限縮分母並未使純度消失。 同一條 haplotype 的 read 中亦含來自正常細胞的分子(其在該位點為 REF), 故 read-AF 約等於「純度 × 帶有該變異的腫瘤細胞比例」,而非後者本身。 read-AF 之所以不需換算,是因為它僅用於比較大小:同一連鎖視窗、同一單倍型家族內的兩個位點共用同一個純度,比較兩者時純度為共同因子而消去。 M8 已將此列為方法的適用範圍限制 —— 兩個位點的局部拷貝數或 multiplicity 若不同,則無法消去

其用法為:發生較早的變異應出現於較多分子上, 故候選樹中若有兩條路徑步數相同,read-AF 遞減者較為合理。 關鍵在於次序:先以聯合觀測將候選集合收斂至最小成本解,以 read-AF 排序。 次序顛倒將退回頻率路線原有的問題 —— 以邊際推定聯合。

單倍型頻率譜的形式

比較兩條路線之前,須先確認比較的層級:前述既有做法皆非在單一位點上做推論。 SciClone、PyClone 與 PhyloWGS 均將數千個變異的 VAF 匯總為一張直方圖, 再自該圖的形狀導出結論;1/f 中性檢定所量測者亦為同一張圖的尾端。 故應比較的是頻譜這一層,而非單一位點的量測準確度。

長讀一側亦有一張頻率譜,做法完全相同 —— 同樣將整批數值匯總為直方圖,橫軸同樣為頻率。 所更換者僅為被計數的對象:不再是「單一位點的 ALT 所佔比例」, 而是「一條單倍型所佔的分子比例」。單倍型即 somatic haplotagging 所給出的標籤 (HP1、HP1-1、HP1-2…),每一條對應一組變異的特定組合

更換之後兩張圖形態相異,而相異之處恰好決定了樹。 以同一組 SNV 為例。先觀察原始的 read,使後兩張圖的每一個數字皆可回溯:

20 條分子在六個位點上的等位組合 一個連鎖視窗裡有六個 somatic 位點,由左到右標為 A 到 F,共二十條分子跨過全部六個位點。 二十條分成三群。第一群九條,六個位點全是參考型,佔四成五。 第二群七條,在 A、B、C 三個位點是變異型,D、E、F 是參考型,佔三成五。 第三群四條,反過來在 D、E、F 是變異型,A、B、C 是參考型,佔兩成。 關鍵是沒有任何一條分子同時帶著 A B C 與 D E F 這兩組。 下半列出同一批分子的兩種數法。 第一種逐位點數,得到 A、B、C 的 VAF 都是七除以二十等於零點三五, D、E、F 都是四除以二十等於零點二。 第二種逐單倍型數,得到沒有變異的那群佔九除以二十等於零點四五, 帶 A B C 的那群佔零點三五,帶 D E F 的那群佔零點二。 最下方指出:因為沒有分子同時帶兩組,帶 A B C 與帶 D E F 的兩群是兄弟不是祖孫, 而這件事只有在一條分子跨得過這六個位點時才數得出來。 讀法是:兩種頻率譜的數字都從這一張圖來,差別只在數的時候把什麼當成一個連鎖區段。 先看原始的 read 一個連鎖視窗、六個 somatic 位點、20 條跨得過全部六個位點的分子。 A B C D E F 9 條(45%) 沒有變異 → HP1 7 條(35%) 帶 A B C → HP1-1 4 條(20%) 帶 D E F → HP1-2 ① 逐位點數 → VAF VAF(A) = VAF(B) = VAF(C) = 7/20 = 0.35 VAF(D) = VAF(E) = VAF(F) = 4/20 = 0.20 六個位點 → 六個數字 ② 逐單倍型數 → 單倍型頻率 HP1 = 9/20 = 0.45 HP1-1 = 7/20 = 0.35 HP1-2 = 4/20 = 0.20 三條單倍型 → 三個數字 沒有分子同時帶 A B C 與 D E F,所以 HP1-1 與 HP1-2 是兄弟 —— 而這只有在一條分子跨得過這六個位點時才數得出來。
一個連鎖視窗、六個 somatic 位點、20 條可跨越全部六個位點的分子。 分為三組:9 條全為參考型、7 條帶有 A B C、4 條帶有 D E F, 且無任何一條同時帶有兩組。 下半為同一批分子的兩種計數方式 —— 逐位點計數得到六個 VAF,逐單倍型計數得到三個頻率。

同一批分子,兩種計數方式:逐位點計數,六個位點給出六個數字; 逐單倍型計數,三條單倍型給出三個數字。將兩組數字各自匯總為直方圖,即得以下兩張頻率譜。

同一組 SNV,兩種頻率譜:VAF 譜留下兩棵樹,單倍型頻率譜只剩一棵 同一個連鎖視窗、同一組六個 somatic SNV,兩種把它們整理成直方圖的方式,橫軸都是頻率。 這個連鎖視窗的分子組成是:四成五沒有任何體細胞變異,三成五帶著 A、B、C 三個變異, 兩成帶著 D、E、F 三個變異,而且沒有任何一條分子同時帶著這兩組。 左邊是 VAF 頻率譜:每一個數字來自一個位點,所以六個 SNV 給出六個點。 A、B、C 的 VAF 都是零點三五,D、E、F 都是零點二,於是得到兩根高度為三的長條。 讀出來是「有兩群,各佔零點三五與零點二」, 但這兩個數字同時相容於兩棵樹:零點二可以是零點三五的後代,也可以是它的兄弟, 因為兩種都通過那條算術檢查,所以分不出來。 右邊是單倍型頻率譜:每一個數字來自一條單倍型,所以只有三個點,每根長條高度都是一。 三根分別是 HP1-2 佔零點二、HP1-1 佔零點三五、HP1 佔零點四五。 注意零點四五那一根在左邊完全不存在,因為那群細胞在這個連鎖視窗沒有任何變異, 沒有變異就沒有 VAF。 而且標籤說明 HP1-1 與 HP1-2 都直接掛在 HP1 底下,是兄弟不是祖孫, 於是分支那棵樹是唯一解。 最下方指出兩項本質差異:左側每根長條計數的是變異,右側計數的是細胞群; 左邊的頻率是邊際,右邊的頻率帶著隸屬關係。 讀法是:同一組 SNV,換掉頻率的連鎖區段之後,連樹的形狀都跟著定下來了。 同一組 SNV,兩種頻率譜 一個連鎖視窗、六個 somatic SNV。組成:45% 沒有變異、35% 帶 A B C、20% 帶 D E F,且沒有分子同時帶兩組。 VAF 頻率譜 每一根:有幾個變異落在這個頻率 D E F A B C 0 0.2 0.35 0.45 六個 SNV → 六個點,堆成兩根 讀出來:有兩群,0.35 與 0.20 但這兩個數字同時相容於兩棵樹 —— 0.20 ≤ 0.35 ✓  0.35 + 0.20 ≤ 1 ✓ 後代 兄弟 兩棵都通過 —— 分不出來 單倍型頻率譜 每一根:有幾條單倍型落在這個頻率 HP1-2 HP1-1 HP1 0 0.2 0.35 0.45 三條單倍型 → 三個點,每根高度都是 1 讀出來:三條,0.45 / 0.35 / 0.20 標籤說明 HP1-1 與 HP1-2 都掛在 HP1 底下, 而且沒有分子同時帶 A B C 與 D E F。 後代 兄弟 只剩一棵 —— 樹定下來了 ① 左側每根長條計數的是變異,右側計數的是細胞群。0.45 一根在左側無法繪出 —— 無變異即無 VAF。 ② 左邊的頻率是邊際,右邊的頻率帶著隸屬關係,所以「兄弟還是祖孫」不必再猜。
同一組六個 SNV,兩種整理方式,橫軸皆為頻率。 左側六個位點各給出一個 VAF,匯為兩根高度 3 的長條;右側三條單倍型各給出一個頻率,各根高度皆為 1。 差異恰好落在能否確定樹:左側兩棵樹皆通過,右側僅餘一棵。

左側:六個 SNV 各給出一個 VAF。A、B、C 皆為 0.35,D、E、F 皆為 0.20, 匯為兩根高度 3 的長條。其讀法為「有兩群,各佔 0.35 與 0.20」—— 但此二數字同時相容於兩棵樹0.200.35 ✓;0.35+0.201 ✓),故無從區分。 此與前述 1.0/0.6/0.3 一組為同一件事。

右側:三條單倍型各給出一個頻率,各根長條高度皆為 1。隨之出現兩項差異:

  • 0.45 一根在左側無法繪出。該群細胞在此連鎖視窗內不帶任何 somatic 變異 —— 無變異即無 VAF。然而它是此連鎖視窗內最大的一群,且為另外兩群的祖先。 VAF 頻率譜可觀測後代,不可觀測祖先。
  • 標籤攜帶隸屬關係。HP1-1 與 HP1-2 皆直接隸屬於 HP1,兩者為兄弟而非祖孫。 且此關係係自 read 計數所得(無分子同時帶有 A B C 與 D E F),而非推定。 分支一棵樹因而為唯一解。

故兩者的差異可精確表述為:左側每一根長條計數的是「變異」,右側計數的是「細胞群」; 左側的頻率為邊際,右側的頻率攜帶隸屬關係。 同一組 SNV,更換頻率的計數單位之後,樹的形狀隨之確定。

標籤的取捨

此處有一項易被忽略、但影響結論的選擇。 VAF 具有一項性質:它不區分變異位於哪一條 haplotype,一個位點對應一個數字。 單倍型頻率譜是否比照辦理 —— 捨去 HP1-1、HP1-2、HP2-1 的身分, 僅保留一組頻率值?

兩種做法皆成立,但兩者性質不同。

單倍型頻率譜的標籤取捨:捨去標籤後近乎退化為 VAF 譜 左右兩欄是兩種都成立的做法。 左邊是丟掉標籤:把所有 somatic 單倍型的頻率倒進同一張直方圖,不管它是哪一條。 這是跟 VAF 譜嚴格的一對一替換 —— VAF 譜丟掉「變異在哪一條 haplotype 上」, 這裡丟掉「頻率屬於哪一條單倍型」。 得到的峰位置跟 VAF 譜幾乎一樣,唯一的實質差別是分母: VAF 的分母是該位點全部的 read,含兩個家族;單倍型頻率的分母只有同一個家族, 而且那個分母是就地量到的,不必用全域的純度與拷貝數換算。 右邊是保留標籤:多出來的不是頻率,而是一個偏序 —— 誰包含誰、誰跟誰是兄弟。 這是 VAF 譜沒有對應物的東西,兄弟還是祖孫不必再用簡約性猜。 代價是標籤只在連鎖視窗內有定義,跨連鎖視窗匯總不了,所以全基因體的譜只能是不看標籤那一種。 最下方是關鍵的量化:在二十 kb 的連鎖視窗下,含變異的連鎖視窗裡有兩個以上變異的比例, 每 Mb 五個變異時只有百分之四點九,十個時百分之九點七, 二十個時百分之十八點七,五十個時百分之四十一點八。 也就是說典型實體腫瘤有九成五的連鎖視窗只有一個變異, 那種連鎖視窗裡一條單倍型就等於一個變異,是一對一的。 所以丟掉標籤之後這張譜幾乎就是換了分母的 VAF 譜, 真正多出來的資訊在標籤裡,而標籤是連鎖視窗性的。 標籤的取捨 兩種都成立,但給的東西差很多 —— 而且差別的大小由突變負荷決定。 ① 丟掉標籤 把所有 somatic 單倍型的頻率倒進同一張直方圖 這是跟 VAF 譜嚴格的一對一替換 VAF 譜丟掉「變異在哪一條 haplotype 上」, 這裡丟掉「頻率屬於哪一條單倍型」。 峰的位置跟 VAF 譜幾乎一樣 唯一的實質差別是分母:VAF 用該位點全部 的 read(兩個家族),單倍型頻率只用同一家族。 而那個分母是就地量到的,不必全域換算。 ② 保留標籤 HP1-1、HP1-2、HP2-1 各自是誰 多出來的不是頻率,是一個偏序 誰包含誰、誰跟誰是兄弟。 HP1-1 ⊂ HP1 HP1-1 ∥ HP1-2 這是 VAF 譜沒有對應物的東西 兄弟還是祖孫,不必再用簡約性猜。 代價:標籤只在連鎖視窗內有定義,跨連鎖視窗匯總不了 (重要區分 #13)。全基因體的譜只能用 ①。 為什麼「丟掉標籤」幾乎就塌回 VAF 譜 突變負荷(連鎖視窗 20 kb) 5/Mb 10/Mb 20/Mb 50/Mb 含變異的連鎖視窗裡有 ≥2 個變異 4.9% 9.7% 18.7% 41.8% 典型實體腫瘤(約 5/Mb)有 95% 的連鎖視窗只有一個變異 —— 那種連鎖視窗裡「一條單倍型」就是「一個變異」。 所以真正多出來的資訊在標籤裡,不在頻率值裡;而標籤是連鎖視窗性的。
捨去標籤方為與 VAF 譜嚴格的一對一替換,但其結果近乎退化為 VAF 譜; 保留標籤所額外提供者為一個偏序,而該偏序在 VAF 譜中無對應物。 下方數值說明差異的幅度 —— 由突變負荷決定。

捨去標籤方為嚴格的一對一替換:VAF 譜捨去「變異位於哪一條 haplotype」, 此版本捨去「頻率屬於哪一條單倍型」。所得的峰位置與 VAF 譜幾乎相同, 唯一的實質差異在於分母 —— VAF 使用該位點全部的 read(含兩個家族), 單倍型頻率僅使用同一家族的 read,且該分母為就地量測所得, 不需套用全域的純度與拷貝數估計。此版本可以匯總為全基因體尺度的譜。

惟須說明一點:捨去標籤之後,該譜近乎退化為 VAF 譜。 其成因為算術上的。在固定寬度 20 kb 視窗、每 Mb 5 個變異時,含變異的固定寬度視窗中有 95% 僅含單一變異—— 此類視窗內「一條單倍型」即等同於「一個變異」,兩者一一對應。 故其額外提供者僅為較為乾淨的分母。

保留標籤所額外提供者並非頻率,而是一個偏序: HP1-1 ⊂ HP1,且 HP1-1 與 HP1-2 為兄弟。前述六個 SNV 的例子之所以能確定樹, 依據正是此偏序,而非該三個頻率值本身。 此為 VAF 譜完全無對應物者。

其代價前已述及:標籤僅在連鎖視窗內有定義,跨連鎖視窗的 HP1-1 並非同一條 (重要區分 #13)。故該偏序無法延伸至全基因體尺度。

兩者合併考量,此路線的定位即明確: 其額外資訊存在於標籤,而非頻率值;且標籤具有局部性。 亦即,它不會改善「全基因體共有幾群、各佔多少」此一問題的答案, 它所回答的是「在此連鎖視窗內,這幾個變異的先後次序」。 而其回答的品質直接取決於突變負荷:負荷越高,k2 的連鎖視窗越多,該偏序的可用範圍越大。

比較口徑:全基因體頻率圖如何由局部視窗匯總

左側該類圖通常為全基因體尺度 (數千個位點全部納入),此處所繪為單一連鎖視窗。若要製作全基因體版本, 即將各連鎖視窗各自算得的單倍型頻率全部匯入同一張直方圖 —— 標籤具有局部性(跨連鎖視窗的 HP1-1 並非同一條,重要區分 #13 為此現象的極端情形), 但頻率值可以匯總

故此路線所要檢驗的是一個具體的問題: 將頻率的計數單位由單一位點改為多位點的單倍型,重建所得的樹是否不同? 上述例子顯示。而由於同一顆腫瘤兩者皆可計算,此問題可直接比較。

中篇則先處理一項更關鍵的事實:真正額外提供的資訊不在頻率值,而在標籤, 亦即該偏序;而偏序僅能自多變異連鎖視窗產生。 中篇與下篇所處理者,即為如何將這些關係收成約束,並接至全基因體尺度的重建。

三條路線的可觀測範圍

三條 subclone 重建路線的輸入、聯合分布來源、輸出與代價 三欄比較。 第一欄 single-cell:把細胞一個一個分開定序, 聯合分布是在細胞層級直接觀測到的,輸出是完整的細胞譜系樹, 代價是成本高、能觀察的細胞數有限。 第二欄 bulk 短讀加頻率:整團細胞一起定序、覆蓋全基因體, 聯合分布不是觀測到的,要靠簡約性等模型假設補上, 輸出是一棵全基因體的樹,代價是多棵樹同時相容、換程式就換答案。 第三欄 bulk 長讀加單倍型:同樣是整團細胞一起定序,但 read 跨 10 到 50 kb, 聯合分布在分子層級直接觀測到, 輸出是幾萬個局部候選拓撲而不是一棵全域樹, 代價是這種觀測只在 read 跨距內成立,而且可用的區域數量受突變負荷限制。 讀法是:三者不是誰取代誰,中間那條回答整體有幾群,右邊那條回答這幾個位點的先後。 三條路線各自看得到什麼 關鍵那一列是「聯合分布怎麼來的」:觀測到的,還是假設補的。 single-cell bulk 短讀 + 頻率 bulk 長讀 + 單倍型 輸入 一個一個細胞 分開定序 整團細胞一起定序 覆蓋全基因體 整團細胞一起定序 read 跨 10–50 kb 聯合分布 直接觀測 細胞層級 靠模型假設補 簡約性等偏好 直接觀測 分子層級 輸出 完整的細胞譜系樹 一棵全基因體的樹 幾萬個局部候選拓撲 不是一棵全域樹 代價 成本高 能看的細胞數有限 多棵樹同時相容 換程式就換答案 只在 read 跨距內成立 受突變負荷限制 三者不是誰取代誰:中間那條回答「整體有幾群」,右邊那條回答「這幾個位點的先後」。 而 single-cell 是三者裡唯一直接觀測到細胞的;另外兩條看到的都是分子,不是細胞。
三條路線的輸入、輸出與代價。 single-cell:直接取得細胞層級的聯合分布,資訊最為完整,但成本最高、覆蓋率低。 bulk 短讀+頻率:覆蓋全基因體且成本低,輸出為一棵全基因體尺度的樹, 但該樹須以模型假設補足聯合分布。 bulk 長讀+單倍型:聯合分布為觀測所得,惟僅在 read 跨距內成立, 故輸出為數萬個局部候選拓撲,而非一棵全基因體尺度的樹。 三者並非彼此取代 —— 中者回答「整體有幾群」,右者回答「這幾個位點的先後」。

此點決定了此路線適用的問題類型。 它產出「此腫瘤含 4 個 subclone、各佔多少比例」一類的全域結論, 而是產出數萬筆局部陳述,其形式為 「在此連鎖視窗、此條 haplotype 上,這幾個變異的先後次序有哪些候選」。

而 M0 的用藥問題恰為局部性質:兩個變異是否位於同一群細胞。 此類問題僅需該二位點鄰近範圍的聯合分布,不需完整的樹。

真實資料與證據

本頁各項論點均有可查證的數值,其來源與量級如下。

本頁的論點支持它的實測
頻率路線的上限來自資訊,而非實作品質 31 個 subclone 重建程式、51 個模擬腫瘤、7 項任務、12,061 次執行。演算法選擇對表現的影響大於腫瘤本身的特性;純度校正後的深度、拷貝數狀態與可比對性則與多數程式的表現相關(2024 線上/2025 刊出)
頻率譜的形狀可量測,但亦易被過度解讀 14 種癌別、904 個腫瘤中有 323 個符合 1/f 中性演化的直線(2016)。後續分析指出 driver 頻率偏向 0 與 1 兩端,難以在中間頻率被觀察到,因此中性比例可能被高估(2018、2019)
甲基化為解析度更高的時鐘 epimutation 速率約 105104/CpG/次分裂(文獻多寫為上界),DNA 突變約 1091010/bp/次分裂,同量級相比約差五個數量級。專供作時鐘之用的位點另有估至 103 者,故此為量級而非定值
甲基化所攜帶的譜系訊號與突變高度吻合 19 位低度膠質瘤病人的原發與復發檢體中,以甲基化建的樹與以 somatic 變異建的樹高度吻合(相關係數 0.56–0.90),但並非完全一致(2015)
甲基化路線已達規模化 僅以 bulk 甲基化資料,在 1,976 個淋巴系癌樣本上推估生長速率與發生年齡;同一批分析中,bulk 樣本內偵測到的 subclonal 天擇並不常見(2025)
分子層級的聯合觀測有明確的技術門檻 epiallele 組成分析要求 read 跨越 4 個相鄰 CpG(24=16 種組合),且該位置深度須達 60× 以上(2014)。全基因體平均每 100 bp 一個 CpG,故 100 bp 短讀僅在 CpG 密集區達到此門檻

兩項須注意。其一,上表前兩列均來自模擬腫瘤或統計配適,而非具金標準的真實檢體 —— 真實腫瘤的演化史無從得知,故此領域連金標準本身都須以合成方式建立。 M10 曾討論同一困難的另一版本:以合成純度的樣本評估 variant caller 時,該「正確答案」同樣為人工建構。 其二,最後一列的「4 個 CpG」與「每 100 bp 一個」為兩項獨立的事實, 須並置方能顯示短讀的限制所在;單獨觀察任一項皆無法導出此結論。

預測與結果檢視

一份腫瘤樣本換算後得到三群 somatic 變異,CCF 分別為 1.000.550.40。 請問:CCF 0.40 一群為 CCF 0.55 一群的後代,抑或其兄弟

展開答案

無從區分,且並非資料量不足所致。

兩種解皆通過該算術檢查:作為後代時 0.400.55 ✓;作為兄弟時 0.55+0.40=0.951.00 ✓。 若程式僅輸出一棵樹,該樹係由其偏好(通常為簡約性)所選,而非由資料所選。

真正的區分所需者並非更多變異或更深的定序, 而是另一類資訊:同時帶有這兩群變異的細胞佔多少。 此為聯合分布,而 CCF 為邊際分布。

取得途徑有三。single-cell 直接於細胞層級觀測共現。 多時間點或多部位取樣可縮減可能的樹的數目 —— 兄弟關係在不同部位常呈不同比例,後代關係則同步變化。 長讀在兩群變異恰好落於同一條 read 跨距內時,可直接計數聯合分布。 第三條途徑有其條件:兩群變異須足夠接近。相距 100 kb 時長讀亦無法適用。

學習檢核

與中篇的銜接

前述單倍型連鎖區段的狀態表即為中篇的起點, 而中篇將其作為約束使用,而非作為輸出。

關鍵的觀察是:本實驗室現行的實作已經在計算這些關係。 它對每個連鎖區段都判定過屬於串接或分岔 —— 這些判定即為「這兩個變異不可能同群」、 「此群為彼群的祖先」。所缺的並非資料,而是將其接至全基因體尺度。

接上之後可完成三件 VAF 頻率譜無法完成的事: 打破「兩群大小相等」此一結構性盲點、直接量測峰的寬度, 以及在不需純度的條件下定出群與群的相對位置。

銜接之前須先確立這些判定的可信度。 在真實輸出中,一個含 194 條 read 的連鎖區段,其三個位點對的跨越深度分別為 20、17 與 3, 其中 n=3 的位點對仍產出了一條約束。 錯誤的約束較缺少約束更為不利:它將迫使模型分出一個不存在的群,且不留任何跡象。

原始文獻與程式碼

  • SciClone:Miller CA 等,SciClone: inferring clonal architecture and tracking the spatial and temporal patterns of tumor evolution,PLoS Computational Biology 10(8):e1003665,2014。
  • PyClone:Roth A 等,PyClone: statistical inference of clonal population structure in cancer,Nature Methods 11(4):396–398,2014。
  • methclone:Li S 等,Dynamic evolution of clonal epialleles revealed by methclone, Genome Biology 15:472,2014。
  • PhyloWGS:Deshwar AG 等,PhyloWGS: reconstructing subclonal composition and evolution from whole-genome sequencing of tumors,Genome Biology 16:35,2015。
  • 甲基化與突變所建之樹互相吻合:Mazor T 等,DNA methylation and somatic mutations converge on the cell cycle and define similar evolutionary histories in brain tumors, Cancer Cell 28(3):307–317,2015。
  • 1/f 中性演化檢定:Williams MJ 等,Identification of neutral tumor evolution across cancer types,Nature Genetics 48(3):238–244,2016。
  • 對中性檢定的質疑:Tarabichi M 等,Neutral tumor evolution?, Nature Genetics 50(12):1630–1633,2018;以及 Bozic I 等, On measuring selection in cancer from subclonal mutation frequencies, PLoS Computational Biology 15(9):e1007368,2019。
  • epimutation 速率的整理:Chen S、Wu J、Gaiti F,Methylation-based lineage tracing in cancer,Blood,2026(doi:10.1182/blood.2024028196)。文中的速率寫為「up to」,屬上界而非定值。
  • 大規模評比:Salcedo A 等,Crowd-sourced benchmarking of single-sample tumor subclonal reconstruction,Nature Biotechnology 43(4):581–592(2024 年線上發表,2025 年刊出)。
  • EVOFLUx:Gabbutt C、Duran-Ferrer M 等,Fluctuating DNA methylation tracks cancer evolution at clinical scale,Nature 645:764–773,2025。程式碼在 github.com/Duran-FerrerM/evoflux

本模組術語

5mC(5-甲基胞嘧啶)
胞嘧啶第 5 個碳上的甲基化修飾。這是常見的 DNA 甲基化形式,主要見於 CpG;可影響轉錄調控,效應依基因組位置與細胞類型而異。
CpG
序列上一個 C 後接一個 G(p 代表兩者之間的磷酸鍵)。哺乳類多數 5mC 位於 CpG,特定細胞或情況亦可見非 CpG 甲基化。
HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
cancer cell fraction(癌細胞比例)
帶有某個特定突變的腫瘤細胞佔全部腫瘤細胞的比例。用來區分 clonal(1)與 subclonal(<1)突變。不等於 VAF。
clone(克隆)
源自共同祖先細胞,並共享一組可辨識 somatic mutations 的細胞群。
clone tree(克隆演化樹)
描述腫瘤內各群細胞祖先關係的樹:節點是一群帶有相同變異組合的細胞,邊代表在祖先之上又多拿到變異。要注意同一組群集常常有多棵樹同時相容。
copy number(拷貝數)
某段基因體在細胞內的拷貝數。多數正常常染色體區段為 2,可再分為 major 與 minor allele copy number。
epiallele(表觀等位型)
同一條分子上一組相鄰 CpG 的甲基化組合,例如四個 CpG 的 1101。逐位點的 β 值看不到它 —— 要算 epiallele 的組成,一條 read 至少得跨過 4 個 CpG。
epimutation(表觀突變)
細胞分裂時甲基化狀態的隨機翻轉。文獻常引的量級是每個 CpG、每次分裂 105104,而 DNA 突變約每鹼基 1091010,同量級對比約差五個數量級,所以甲基化是解析度更高的譜系時鐘。要注意這個速率隨位點與量測方式差異很大(有估到 103 的),應當成量級而非定值。
haplotype(單倍型)
同一條實體染色體拷貝上,具有一致相位的一組 alleles 或 variants。HP1 與 HP2 是任意的相對標籤。
joint distribution(聯合分布)
多個變數一起看的分布,也就是「哪些組合各出現多少」。演化樹的形狀取決於聯合分布,而不是邊際分布;長讀的價值在於一條分子上的組合是直接觀測到的。
latent node(潛在節點)
建樹時為了讓圖連得起來而補進的中間狀態,沒有被任何 read 直接觀測到。它是模型的產物,不能當成「還沒觀察到的細胞」。
long read(長讀)
單條可達數千至數萬鹼基的定序片段(例如 ONT、PacBio)。若可靠地同時覆蓋多個 variant,可提供它們位於同一 DNA 分子上的直接觀測證據。
marginal distribution(邊際分布)
只描述單一變數的分布。VAF 與甲基化 β 值都是邊際統計:它們各自只講一個位點有多少比例帶有標記,不講兩個位點在同一個分子或同一個細胞上的搭配情形。
mutation frequency spectrum(突變頻率譜)
把一份樣本裡所有 somatic 變異的 VAF 畫成直方圖後得到的分布。分布上的峰與肩對應不同大小的細胞群,最低頻端的尾巴斜率則被用來判斷有沒有天擇。
mutation multiplicity
在帶有某突變的細胞中,該突變所占的拷貝數;是 VAF 與 cancer cell fraction 換算時的重要參數。
parsimony(簡約法)
在所有與資料相容的解裡,選步數(或成本)最少的那一個。它是一個偏好而不是證據 —— 當多個解並列時,簡約法決定選哪一個,但資料本身沒有排除其他解。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。
read-AF(read 層級的 ALT 比例)
在同一個分析區域、同一個單倍型家族的 read 之中,某個 somatic 位點帶 ALT 的比例。分母已限縮到同一條 haplotype 的同一段區域,所以不必經過純度與拷貝數換算;用途是在步數並列的候選樹之間排序。
somatic variant(體細胞變異)
在非生殖系細胞譜系中、通常於受精後取得的變異;可只存在於部分細胞,通常不由親代遺傳給子代。癌症基因體學常分析此類變異。
subclone(次克隆)
clone 內取得額外變異並擴增的子群;治療後可能富集具有抗性的 subclone。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。
單倍型家族(一條 germline 單倍型,加上由它衍生的 somatic 單倍型)
把 read 依 HP tag 分成的兩組之一。家族一HP1 與從它長出來的 HP1-1家族二HP2HP2-1;歸不到任何一條 germline 單倍型的 HP3 不屬於任何一族。叫「家族」是因為它把一條 germline 單倍型與由它衍生的 somatic 單倍型收在同一組裡 —— 分組看的是 germline 那一層,不是有沒有帶 somatic 突變。

在同一個 phase block 內,一個家族對應一條染色體拷貝,所以「兩族」就是那個位置上的兩條同源染色體。但兩件事不成立:其一,軟體判定不出哪一族來自父親、哪一族來自母親(那需要另外定序父母);其二,標號只在該 phase block 內有定義,跨 block 的「家族一」並非同一條染色體。
單倍型連鎖區段
一個連鎖視窗再限定到一條單倍型家族 —— 也就是「一個連鎖視窗、一條染色體拷貝」。這是局部共現分析的最小單位:其中的 read 全部來自同一條染色體拷貝,另一條拷貝屬於另一個連鎖區段。因此一個連鎖視窗至多切出兩個連鎖區段,連鎖區段數大於連鎖視窗數,兩者不可混用為同一個分母。單倍型標號只在該區段內有定義,跨區段的同名標號並非同一條染色體。
連鎖視窗
同一個 phase block 之內,由 read 連鎖的傳遞閉包所界定的一段:凡有某條 read 同時覆蓋至少兩個 somatic 位點,該段即成一個視窗;另一條 read 疊到已連鎖的位點又碰到新位點時,兩段合併成更長的視窗。不是固定寬度,也不跨 phase block。早期估算比例時所用的「20 kb 視窗」是固定寬度的近似,兩者的計數不可互換。

研究指引 · Subclone 系統發生重建 · Part 2 — what the 5% can supply

中篇:VAF 路線缺什麼,多變異區域能補上哪三格

先寫出僅以 VAF 頻率譜重建的完整流程作為對照基準,指出它三項限制各落在哪一個參數上;再說明多變異區域的觀測與 95% 共用哪一組參數、為何必須把觀測切開相乘而不是相加,以及它能補上的三格分別是什麼。

建議先修:Subclone 重建

本模組學習目標

  • 寫出僅以 VAF 頻率譜重建 subclone 的估計式,並指出其三項限制各落在哪一個參數上
  • 說明多變異連鎖視窗的觀測與單變異連鎖視窗共用哪一組參數,以及為何必須把觀測切開相乘而不是相加
  • 以數值例說明兩群細胞比例相等時群數 K 不可辨識的代數成因,以及單一條「不可同群」如何改變樹的拓撲
  • 界定一個共現觀測所決定與未決定的範圍,據以說明產出為何是群數與群間關係而非個別變異的歸屬
  • 區分可辨識性與精度,並判斷提高定序深度能改善哪一項限制、不能改善哪一項

為什麼重要

本頁的目標是改善全基因體尺度的 subclone 系統發生重建, 而非增加局部陳述的數量。

上篇的結論界定了起點。在固定寬度 20 kb 視窗、每 Mb 5 個變異的條件下, 含變異的固定寬度視窗中有 95% 僅含單一變異;此類視窗內「一條單倍型」與「一個變異」一一對應, 因此捨去標籤後,單倍型頻率譜近乎退化為 VAF 頻率譜。 頻率值本身並非這條路線的主要貢獻。

其餘 5% 的連鎖視窗所提供的資訊性質不同:它們給出的不是更多資料點, 而是資料點之間的關係 —— 哪兩個變異不可能屬於同一群、哪一群是哪一群的祖先。 而這類關係不需要大量:一棵 所要確定的是群與群之間的少數幾個關係, 而非一萬五千個變異各自的歸屬。

整體形狀:95% 的連鎖視窗定峰在哪裡,5% 的連鎖視窗定峰之間的關係 上排兩欄是兩種連鎖視窗各自貢獻什麼。 左欄是只有一個變異的連鎖視窗,占九成五。它們每個給一個頻率值, 堆起來就是頻率譜,決定的是「峰落在哪裡」——也就是有幾群、各多大。 這一欄提供的是統計量體,一萬五千個點。 右欄是有兩個以上變異的連鎖視窗,占百分之五。它們每個給的不是頻率,而是關係: 哪兩個變異不可能同一群、哪兩個一定同一群、哪一群是哪一群的祖先。 這一欄提供的是約束,數量只有幾百個,但要定的關係本來就只有幾個。 中間的箭頭把兩者匯進同一個混合模型: 頻率決定成分的位置,約束決定成分的個數、寬度、比例與先後。 輸出是全基因體的群與樹,並且要標明哪些關係是由資料決定的、哪些是靠偏好補的。 最下方為本頁的出發點:本實驗室現行的實作已在計算右欄的內容, 它每個連鎖視窗都判過串接或分岔,只是那些判定停在連鎖視窗層級,沒有送到全基因體這一層。 讀法是:缺的不是資料,是把已經算出來的關係接上去。 整體形狀:兩種連鎖視窗,各出一半的力 目標是全基因體的 subclone 重建,不是再多幾萬筆局部陳述。 95% 只有一個變異的連鎖視窗 每個給一個頻率值 決定:峰落在哪裡 統計量體 —— 約 14,025 個點 5% 有兩個以上變異的連鎖視窗 整批給一張狀態表 不可同群 必定同群 A 是 B 的祖先 (分岔) (巢狀,比值≈1) (巢狀,比值<1) 決定:峰之間的關係 只有幾百條 —— 但要定的關係也只有幾個 同一個混合模型 頻率定位置;狀態表定個數、寬度、比例與先後 輸出:全基因體的群 + 樹(並標明哪些關係由資料決定) 出發點:現行實作已經在算右邊那一欄了 —— 每個連鎖視窗都判過串接或分岔,只是停在連鎖視窗層級沒送上去。
兩種連鎖視窗各承擔一半:95% 的連鎖視窗提供頻率,決定峰的位置; 5% 的連鎖視窗提供關係,決定哪些峰確實分離、峰的寬度、峰之間的比值,以及先後次序。 兩者進入同一個混合模型,輸出才是全基因體尺度的群與樹。

「進入同一個混合模型」一語尚未指明任何機制。 本頁要確立的是兩件事:該混合模型的具體形式,以及 5% 的觀測作用於其中哪一個變數。 第一節先建立僅以 VAF 重建的完整流程作為對照基準, 其後三節逐一說明 5% 能補上的三格。 把三者合成一條估計式、以及那條估計式能不能真的建起來,是下篇的內容。

此外,本實驗室現行的實作已經在計算上圖右欄的內容。 它對每一個單倍型連鎖區段(一個連鎖視窗 × 一條 ,以下簡稱連鎖區段) 都算過那一批 read 的共現狀態,並判定過屬於串接或分岔; 所需的原料因此已經在手上,但目前停留在連鎖視窗層級,未被傳遞至全基因體尺度。

本頁為研究指引,預設讀者已完成上篇,內容以式子、參數與失效模式為主。 討論範圍限於單倍型

概念與互動

一、VAF 路線的估計式

以下建立不使用任何長讀關係、僅以一維頻率譜重建的標準流程 —— PyClone、SciClone 與 MOBSTER 一系共同的骨架,共四個步驟。

僅以 VAF 頻率譜重建 subclone 的四個步驟,及三項限制各自所在的參數 由左至右共四個步驟,為不使用任何長讀關係、僅以一維頻率譜重建的標準做法。 第一步為換算:單一位點的 read 分為帶變異與不帶變異兩組,其比值為 VAF, 再除以純度的一半換算為癌細胞比例。此步驟需要三個外部估計值, 分別為全樣本單一值的純度、每區段一個值的拷貝數,以及每個變異一個值的 multiplicity。 第二步為將一萬五千個換算後的數值匯為一維直方圖並擬合混合模型, 每一群具有位置、高度與寬度三個參數;每個變異的群歸屬為未觀測的潛在變數, 在該式中被邊際化。 第三步為決定群數,所依據者為模型選擇準則而非參數估計。 第四步為由各群的細胞比例建樹,其條件為父節點的細胞比例不得小於各子節點的比例總和; 此條件通常無法將候選收斂至唯一一棵,其餘由簡約性等偏好決定。 圖的下方列出三項限制,各以箭頭指回其所在的步驟: 群數不可辨識,位於潛在變數與群數; 寬度參數與群數不可區辨,位於寬度; 細胞比例依賴三個外部估計值,位於位置。 此三項限制與後續三個用途一一對應。 僅用 VAF:自 read 至樹的四個步驟 此為改善的對照基準。三項限制列於下方,各對應一個用途。 ① 換算 每個變異 → 一個細胞比例 a = 3 d = 8 VAF = a/d 再換算成 CCF: c = 2·VAF / ρ 須三個外部估計值 ρ 純度 · 全樣本一個 CN 拷貝數 · 每區段一個 μ multiplicity · 每變異 ② 擬合混合模型 15,500 個 c 匯為一維直方圖 CCF → a_m | z_m=k ~ BetaBin(d_m, θ_k, φ) θ_k 位置 · π_k 高度 · φ 寬度 z_m 於此處被邊際化 5% 的作用點即為此變數 ③ 決定 K 群數為何 BIC Dirichlet process MOBSTER 的冪次尾 此為模型選擇, 非參數估計 ④ 建樹 由 {c_k} 定先後 A B C c_A ≥ c_B + c_C 此條件通常無法 收斂至唯一一棵 其餘由簡約性等偏好 決定,非由資料決定 此路線的三項限制 —— 與 5% 的三個用途一一對應 限制一:K 不可辨識 兩群的 c 相等時,似然對 「一群或兩群」完全不變。 增加深度不作用於此方向。 參數:z → K → 由用途一補足 限制二:φ 與 K 不可區辨 單一寬峰與兩個鄰近的 窄峰擬合出近乎相同的圖。 其結果取決於懲罰項。 參數:φ → 由用途二補足 限制三:c 依賴換算 ρ 偏誤使整體平移; CN 或 μ 偏誤為逐變異 位移,將汙染群的組成。 參數:c → 由用途三補足
僅用 VAF 的四個步驟:換算、擬合混合模型、決定 K、由各群的細胞比例建樹。 三個灰底方塊為外部估計值,三處紅字為此路線的限制 —— 它們分別落在 K、φ 與 c 上,與 5% 所提供的三個用途一一對應。

第一步:將每個變異換算為細胞比例

位點 m 的深度為 dm,其中 am 條 read 帶變異, VAFm=am/dm。VAF 不可直接互相比較,因為它同時受三個因素稀釋: 正常細胞的混入、該處的拷貝數,以及變異在每個帶原細胞中的拷貝數。換算關係為:

E[VAFm]=ρ·cm·μmρ·CNm+2·(1ρ)

二倍體、拷貝數正常、μ=1 時化簡為 E[VAF]=ρ·c/2,即 c=2·VAF/ρ

符號意義尺度
ρ純度全樣本單一值
cm帶有此變異的癌細胞比例,即分群所針對的量(CCF)每個變異一個值
CNm該區段的腫瘤拷貝數每區段一個值
μmmultiplicity:帶原細胞中此變異的拷貝數每個變異一個值

此步驟需要三個外部估計值,且三者的尺度不同:ρ 為全樣本單一值, CN 為每區段一個值,μ 則為每個變異一個值。上篇所述的第一層不確定性即源於此。

第二步:將一萬五千個 c 匯總為一維直方圖並擬合混合模型

設共有 K 群,細胞比例為 c1cK; 每個變異帶有一個未觀測的群歸屬 zm{1K},各群所佔的變異比例為 πk。 分群即為下式的最大化:

amzm=kBetaBinomial(dm,θk=ρ·ck/2,φ)
(K,π,c,φ)=mlogkπk·BetaBin(am;dm,ρ·ck/2,φ)

內層的 k 即為 zm邊際化之處 —— 此點為後續關鍵。

參數意義
θk第 k 群在 VAF 軸上的位置(峰的位置)
πk第 k 群所含的變異比例(峰的高度)
φ超離散度,即峰的寬度。通常與其他參數一併擬合

第三步:決定 K

常用做法為 BIC、Dirichlet process,或如 MOBSTER 以冪次分布吸收中性演化的尾端。 此步驟為整條路線最脆弱的環節,因為它屬於模型選擇而非參數估計 —— 它所回答的是「有幾群」,而非「這幾群位於何處」。

第四步:由各群的細胞比例建樹

可用的約束只有一條,且屬純粹的算術: 一個細胞至多屬於某個父節點底下的一個子節點, 所以各子節點的細胞比例加起來不得超過父節點。形式化之後, 節點 k 得為子節點集合 S 的父節點,必要條件為:

ckjScj

此即 (鴿籠原理:東西放進籠子,總量不會憑空變多)。 subclone 重建的文獻中亦稱 sum rule 或 crossing rule,本頁一律用前者。

關鍵在於它只能排除樹,不能挑出樹: 通過此檢查的候選通常不只一棵,其餘由等偏好決定。 上篇的測驗即針對此點:通過相容性檢查與被資料證成是兩回事。

三項限制與其對應的用途

限制內容所在參數對應用途
K 不可辨識兩群的 c 相等時,似然對「一群或兩群」完全不變zK用途一
φ 與 K 不可區辨單一寬成分與兩個鄰近窄成分可擬合出近乎相同的直方圖φ用途二
c 依賴三個外部估計值ρ 偏誤導致整體平移;CN 與 μ 偏誤則為逐變異的位移c用途三

二、接合點:多變異連鎖視窗的變異已包含在同一組觀測中

多變異連鎖視窗並非第二批資料。 其中的 1,475 個變異原已包含在前述 15,500 個點之內 —— 它們各自具備 amdm,第一節第二步的式子照樣算得出來。 5% 所額外提供的不是新的觀測值。

但也正因為是同一批 read,接上去的方式不能是「再加一項」。 若同一條分子既貢獻了它在某個位點的 alt 計數, 又被換算成一條「這兩個變異不共存」的關係再算一次,那就是把同一個觀測計了兩次; 此時兩項的和不是一個 likelihood,而必須另外校準一個權重去稀釋重複的部分。

正確的接法是把觀測切開,而不是相加:

  • 只含一個變異的連鎖視窗(14,025 個變異):走第一節那條 beta-binomial,一個位點兩格。
  • 含兩個以上變異的連鎖區段(1,475 個變異):其 read 不再逐位點拆成邊際計數, 而是整批記成一張聯合的狀態表 —— 哪幾條分子帶哪一組字母。

兩類的 read 沒有交集,所以兩者相乘即為完整的 likelihood,不需要任何權重。 要點在於第二類已經包含第一類的資訊:一張聯合表沿任一個位點加總, 得到的就是該位點的 alt/ref 計數。所以多變異連鎖區段的變異不再單獨進直方圖 —— 不是被丟掉,是被它自己那張表接手了。

因此兩者的接合點不是某一個變數,而是整組全域參數cTz):兩類觀測由同一組參數產生,只是觀測窗口不同 —— 一邊看到的是一個位點的邊際計數,另一邊看到的是好幾個位點的聯合計數。

第一節的式子把 zm 邊際化(即 kπk 一項), 所以它對「哪些變異落在同一批分子上」完全沒有話說 —— 直方圖只看得到每個變異各自的位置。 而聯合狀態表直接觀測到的正是 z聯合行為,不是逐個變異的邊際。 這就是頻率譜原則上拿不到、而多變異連鎖區段拿得到的東西,也是以下三節的共同來源。

用途作用的參數聯合狀態表如何提供它
z(連帶 K「兩個變異不共存」那一格是空的 → 同一根峰必須由兩個成分解釋
φ同一批分子上的數個變異,其真實頻率相等 → 給出技術雜訊的下界
c 之間的比值同一張表的兩格相除,正常細胞的分子是共同分母而消去

三者因此不是三種要另外加進去的約束,而是同一張表的三個推論。 下篇把這張表的機率逐層寫出來 —— 全域的 clone 如何投影成局部的分子比例, 一條只覆蓋部分位點的 read 如何計入,以及定序錯誤在哪一層進場。

讓 5% 的多變異連鎖視窗去改善 95% 的單變異頻率譜 上排左邊是 95% 單獨做不到的事:兩群細胞如果佔的比例剛好一樣, 在一維的頻率軸上它們就是同一個點,堆成同一根長條。 這種簡併跟定序深度無關 —— 再深也分不開,因為兩群的頻率本來就相等。 上排右邊是多變異連鎖視窗給的東西:一條分子同時跨過兩個變異, 發現沒有任何分子同時帶著兩者,於是這兩個變異不可能屬於同一群細胞。 這一個觀測就足以把那根長條拆成兩群。 中排列出三種推論。第一種是分岔:兩個變異不共存那一格是空的。 第二種是同一條單倍型上的變異,它們的真實頻率完全相同, 所以觀測到的離散度就是純粹的技術雜訊,可以直接量出峰應該多寬。 第三種是巢狀對,它們的比值不需要純度就算得出來, 因此群與群之間的相對位置可以直接量到,純度只剩下一個整體縮放因子。 下排是約束預算:每 Mb 五個變異時,全基因體約有三百六十九個同家族的約束對, 分配到三群之間的三個配對上分別是一百一十一、六十六與二十八個。 之所以夠用,是因為要定的是群與群之間那幾個關係,不是一萬五千個點各自的歸屬。 最下方是警告:那一格空著有三種成因 —— 狀態存在但沒抽到、真的沒有任何 clone 帶它、 或它不存在但錯誤仍會造出看起來像它的 read。三者的觀測一模一樣, 所以錯誤率必須就地估出來,這是這整套做法的前提。 讀法是:5% 提供的不是更多資料點,是資料點之間的關係,而關係不需要多。 讓 5% 去改善 95% 多變異連鎖視窗很少,但它給的是約束 —— 而約束不需要多。 95% 單獨做不到的事 一根峰 此峰實為兩群,且兩群的比例相等 在一維軸上它們是同一個點 —— 再深的定序也分不開 多變異連鎖視窗給的東西 A B 沒有任何分子同時帶 A 與 B ⇒ 兩者不可能同一群 ⇒ 峰必須拆開 只要一個這樣的觀測就夠了 5% 能給的三種約束 ① 分岔 → 不可同群 直接打破一維上 分不開的簡併。 ② 同單倍型 → 量雜訊 它們的真實頻率完全相同 所以離散度就是純技術雜訊。 ③ 巢狀 → 相對位置 比值不需要純度,群與群的 相對位置可以直接量到。 約束預算(5/Mb):全基因體約 369 個同家族約束對,分到三群之間的三個配對是 111 / 66 / 28 夠用的理由:要定的是群與群之間那幾個關係,不是 15,500 個點各自的歸屬。 前提:那一格空著有三種成因(沒抽到/真的沒有/錯誤造的),觀測一模一樣 —— 錯誤率必須就地估。
三個用途的來源與其成立條件。 上排為簡併的機制及破解它所需的單一觀測,中排為同一張狀態表的三個推論, 下排為連鎖區段預算,以及其前提:「那一格是空的」有三種成因,錯誤率必須就地估出來。

三、用途一:使群數 K 可辨識

不可辨識性的代數形式

設真實情形為兩群 B 與 C,且細胞比例相等:cB=cC=c, 則兩者在 VAF 軸上的位置亦相等:θB=θC=ρc/2。 代入第一節第二步的混合式:

πB·BetaBin(a;d,θ,φ)+πC·BetaBin(a;d,θ,φ)=(πB+πC)·BetaBin(a;d,θ,φ)

左式為兩群,右式為一群,兩者對任何一組可能的觀測給出相同的機率。

兩者並非近似相等,而是恆等。似然僅透過 πB+πC 依賴這兩個參數, 故 (πB,πC) 本身不可辨識。 又因 BIC 一類準則對額外參數施以懲罰,模型選擇必然取 K 較小者。

此即「增加定序深度無助於此」的精確意義: 資料量僅透過似然影響結論,而似然沿此方向為常數。 更換 caller、增加變異數目或提高深度,皆不作用於此方向。

數值例

數值例:兩群細胞比例相等時僅用 VAF 將少計一群並將樹誤判為線性,單一條不可同群使其回復為分支 純度百分之六十、二倍體、每個帶原細胞僅有一份變異拷貝。 左欄為真實情形:三群細胞,A 佔全部腫瘤細胞,B 與 C 各佔百分之四十, 且 B 與 C 為兩個分離的分支,皆直接衍生自 A。 中欄為僅觀察 VAF 直方圖所得的結果: A 的期望 VAF 為零點三零,B 與 C 的期望 VAF 皆為零點一二; 因兩群的細胞比例相等,兩者在頻率軸上重疊於同一峰。 混合模型擬合出兩群,樹為 A 至 B 的線性形式。 此非擬合失敗,兩群即為該組資料的最大似然解, 因為將一個成分拆為兩個位置相同的成分後似然完全不變, 而模型選擇準則對額外參數施以懲罰。 右欄為加入一條約束之後:B 中的變異 i 與 C 中的變異 j 落於同一個分析單位, 且觀測到無任何分子同時帶有兩者,故 i 與 j 不可能屬於同一群。 兩群的解在零點一二一峰上僅有一個成分,必然將 i 與 j 指派至同一群, 該解因而不可行;最優的可行解為三群, 其中兩個成分位於同一位置。 此時父節點的比例零點四加零點四等於零點八,未超過 A 的一點零, 分支形式的樹方獲容許。 最下方標注:所改變者為樹的拓撲與群的個數,而非參數的數值; 且該條約束僅確定 i 與 j 兩個變異, 該峰內其餘變異的歸屬仍不可辨識。 ρ = 0.60、二倍體、μ = 1:單一條約束使線性樹回復為分支樹 三欄的直方圖為同一組資料,差異僅在於是否加入該條「不可同群」。 真實情形 A B C CCF A 1.00 B 0.40 C 0.40 B 與 C 為兩個分離的分支, 惟細胞比例相等 僅用 VAF 直方圖 0.12 0.30 VAF B 與 C 重疊於此 A B 估得 K = 2 線性樹 + 一條「不可同群」 0.12 0.30 B C 同一峰,兩個成分 A B C K = 3 分支樹 「僅用 VAF」必然估得 K = 2 的原因 π_B·BetaBin(a; d, θ, φ) + π_C·BetaBin(a; d, θ, φ) = (π_B + π_C)·BetaBin(a; d, θ, φ) 兩群與一群對任何一組可能的觀測給出相同機率。 並非近似而是恆等,故 (π_B, π_C) 本身不可辨識。 該條約束的作用 i ∈ B, j ∈ C, 同一連鎖區段, 無分子同時帶 → z_i ≠ z_j K = 2 時該峰僅一個成分 → 必然 z_i = z_j → 該解不可行;最優可行解為 K = 3。 pigeonhole 至此容許分支:0.40 + 0.40 ≤ 1.00 ✓ 所改變者為樹的拓撲與群的個數,而非參數的數值。 該條約束僅確定 i 與 j 兩個變異;該峰內其餘數百個的歸屬仍不可辨識,而重建亦不需要。
純度 0.60、二倍體。真實情形的三群中有兩群細胞比例相等, 故僅觀察 VAF 直方圖時兩者重疊於同一根峰,最大似然解為兩群與線性樹。 單一個「兩者不共存」的共現觀測使兩群的解機率極低,K 增為 3, pigeonhole 至此才容許分支 —— 所改變的是樹的拓撲,而非參數的數值。

設 ρ = 0.60、二倍體、μ = 1,真實情形為三群:

cloneCCF期望 VAF備註
A1.000.30全部腫瘤細胞皆帶有
B0.400.12
C0.400.12與 B 相等

真實的樹為 A 分支至 B 與 C。但直方圖上只見 0.300.12 各一根峰, 最大似然解為 K=2,樹為 A → B 的線性形式。

此結果有兩處錯誤:群數少計一群,且拓撲由分支誤判為線性。 兩者皆無法由內部檢查發現 —— K=2 對此組資料即為最大似然解, 殘差、擬合優度與後驗預測檢查均無異常。

今加入一個共現觀測:B 中的變異 i 與 C 中的變異 j 落於同一個連鎖區段,而該連鎖區段的狀態表中「同時帶有兩者」那一格是空的

K=2 的解在 0.12 一峰上僅有單一成分, 必然將 ij 指派至同一群 —— 而同一群的分子本就該同時帶有兩者,於是那一格空著這件事在 K=2 之下 機率極低。機率最高的解因而變成 K=3, 其中兩個成分位於同一位置 θ=0.12。 pigeonhole 至此容許分支:cB+cC=0.80cA=1.00

機率補充:空格不是結構零

此處說「機率極低」而非「不可行」:那一格空著也可能只是沒抽到, 或只是定序錯誤沒把它造出來。把它當成硬性的不可行是下篇要拆掉的一個誤讀 —— 但只要跨越深度足夠,結論的方向不變。

因此,單一個共現觀測所改變的是樹的拓撲與群的個數,而非參數的數值。 這也是此路線的論據不在精度的原因:精度指「可區分,但量測是否準確」, 可辨識性指「資料原則上能否區分兩種情形」。前者隨資料量改善,後者不然。

此觀測的作用範圍

一條約束確定了什麼、沒有確定什麼:K 與群間關係被定下來,個別變異的歸屬仍不可辨識 上排是同一根峰的前後對照,該峰位於 VAF 零點一二,其中含約一千個變異, 圖上以四十個小圓示意。 左格是加入約束之前:整根峰由單一個成分解釋,一千個變異全部被指派到同一群, 小圓全部是實心的同一種顏色 —— 表面上全部有解,實際上是把兩群併成了一群。 中格是加入的那一條約束:變異 i 與變異 j 落在同一個分析單位裡, 觀測到沒有任何分子同時帶有兩者,於是 i 與 j 不可能屬於同一群。 右格是加入之後:峰的位置沒有變,但必須由兩個成分解釋, i 被釘在其中一群、j 被釘在另一群,圖上分別是藍色與橘色的實心圓; 其餘九百九十八個轉為空心圓,因為兩個成分位於同一個位置, 它們對這兩個成分的似然完全相同,歸屬無從分辨 —— 空心代表誠實標記為未定。 下排是這條約束的收支:左邊列出被確定的三件事 —— 群數由一變二、兩群確實相異、以及樹由線性改為分支; 右邊列出沒有被確定的兩件事 —— 其餘九百九十八個變異各屬哪一群,以及兩群各自的大小比例。 最下方是結論:系統發生重建要的是群數與群間關係,不是逐一指派變異, 所以最稀疏的一對只有二十八條約束仍然足夠 —— 二十八條遠不足以指派一千個變異,但對「這兩個成分是不是同一個」 這種是非判定則已然充足。 一條約束確定了什麼、沒有確定什麼 同一根峰(VAF = 0.12,約 1,000 個變異)加入一條「不可同群」的前後對照。 加入之前 單一成分解釋整根峰 27 個小圓示意約 1,000 個變異 估出 K = 1(此峰) 1,000 個全部有解 —— 但併成一群 加入的那一條約束 i 與 j 落在同一個連鎖區段 帶 i,不帶 j 帶 j,不帶 i 沒有任何分子同時帶有兩者 z_i ≠ z_j 兩者不可能屬於同一群 加入之後 兩個成分,位置仍然相同 i j 實心 = 已釘住 2 個 空心 = 未定 998 個 K = 2(此峰) 但只有 2 個變異的歸屬被決定 確定了這三件事 ① 此峰的成分數由 1 變成 2 ② 這兩個成分確實相異,不是同一群的雜訊 ③ 樹的拓撲由線性改為分支 —— 三件都是群層級的性質 沒有確定這兩件事 ① 其餘 998 個變異各屬哪一群 ② 兩群各自佔多少(π_B 與 π_C 的分配) 兩個成分的 θ 相等,所以那 998 個對它們的 似然完全相同 —— 除非各自另有約束連到 i 或 j 系統發生重建要的是「有幾群、群間什麼關係」,不是逐一指派變異。 所以最稀疏的一對只有 28 個連鎖區段仍然足夠 —— 28 個遠不足以指派 1,000 個變異, 但對「這兩個成分是不是同一個」這個是非判定則已然充足。
同一根峰加入一個「兩者不共存」觀測的前後對照。 峰的位置沒有改變,改變的是它需要幾個成分 —— 而 1,000 個變異中僅有 i 與 j 兩個的歸屬被釘住,其餘 998 個轉為未定。 下排是這個觀測的收支:確定的三件事都在群層級,未確定的兩件都在個別變異層級。

加入該觀測之前,該峰的 1,000 個變異全部被指派至同一群 —— 表面上全部有解,實際上是將兩群併為一群。 加入之後該峰須由兩個成分解釋,但兩個成分的 θ 相等, 故除了被釘住的 ij, 其餘 998 個對這兩個成分的似然完全相同,歸屬轉為不可辨識 —— 除非各自另有共現觀測連至 ij

換言之,一個共現觀測所買到的全部位於群層級

被確定(群層級)未被確定(變異層級)
此峰的成分數由 1 增為 2其餘 998 個變異各屬哪一群
兩個成分確實相異,而非同一群的雜訊兩群各佔多少,即 πBπC 的分配
樹的拓撲由線性改為分支

系統發生重建所需者正是左欄三項,而非右欄。 下篇「最稀疏的一對僅有 28 個連鎖區段」之所以足夠,理由即在於此: 28 個遠不足以指派 1,000 個變異,但對「這兩個成分是否相同」 此一是非判定則已然充足。

四、用途二:以量測值取代自由參數 φ

φ 在第一節中為與其他參數一併擬合的自由參數, 且與 K 不可區辨:一個 φ 較大的寬成分, 與兩個 φ 較小、位置相鄰的窄成分,可擬合出近乎相同的直方圖。 擬合結果取決於懲罰項與初始值,而非取決於生物學。

5% 的連鎖視窗提供φ直接量測: 同一連鎖區段、同一條單倍型上的數個變異,其真實頻率完全相等 —— 它們位於同一批分子上,生物學離散恰為零, 故其間觀測到的離散度全部來自技術雜訊。 依深度與拷貝數分層估計,即得 φ^(d,CN)

惟這個量測有一個必須寫明的界線:它給的是下界,不是 φ 本身。 理由正是上一句的優點反過來 —— 既然這幾個變異位於同一批分子上, 那麼「這批分子的真實比例偏離期望值多少」對它們而言是共有的, 兩者相減時會消去。剩下的只有各自的 read 抽樣與 base error。 而 φ 想捕捉的偏離(該變異的真實 CCF 略偏離群心、 該處 CN 或 μ 估錯、局部 mapping 偏誤)恰恰有一大部分是共有的那一種。

同一批分子上的兩個變異量不到 φ,因為偏移是它們共有的 左右兩欄的差別只有一件事:兩個變異是不是落在同一批分子上。 左欄是同一個連鎖區段裡的兩個變異。定序拿到的那一池分子, 它的真實變異比例本來就會偏離期望值一點點,而 φ 想量的正是這個偏離。 關鍵在於這兩個變異讀的是同一池分子, 所以那個偏離對兩者是完全一樣的,兩個觀測到的頻率一起往同一個方向移。 把兩者相減時,共有的偏移就消掉了,剩下的只有各自抽到哪幾條 read 的隨機性, 以及讀錯字母的機率。 右欄是相距夠遠的兩個變異。它們讀的是兩池互相獨立的分子, 兩池各自偏離,方向不一定相同,所以相減之後偏移還留著,量得到。 最下方是結論表:同一批分子量得到的只有 read 抽樣與 base error 這一層, 該處拷貝數估錯、以及真實細胞比例偏離群心這兩層都被消掉了, 而後兩層恰好是 φ 的主要來源。 所以同一批分子給出的是一個下界,不是 φ 本身。 讀法是:同一批分子這個優點,正好也是它量不到 φ 的原因。 同一批分子的優點,正好是它量不到 φ 的原因 同一個連鎖區段裡的兩個變異 A 與 B 讀的是同一池分子 這池分子的真實比例 p ≠ θ 偏離期望值一點點 —— 這就是 φ 想量的東西 θ θ A B 兩個一起往同一邊移 相減 → 共有的偏移消去 相距夠遠的兩個變異 A 與 B 讀的是兩池獨立的分子 兩池各自偏離 p₁ ≠ p₂ 方向不一定相同 θ θ A B 各走各的 相減 → 偏移還在,量得到 同一批分子量得到哪幾層 read 抽樣、base error 各自獨立 量得到 該處 CN/μ 估錯 兩者共有 消掉了 真實 CCF 偏離群心 兩者共有 消掉了 後兩層恰好是 φ 的主要來源 → 量到的是下界,不是 φ 讀法:「它們的真實頻率完全相等」這個優點,正好也是偏移會互相消掉的原因。
左右兩欄只差一件事:兩個變異是不是落在同一批分子上。 同一批分子時,那池分子偏離期望值多少對兩者完全一樣,兩個觀測一起往同一邊移, 相減即消去;相距夠遠時兩池各自偏離,相減之後偏移還在。 下方是三層來源各自的去留 —— 被消掉的那兩層恰好是 φ 的主要來源。
離散的來源同一批分子上的兩個變異相減後還在嗎
read 抽樣、base error各自獨立 —— 這是量得到的部分
該處 CN/μ 估錯兩者共有消去
真實 CCF 偏離群心兩者共有消去

實作上的改動僅一處:φ 由待估參數改為代入的值。 其後果是模型不再能以「該群雜訊較大」吸收結構 —— 原先擬合為單一寬峰者,若 φ^ 小於擬合所得的 φ,即須改由兩個成分解釋, K 因而增加。此路徑與用途一殊途同歸,惟其作用點在雜訊一端。

但由於代入的是下界,「擬合值大於下界」本身還不足以斷定要多開一群 —— 那個差距也可能來自上表被消去的兩列。 正確的讀法是:下界把「該群雜訊較大」這個藉口的可用範圍限縮, 超出的部分必須被指名(是 CN 估錯、是群心偏離,還是真的多一群),不能默默吸收。 要真正定出 φ,需要的是同群但分子池互相獨立(即相距夠遠)的變異, 而那組變異「真實頻率完全相等」的前提比本節弱得多。這是本路線尚未解決的問題之一。

術語補充:「點擴散函數」只是一個比喻

真值為一個點,量測結果為具有寬度的散布。 惟其操作內容為將一個 nuisance 參數由擬合改為量測,並不涉及解卷積運算

五、用途三:以比值定出成分間距,使純度退化為整體縮放

第一節第一步的三個估計值,其偏誤的作用方式並不相同:

  • ρ 偏誤:所有 c 等比例縮放。樹的拓撲多半不變, 但 pigeonhole 為絕對比較cB+cCcA),判定結果仍可能翻轉。
  • CN 或 μ 偏誤:其作用為逐變異的位移,受影響的變異將落入其他峰,汙染群的組成。 此類偏誤的後果較前者嚴重。
組成機率即為分子的計數:分子為該組的條數,分母為全部的條數 左半把一個分析單位裡的分子按組成分成四堆。 第一堆是兩個位點都是參考型,裡面有六條來自正常細胞的分子。 第二堆是只帶第一個變異,有四條,來自一個腫瘤 clone。 第三堆是只帶第二個變異,是空的。 第四堆是兩個都帶,有三條,來自另一個腫瘤 clone。 右半說明每一堆的高度由誰貢獻決定: 正常細胞只進第一堆,貢獻量是一減純度再乘上它持有的家族拷貝數; 每個腫瘤 clone 貢獻的量是純度乘上該 clone 的細胞比例再乘上它持有的家族拷貝數。 中段把公式畫成一個分數:分子是組成等於 c 的那一堆有幾條分子, 分母是這個連鎖區段全部的分子,兩者相除就是組成機率。 最下方是這張圖真正要說的事:正常細胞的分子只落在第一堆, 所以任兩個非第一堆的分子數相除時,分母中的正常細胞項不出現於分子,共同分母因而消去。 讀法是:公式裡那一長串符號,對應的只是「這一堆有幾條」除以「全部有幾條」。 公式在數什麼:一堆分子 ÷ 全部分子 把分子按組成分堆 00 10 01 11 6 4 0 3 每一堆有多高,由誰貢獻決定 正常細胞 只進 00 那一堆 (1 − ρ) · κ_N clone j 帶 A,進 10 ρ · w_j · κ_j clone j′ 兩個都帶,進 11 ρ · w_j′ · κ_j′ 分子 組成等於 c 的那一堆,有幾條分子 = p(c) 分母 這個連鎖區段全部的分子(上面四堆加起來) 以圖上的數字為例 p(10) = 4 / 13 p(11) = 3 / 13 這張圖真正要說的事 正常細胞的分子落在 00 那一堆。所以拿兩個非 00 的堆相除時, 分母中的正常細胞項不出現於分子,故共同分母消去,純度隨之消去。
公式所計數的對象:一組分子數除以全部分子數。 正常細胞的分子僅落於「全 0」一組,故任兩個非參考型的組相除時,共同的分母消去。
純度、拷貝數與 multiplicity 為什麼在連鎖區段內的比值裡消掉 上半畫一個分析單位裡的分子來源。 正常細胞貢獻的分子在所有 somatic 位點上都是參考型,所以它們全部落在「全 0」那一格, 不會進到其他任何一格。兩個腫瘤 clone 各自貢獻自己的組成格。 中間列出觀測到的組成公式:每一格的分母都是同一個總分子數, 那個分母裡含有純度與拷貝數。 下半是關鍵一步:把任兩個非參考型格子相除,共同的分母整個消掉, 剩下的只有兩個 clone 的細胞比例與各自的家族拷貝數之比。 右下角對照傳統路線:VAF 換算成細胞比例需要純度、拷貝數與 multiplicity 三個估計值相除, 任何一個猜錯結果就跟著錯。 讀法是:HFS 數的是分子,而一個分子要嘛帶這個變異、要嘛不帶, multiplicity 沒有辦法在分子計數上造成兩倍的差別。 為什麼三個估計值會消掉 一個連鎖區段裡的分子來源 正常細胞 clone j clone j′ 全部落在「全 0」那一格 落在組成格 c 落在組成格 c′ p(c) / p(c′) = ( w_j · κ_j ) / ( w_j′ · κ_j′ ) 共同的分母 —— 純度就住在那裡 —— 上下相除整個消掉。 若兩個 clone 在這個位置的家族拷貝數相同,比值就正好是細胞比例之比。 multiplicity 不會出現:數的是分子,一個分子要嘛帶、要嘛不帶。 傳統路線 VAF 換細胞比例 需要三個估計值 purity copy number multiplicity 猜錯一個 結果就跟著錯 同一個 VAF=0.30 可以落在 0.38 到 1.80 (見上篇的換算鏈)
相除之後僅餘兩個 clone 的細胞比例與家族拷貝數之比。 右欄為傳統路線的對照:VAF 換算細胞比例需三個估計值,同一個 VAF=0.30 可落於 0.38 至 1.80 之間。
p(c) p(c) = wjκj wjκj

ρ 僅決定正常細胞分子的數量,而該項為兩個比例共同的分母, 相除時消去。拷貝數則非無條件消去,其前提為兩個 clone 在此處的家族拷貝數相同 (即該處不存在 subclonal 拷貝數變異);此前提可由家族深度比就地檢驗, 不需另行估計全域值。

此項不是一條要另外加進估計式的等式,而是那張聯合狀態表的直接推論: 表裡的每一格本來就是「一組分子數除以全部分子數」,任兩格相除即得上式。 其效果是將 K 個各自自由的位置參數,改寫為一組比值與一個整體縮放ρ 由「每個變異換算時皆須用到的因子」退化為「最後施加的單一純量」。 換算偏誤僅使各群整體平移,相對關係不變

這也解釋了為什麼三個用途不需要三套權重去平衡: 它們讀的是同一張表的不同部分,而那張表只有一個機率。

預測與結果檢視

設將定序深度由 50× 提高到 500×。 本頁所列的三項限制中,哪些會因此改善,哪些不會?

展開答案

用途二與用途三對應的限制會改善,用途一對應的不會 —— 而且是原則上不會。

φ(用途二)會改善。深度提高使每個變異的頻率估計更準, 成分的觀測寬度隨之收窄。這是精度問題,資料量直接作用其上。

c 的比值(用途三)也會改善。比值本身帶有抽樣誤差, 跨越深度提高即降低該誤差。同樣是精度問題。

K(用途一)完全不會改善。兩群的細胞比例相等時 θB=θC,代入混合式後兩群與一群恆等 —— 不是接近,是對任何一組可能的觀測給出相同的機率。 資料量只透過似然影響結論,而似然沿此方向為常數。 深度、變異數目、更換 caller,全部進不到這個方向。

這正是可辨識性與精度的分界線,也是本頁反覆強調的判準: 精度問題可以用更多資料解決,可辨識性問題只能用另一種觀測解決。 而多變異連鎖視窗提供的正是另一種觀測 —— 分子層級的共現,而非更多的頻率值。

與下篇的銜接

本頁確立的是三個用途各自作用在估計式的哪一個參數上, 以及它們為何是同一張聯合狀態表的三個推論。 下篇把那張表的機率逐層寫出來:全域的 clone 如何投影成局部的分子比例、 拷貝數與純度在哪一層進場、一條只覆蓋部分位點的 read 如何計入、 以及定序錯誤與家族誤標各自造出什麼。

其中一項特別值得先預告,因為它決定整條路線站不站得住: 「這一格是空的」有三種完全不同的成因 —— 那個狀態存在但沒抽到、真的沒有任何 clone 帶它、 或它確實不存在但錯誤仍會造出看起來像它的 read。 三者的觀測一模一樣。混為一談的後果是把錯誤造出來的少數幾條 read 讀成一個新的 clone, 而報告上不會留下任何異常跡象。

本模組術語

clone tree(克隆演化樹)
描述腫瘤內各群細胞祖先關係的樹:節點是一群帶有相同變異組合的細胞,邊代表在祖先之上又多拿到變異。要注意同一組群集常常有多棵樹同時相容。
parsimony(簡約法)
在所有與資料相容的解裡,選步數(或成本)最少的那一個。它是一個偏好而不是證據 —— 當多個解並列時,簡約法決定選哪一個,但資料本身沒有排除其他解。
pigeonhole(鴿籠原理)
由父代與子代的細胞比例限制樹形的算術規則:一個細胞至多屬於父節點底下的一個子節點,所以各子節點的細胞比例加起來不得超過父節點。名稱來自鴿籠原理 —— 東西放進籠子,總量不會憑空變多。在 subclone 重建的文獻中也稱為 sum rule 或 crossing rule。它只能排除樹,不能挑出樹:通過檢查的候選通常仍不只一棵,其餘要靠 parsimony 之類的偏好決定。
單倍型家族(一條 germline 單倍型,加上由它衍生的 somatic 單倍型)
把 read 依 HP tag 分成的兩組之一。家族一HP1 與從它長出來的 HP1-1家族二HP2HP2-1;歸不到任何一條 germline 單倍型的 HP3 不屬於任何一族。叫「家族」是因為它把一條 germline 單倍型與由它衍生的 somatic 單倍型收在同一組裡 —— 分組看的是 germline 那一層,不是有沒有帶 somatic 突變。

在同一個 phase block 內,一個家族對應一條染色體拷貝,所以「兩族」就是那個位置上的兩條同源染色體。但兩件事不成立:其一,軟體判定不出哪一族來自父親、哪一族來自母親(那需要另外定序父母);其二,標號只在該 phase block 內有定義,跨 block 的「家族一」並非同一條染色體。

研究指引 · Subclone 系統發生重建 · Part 3 — the joint estimator and its feasibility

下篇:完整的估計式,以及它能不能建起來

把兩類觀測寫成兩個相乘的因子,說明 beta-binomial 為何只是它在單一變異時的邊界情形;再逐層寫出一個多變異單位的生成模型 —— 分子權重、覆蓋遮罩、兩種形狀不同的錯誤、三種不同的「沒有」—— 最後是現行實作要改的兩處與實作分期。

建議先修:5% 能補的三格

本模組學習目標

  • 寫出把兩類觀測合起來的完整估計式,並說明為何是兩個因子相乘而不是兩項相加
  • 把一個多變異連鎖視窗的生成過程逐層寫出來:全域 clone 如何投影成局部分子比例,再如何長成一條 read,以及同一個視窗的兩條家族為何要在同一個因子內合併
  • 區分抽樣零、結構零與錯誤地板,並說明為何 Dirichlet 參數不可為零這件事就是「零不代表不可能」的數學形式
  • 說明分岔與不可同群這類分類為何是輸出而不是證據,以及現行實作要改的兩處各是什麼
  • 依 Poisson 模型算出給定突變負荷下的可用連鎖區段產量,並說明該數量為何足夠

為什麼重要

中篇確立了三件事:僅以 VAF 頻率譜重建時, 群數 K 不可辨識峰寬 φ 與 K 不可區辨成分位置 c 依賴三個外部估計值; 而多變異連鎖視窗的觀測正好各補一格,且三者作用在同一組待估量上: 突變屬於哪一群的指派 z、額外離散度 φ,以及各群的 CCF c

把三者合起來的最直接寫法,是把頻率的對數似然與一串「關係約束」的對數證據 相加,再給每條關係一個權重。這個寫法有一個結構缺陷,而且它不是細節: 多變異連鎖視窗的 read 會被計兩次 —— 一次是它們各自的 VAF 進了頻率項, 一次是同一批分子被換算成關係又進了第二項。 兩項因此不是獨立的資料集,那個和也就不是一個 likelihood; 權重之所以必須存在,正是為了事後稀釋這個重複。

本頁採取另一條路,而它其實更簡單:不要把 read 換算成關係,直接對 read 建模。 把觀測依連鎖視窗切成互不重疊的兩類 —— 只有一個變異的連鎖視窗,與兩個以上變異的連鎖視窗 —— 兩類各寫一個因子,相乘即得完整的 likelihood。 單變異那個因子正是原本的 beta-binomial; 多變異那個因子是同一個模型在多個位點上的一般形式。 兩者不是兩個模型;當視窗只含一個變異時,這個 read 模型的邊界情形就是 beta-binomial。

估計流程的全貌:一組參數,兩類證據,一個分數 圖由上往下讀,是一個會回頭的迴圈。 最上方是要估的參數:群數 K、clone tree、突變指派、逐拷貝基因型與細胞比例 w, 純度是由細胞比例推導出來的,不是額外的參數。 這組參數乘上拷貝數之後投影成局部的分子比例,決定了資料應該長什麼樣。 中段是資料:依「這個連鎖視窗裡有幾個變異」做一次互斥分流。 只有一個變異的視窗,所有 read 都跨過同一個位點, 因此只需要保留 alt 與 ref 的計數,形成 beta-binomial 因子。 兩個以上變異的視窗,每條 read 覆蓋的位點各不相同, 所以要保留逐條 read 的聯合狀態與覆蓋遮罩,形成多位點因子, 而同一個視窗的兩條單倍型家族在這個因子內一起計算。 兩路沒有共用任何一條 read,因此兩個因子是相乘而不是相加,也就不需要權重。 相乘得到完整的 likelihood,再扣掉複雜度、加上群數先驗,才是目標函數 Score。 最後跨不同的 K 比較 Score,取最大者。 右側的回頭箭頭是整個流程的關鍵:這不是一次算完, 外層換一組 K 與離散結構,內層調細胞比例,重算分數再比一次。 估計流程的全貌:一組參數,兩類證據,一個分數 ① 要估的東西 ΘK K:群數 T:clone tree z:突變指派 G:逐拷貝基因型 w:細胞比例(含正常細胞 w₀) 純度 ρ = 1 − w₀ 是推導量,不是額外的參數 投影:乘上拷貝數 → 分子比例 q ② 資料依「這個視窗有幾個變異」分成兩類 單變異視窗 kv = 1 1 1 0 每條 read 都跨過同一個位點, 所以只要留下計數 (am, dm) beta-binomial 因子 單位點的邊界情形 多變異視窗 kv ≥ 2 1 1 – – 1 0 1 0 – 每條 read 覆蓋的位點不同, 所以要留下聯合狀態與遮罩 Dv 多位點 read 因子 兩條家族在這裡一起算 兩路沒有共用任何一條 read —— 所以是相乘,不是相加,也就不需要權重 ③ 相乘就是完整的 likelihood Ldata = Σ log PBB + Σ log Pv 每條 read 恰好計算一次 ④ 扣複雜度、加先驗,才是目標函數 Score = Ldata − 複雜度代價 + log p(K) ⑤ 跨不同的 K 比較,取分數最大的那一個 不是一次算完 外層:換一組 K 以及 T、z、G 內層:調 w 只有 K 個自由度 重算分數,再比一次
這是整頁的地圖,先看它再讀後面的式子。 ①一組參數往下投影成「資料應該長什麼樣」;②真實資料依視窗裡有幾個變異分成兩類 —— 左路每條 read 都跨過同一個位點,留計數就夠;右路每條 read 覆蓋的位點各不相同, 所以必須留下聯合狀態與遮罩。兩路沒有共用任何一條 read, 所以③是相乘而不是相加,權重也就不需要存在。 ④相乘之後還要扣複雜度、加群數先驗才是目標函數,⑤最後跨 K 比較。 右側那個回頭箭頭是重點:這不是一次算完的公式,是一個迴圈 —— 外層換結構、內層調比例,重算再比一次(第七節)。

這個改動的代價與收益都很集中。收益是:權重、關係的可信度、以及為了保護硬約束而設的門檻 全部不需要了,因為證據強弱本來就是似然自己會算的東西。 代價是:觀測通道必須寫完整 —— 逐位點的定序錯誤與整條分子的家族誤標形狀不同, 少寫一種,錯誤造出來的少數幾條 read 就會被讀成一個新的 clone。

十二節分成四段,每一段回答一個不同層次的問題:

回答什麼
式子長什麼樣一~三完整的估計式、多變異連鎖視窗的生成過程,以及它預設的抽樣分布
怎麼不被錯誤騙四~六三種不同的「沒有」、分類為何是輸出而不是輸入、數百個形狀不同的連鎖區段如何合併
怎麼算出來七~八外層定結構、內層估比例;現行實作要改的兩處
工程現實九~十二與相位有關的兩類誤讀、連鎖區段產量、視窗寬度取捨、實作分期

閱讀方式:主線全部寫在沒有摺疊的段落、式子與圖裡。 內文中的虛線摺疊區一律是補充 —— 符號的逐項查表、數字怎麼推出來的、 換一種實作寫法會怎樣、與前兩篇的接點。 第一遍可以整批略過,需要時再展開,主線不會因此斷掉。

概念與互動

一、從一個變異走到完整的目標函數

先不要從最後一條長公式讀起。這個 estimator 只是在反覆回答一個問題: 若假設有 K 個突變群,哪一組群比例、clone tree 與突變指派,最能產生實際看到的 read,同時又沒有為了追逐雜訊而多開群?

在拆解之前先講一件會影響整節讀法的事:這一節要建立的是兩個估計問題,不是一個。

問題在本節的哪裡
內層固定群數 K,找出最好的那一組參數 Θ^K第一到第四層之一:那條大式子是內層的 likelihood
外層比較不同的 K,選出整體最好的 K^第四層之二:Score 才是目標函數

所以讀到第一條長公式時不必期待它就是最終目標 —— 它算的是「給定一組參數,資料出現的機率」, 要等到扣掉複雜度代價、加上群數先驗之後才成為可以拿來比較 K 的分數。 兩層各自怎麼跑,第七節會講。以下先把內層拆成四層:

層次輸入或問題這一層的輸出
1. 一個變異的資料總共 dm 條 read,其中 am 條支持 alt觀測 VAF:VAF^m=am/dm
2. 生物狀態假設變異 m 屬於群 k該狀態預期的 VAF:θmk
3. 觀測機率預期 VAF 與校準過的離散度看到 am 的 beta-binomial 機率
4. 全資料比較把互不重疊的 read 證據各算一次資料配適度 − 複雜度代價 + 群數先驗

第一層:先分清楚觀測值、未知狀態與校準量

這一層只做一件事:把接下來會反覆出現的符號分成三類 —— 可觀測的amdm)、要推論的Kzmck), 以及由上游餵進來或先校準好的CNmμmφm)。 ρ 兩邊都不是 —— 它是推導量,理由在本節後半。

符號表:九個符號逐項的意思與角色(隨時可回來查)
符號意思在 estimator 中的角色
mm 個 somatic variant資料索引
am在變異 m 支持 alt 的 read 數可觀測
dm在變異 m 通過品質篩選的總 read depth可觀測,且 0amdm
K候選突變群的總數;k{1,,K} 是其中一群要比較的模型大小
zm變異 m 被指派到哪一群未知的離散變數;zm=k 表示指派到群 k
ckk 群的 :帶有該群突變的腫瘤細胞比例由 clone 比例、tree 與指派共同決定
ρ:樣本中腫瘤細胞的比例推導量ρ=1w0,其中 w0 是正常細胞的比例(見第二節)
CNm變異 m 所在腫瘤區段的 total copy number通常由 copy-number 分析提供;不是 read depth
μm帶原腫瘤細胞中,幾份拷貝帶有此變異(由候選的 copy genotype 決定或推論
φm相較 binomial 多出的 overdispersion由可比較的校準資料按 depth 與 CN 分層估計

第二層:生物狀態先決定預期 VAF

θmk=E[VAFmzm=k]=ρ·ck·μmρ·CNm+2(1ρ)

分子問的是「樣本中預期有多少份帶突變的 DNA」;分母問的是 「這個位置總共有多少份 DNA」。因此 θmk 不是新的觀測值,而是 在候選指派 zm=k 成立時,模型預測的 VAF 中心

要記住的一句話是:同一群的變異不必落在同一個原始 VAF —— 拷貝數與 multiplicity 會把中心推到別的地方。

數值例:同一群、同一個 CCF,CN 從 2 變成 4 時預期 VAF 掉到哪

例如變異 mam=20dm=100,所以觀測 VAF 是 0.20。 若候選群的 ck=0.50、純度 ρ=0.80CNm=2μm=1, 模型預測 θmk=(0.8×0.5×1)/(0.8×2+0.2×2)=0.20,與資料吻合。 只把 CNm 改成 4,預期 VAF 就降為約 0.11。

只有二倍體且 μm=1 時,才可化簡成 θmk=ρck/2; 有 copy-number alteration 或 LOH 時不可使用這個捷徑。

第三層:beta-binomial 把「相差多少」換成機率

這一層要的只有一句話:觀測到的 alt count 不會剛好落在 θmk 上, 所以要用一個容許波動的分布去問「差這麼多有多不意外」

am(dm,zm=k)BetaBinomial(dm;αmk,βmk),αmk=θmkκm,βmk=(1θmk)κm

隨機結果是 alt count amdm 是已知的試驗次數,θmk 控制中心。

推導補充:beta-binomial 是兩段抽樣積出來的,以及 κφ 的換算
πmzm=kBeta(αmk,βmk),am(dm,πm)Binomial(dm,πm)

白話是先允許這一批分子的真實 alt 比例 πmθmk 周圍小幅變動,再由 dm 條 read 抽出 alt count am; 把看不見的 πm 積分掉,就得到上面那條 beta-binomial。

κm 是 Beta 分布的 concentration:越大表示 πm 越集中在中心。 為了讓「越大越寬」較直觀,本頁改用 φ

φm=1κm+1,Var(amdm,zm=k)=dmθmk(1θmk)[1+(dm1)φm]

因此 φm=0 是普通 binomial 的極限;φm 越大,同一中心周圍可接受的 read-count 波動越大。它不是可任意調寬的「峰寬旋鈕」 —— 進模型的是一個先用獨立資料校準好的 φ^(dm,CNm),不是搜尋時可以順手調大的參數。

實作補充:φ 怎麼分層校準,沒資料的格子怎麼辦

在「read depth 分層 × 腫瘤 CN 分層」內用獨立校準資料估計, 再以平滑或 shrinkage 幫助稀疏 strata。沒有足夠資料的 (d,CN) 格要標為未知並做敏感度分析, 不可悄悄套用一個寬峰 —— 那等於偷偷把峰調寬,而峰寬與 K 在中篇已證明不可區辨。

不要把這裡的 φm 與第三節的 τu 混在一起。 φm 描述跨獨立變異時單位點 alt count 的額外變異;τu 則是多變異連鎖區段內 整個狀態比例向量的 concentration,而且本頁稍後主張 PCR-free 長讀資料預設不需要額外的 τu

第四層之一:全資料的 likelihood,讓每批 read 只出現一次

相加為什麼不是 likelihood:看兩項的取用範圍就知道 圖用一條按比例畫的長條代表全部一萬五千五百個變異。 左邊較長的一段是自己獨佔一個連鎖視窗的變異,約一萬四千個; 右邊那一小段是落在多變異視窗裡的變異,約一千五百個,約佔一成。 每一項的取用範圍畫成長條上方或下方的一條細帶。 上半是相加的寫法:第一項的細帶蓋住整條長條,第二項的細帶只蓋住右邊那一小段, 兩條細帶在右段上下對齊、範圍重疊,該欄因此被標成紅色 —— 那一成變異的 read 被兩項各用了一次。 這就是為什麼那個和不是 likelihood,也是權重存在的唯一理由:稀釋這段重疊。 下半是相乘的寫法:同一條長條先被切開成沒有交集的兩段,中間留出可見的空隙, 兩條細帶因此不再上下重疊。 圖最下方用讀圖示表示兩段各留下什麼資料:左段只留一個位點的 alt 與 ref 計數, 右段留下逐條 read 跨越多個位點的聯合狀態與覆蓋遮罩。 因此兩個因子可以直接相乘得到完整的 likelihood,權重也就不需要存在。 相加為什麼不是 likelihood:看取用範圍就知道 ✗ 相加:兩項的取用範圍重疊 ① 每個位點的 alt/ref 計數 獨佔一個視窗的變異 14,025 1,475 ② 同一條 read 上的共現 這一欄被兩項各用了一次 同一批 read 算了兩次 → 那個和不是 likelihood;權重存在的唯一理由,就是事後稀釋這段重疊。 ✓ 相乘:先把資料切開,兩個因子各管一段 兩個因子的取用範圍 S₁ 14,025 個變異 S₂ 1,475 個變異 只留一個位點的 alt/ref 計數 留逐條 read 的聯合狀態與遮罩 兩段沒有交集 → 相乘就是完整的 likelihood → 權重不必存在
長條是按比例畫的全部變異。上半兩條範圍帶在右段重疊 —— 那一成的變異,其 read 被兩項各用了一次,所以那個和不是 likelihood; 權重存在的唯一理由就是事後稀釋這段重疊。 下半先把長條切成沒有交集的兩段,範圍帶之間出現空隙,重複計數消失,權重也就不必存在。
P(DΘK)=mS1PBB(amdm,ΘK)·vS2Pv(DvΘK)

這是 likelihood,不是目標函數 —— 目標函數還要再扣複雜度、再加群數先驗,見下一小節。 第二個乘積跑在連鎖視窗上,不是跑在單倍型連鎖區段上;理由見後面兩小節。

符號表:S1S2DvuPv 在這條式子裡的精確意思
符號這裡的精確意思
D送入 estimator 的全部 read 觀測
S1只含一個變異、而且其 read 未進入任何多變異連鎖視窗的變異集合
S2含兩個以上變異的連鎖視窗集合;v 是其中一個視窗,kv 是該視窗的變異數
Dv連鎖視窗 v 的逐條 read 觀測:覆蓋遮罩、ref/alt 狀態,以及觀測到的家族標籤
u一條單倍型連鎖區段=視窗 v × 一條家族;一個視窗至多切出兩條,兩條都在同一個 Pv 因子內
PBBS1 中一個單變異觀測的 beta-binomial 機率;中心與離散度已包含在參數中
Pv第二節才會展開的多變異聯合 read 模型,兩條家族一起;它也包含各位點的邊際 VAF
ΘK固定群數 K 時所有待估狀態的縮寫

先講清楚「家族」是什麼

這個詞接下來會一直出現,所以先定義。 一條 就是HP tag 分出來的兩組 read 之一

家族包含哪些 HP tag對應什麼
家族一1(germline 單倍型 1)+ 1-1(由它衍生、帶 somatic 改變的分子)在同一個 phase block 內,兩族就是該處的兩條同源染色體
家族二22-1
都不是3:somatic 改變歸不到任何一條 germline 單倍型不進任何一族
命名補充:為什麼叫「家族」而不是直接叫「單倍型」

因為分組看的是germline 那一層11-1 屬於同一族, 差別只在後者多帶了 somatic 改變。換句話說,一族=一條 germline 單倍型 連同從它長出來的 somatic 分支

為什麼因子跑在視窗上,而不是跑在家族上

這是很容易寫錯的一步,而且寫錯不會有任何錯誤訊息。 直覺上,既然家族一與家族二的 read 各自形成一張 0/1 狀態表, 把兩張表各算一次機率再相乘似乎最自然。但那樣寫是錯的,有兩個各自獨立的理由:

兩條家族被兩件東西綁在一起,所以拆不開 左右並排比較同一個連鎖視窗的兩種寫法。 每一邊都畫成兩條泳道,上面一條是家族一,下面一條是家族二,泳道裡是該家族的 read。 兩件把兩族綁在一起的東西都畫了出來。 第一件是家族誤標:家族一的泳道裡混進一條顏色屬於家族二的 read, 並有一支箭頭從家族二的泳道指過來,表示這條分子實際來自隔壁,只是標籤標錯了。 第二件是方向開關:左邊只有一個開關,兩條接線分別接到兩條泳道, 所以撥動它會同時翻轉兩族。 左邊因此只輸出一個因子,方向也只被邊際化一次。 右邊是錯誤的寫法:兩條泳道之間築了一道牆當成互相獨立, 那條被誤標的分子於是在兩條泳道各留下一份,用紅圈標出「同一條算了兩次」; 方向開關也變成各自獨立的兩個。 右邊因此輸出兩個相乘的因子,證據量被高估,方向的不確定性也被算掉一半。 兩族被兩件東西綁在一起,所以拆不開 ✓ 綁在一起 → 一個因子 家族 u₁ 家族 u₂ ① 誤標 ξv:這條來自 u₂ σv 一個開關 兩族共用 Pv(Dv ∣ ΘK) 兩族一起算,方向只邊際化一次 ✗ 當成獨立 → 兩個因子 家族 u₁ 家族 u₂ 同一條算了兩次 兩個獨立開關 Pu₁ × Pu₂ 兩個因子各自獨立
兩條家族各有自己的狀態表 —— 資料結構上確實是分開的 —— 但它們被兩件東西綁在一起:家族誤標閘門會把分子從一條通道搬到另一條, 而方向變數 σv 是整個視窗共用一個。 所以分開的是,不是機率:一個連鎖視窗只出一個因子。
綁住兩條家族的東西逐家族相乘會發生什麼
家族誤標:一條分子可能被標到另一條家族(第二節的 ξ兩條家族的觀測不是條件獨立,乘積高估了證據量 —— 同一條被誤標的分子在兩邊各留下一次痕跡
方向變數 σv:兩條家族互為補集,共用同一個方向同一個 σv 會被邊際化兩次,等於當成兩個獨立的擲硬幣,把方向的不確定性算少了一半

因此本頁的規格是:資料表依家族分開建立,機率在視窗這一層合併。 兩條家族的狀態表都由同一組 ΘK 投影出來, 再一起通過第二節那個成對的觀測通道,最後合成一個 Pv

實作補充:若為了計算成本還是逐家族相乘,該怎麼稱呼它

那是一個 composite likelihood 近似(把相關的觀測當成獨立來相乘的簡化寫法), 可以用,但必須如此稱呼並記錄它的偏誤方向 —— 上表兩列已經寫出方向: 高估證據量、低估方向的不確定性。標準與本頁稍後對 「每個遮罩各自一個分布」所立的完全相同。

更完整地說,ΘK 包含細胞比例 w T、 突變指派 z、逐拷貝基因型 G,以及觀測錯誤參數 eckwTz 決定,μmG 決定。 e 不是一個錯誤率,而是一組觀測通道參數的縮寫,包括稍後的逐位點錯誤 ε 與 家族誤標率 ξ。 外部提供的 copy number 與校準後的 φ^ 是條件輸入,為了避免式子過長沒有逐項寫在條件線右側。

ρ 不在這張清單上。本頁的 w 把正常細胞當成第 0 項 一起放進同一個 simplex(g=0Kwg=1,見第二節), 所以純度是推導量 ρ=1w0,不是另一個自由參數。 連續自由度因此是 K 個 —— K=5 時是 5 個。

符號對照:別的論文把 ρ 寫成獨立參數,那樣算會不會多一個?

不會,兩種寫法自由度相同。文獻上常見的寫法是把 ρ 單獨拉出來, 再讓腫瘤內部的比例自成一個 simplex(k=1Kwk=1), 於是自由度是 1+(K1)=K —— 跟本頁的 K 一樣, 因為ρw0 本來就是同一個自由度的兩種寫法。 兩個數錯的方向相反:把 ρw0 各算一次會多一個, 只數腫瘤內部的 K1 則漏掉純度那一格。

推論選項:把突變指派 z 邊際化掉會改變什麼

本式把 z 當作與其他參數共同最佳化的離散狀態,也就是輸出一組明確的突變指派。 若實作選擇把 z 邊際化,likelihood 必須改為對所有指派加總,模型選擇的校準也要跟著重做; 兩種推論方式不可在同一個 Score 裡混用。第七節那張「什麼時候才需要 EM」的表 講的就是這個選擇的下游後果。

成立的關鍵不是「S1S2 兩個名字不同」,而是給定 ΘK 後,兩者背後的 read 觀測可視為條件獨立且沒有交集。 若一批 read 已進入 Dv,它就不能再透過該位點的 am/dm 進入第一個乘積。

要點在於 S2 的因子已經包含那些變異的邊際 VAF: 若視窗 vkv 個變異,一張 2kv 格的聯合表沿任一個位點加總, 得到的就是該位點的 alt/ref 計數。 所以把多變異連鎖視窗的變異再放回第一個乘積,就是把同一批 read 算第二次。

第四層之二:目標函數 = 配適資料 − 複雜度代價 + 先驗偏好

Ldata(K,ΘK)=mS1logPBB(amdm,ΘK)+vS2logPv(DvΘK)
Score(K,ΘK)=Ldata(K,ΘK)12pKlogMeff+logp(K),Θ^K=argmaxΘKLdata(K,ΘK),K^=argmaxK{1,,Kmax}Score(K,Θ^K)

這才是目標函數。第二條是內層問題(固定 K,找最好的 ΘK), 第三條是外層問題(跨 K 比較)。兩層怎麼實際跑,見第八節。

目標函數中的項白話問題數值變大時代表什麼
Ldata(K,ΘK)這個候選模型產生目前 read 資料的能力有多好?資料越支持這組群、tree 與指派
-12pKlogMeff為這個模型用了多少自由度?此項永遠是代價;K 或自由參數越多,扣分通常越大
logp(K)分析前對群數 K 有何先驗偏好?先驗上較可信的群數得到較少懲罰

複雜度項不可省略,因為多開一群幾乎總能改善資料配適,卻可能只是在吸收錯誤。 而它扣多少,取決於 Meff —— 那是考慮同一突變叢與同一連鎖區段內相關性後的 有效獨立資訊量,不是把 read 或變異數直接代入。這個量估錯,模型選擇就整個歪掉

符號與校準:KmaxpKMeffp(K) 各是什麼

Kmax 是分析前指定的最大候選群數;pK 是群數固定為 K 時真正被估計的自由參數數目; p(K) 是群數先驗。先對每個候選 K 找到最佳的 Θ^K,再比較其分數。

Meff 的定義必須在實作前固定並以模擬或 bootstrap 校準;若做不到,應改用預先指定的 held-out predictive score,而不是把未校準的 BIC 當成精確答案。

還有一件尺度上的事要先講清楚:局部的比值只能定出 c 的相對尺度, 不能憑空補出純度的絕對尺度 —— 絕對尺度只能來自 S1 那一批全基因體的單變異觀測, 或外部的純度估計。

實作選項:有可靠的外部純度估計時該怎麼接進來

作法不是「多固定一個參數」,而是w0 釘住w0=1ρ^),自由度因而由 K 降為 K1。 沒有外部估計時 w0 與其餘比例一起估。

此處寫的是可實作的統計規格,不是已完成或已驗證的 estimator 程式。 以下各項定義的目的,是讓後續實作能逐項測試;在合成資料與真實重複資料通過末節所列驗證之前, 不得把 Score 的最大值當成已證實的生物學結論。

符號多,不代表待估參數多

到這裡已經出現了二十幾個符號,很容易產生「要估的東西多到不可能估得準」的印象。 但大部分符號不是自由參數:有些是從別的量算出來的,有些是上游分析餵進來的, 有些要先用獨立資料校準好才進模型。把它們分清楚, 是判斷「這個結果可不可信」的第一步 —— 因為風險幾乎都不在自由參數上, 而在那些被當成已知、其實估錯了的量上

二十幾個符號,真正在搜尋的只有中間那五個 圖由左至右是一條決定關係的鏈。 左欄是進模型前就要備妥的量:拷貝數、過度離散度、逐位點錯誤率、家族誤標率、 有效資訊量與覆蓋遮罩,共六個。它們被一個紅色虛線框圈起來, 因為這一側估偏時不會有任何錯誤訊息,模型照樣收斂,只是收斂到錯的群數與錯的樹。 中欄是主模型真正在搜尋的東西,只有五個:群數、clone tree、突變指派、 逐拷貝基因型,以及一組細胞比例。 右欄是沿箭頭算出來的推導量:純度、CCF、multiplicity、預期 VAF 與分子比例、 錯誤地板總量,它們不是額外的自由參數。 兩支粗箭頭標出方向:左欄餵進來,右欄算出去。 所以符號雖多,待估的只有中間那一欄。 二十幾個符號,真正在搜尋的只有五個 ① 進模型前備妥 CNm 拷貝數 φ 過度離散度 ε 逐位點錯誤 ξv 家族誤標 Meff 有效資訊量 遮罩 覆蓋幾何 估偏時不會報錯,只是安靜收斂到錯的 K 餵進來 ② 主模型自由估 只有這五個在搜尋 K 群數 T clone tree z 突變指派 G 逐拷貝基因型 w 細胞比例 自由度 K 個,定義域是一個 simplex 算出來 ③ 沿箭頭算出來 不是額外的參數 ρ 純度 = 1 − w₀ ck CCF μm multiplicity θ、q 預期 VAF 與分子比例 δv 錯誤地板總量
由左至右就是「誰決定誰」:左欄餵進來、中欄是唯一在搜尋的、右欄沿箭頭算出去。 下表逐項列出同一批量;圖要看的是方向與比重 —— 中間那一欄只有五個, 而紅框圈起來的左欄估偏時不會報錯,只會讓中欄安靜地收斂到錯的答案。

兩個讀法上的要點。其一,真正在搜尋的只有五樣東西: 群數 K、clone tree T、突變指派 z、逐拷貝基因型 G, 以及一組 K 個自由度的細胞比例 w。其餘不是算出來的,就是進模型前該備妥的。 其二,「不自由估」的那幾個才是這個方法的真正風險所在 —— CNφεξvMeff 估偏時模型不會報錯,它會照樣收斂,只是收斂到錯的 K 與錯的樹。 第四節的錯誤地板與本頁末的問答,講的都是這件事。

逐項清單:十五個量各自的類型、來源、是否自由估、不確定度怎麼處理
類型來源主模型中自由估?需先校準?不確定度怎麼處理
K模型大小推論(外層)Score 的模型選擇
T(clone tree)離散結構推論(外層)保留多個候選,不只報一棵
z(突變指派)離散結構推論(外層)共同最佳化,或邊際化(兩者不可混用)
G(逐拷貝基因型)離散結構推論+CN 候選(外層)候選整組帶入
w(細胞比例,含 w0連續參數推論(內層,K 個自由度)似然;需多起點
ρ(純度)推導量ρ=1w0有外部估計時改為釘住 w0
ck(CCF)推導量w,T,z 算出w 傳遞
μm(multiplicity)推導量G 決定隨候選 genotype 列舉
CNm(total CN)上游輸入copy-number 分析/QC敏感度分析;或多個 CN 候選邊際化
φm(單位點 overdispersion)校準量獨立校準資料,依 depth × CN 分層分層校準;稀疏格標為未知
ε(逐位點錯誤)校準輸入平台/basecaller,加序列脈絡分層依脈絡分層,不用單一常數
ξv(家族誤標率)觀測 nuisance就地、成對估計視實作成對估計;kv2 時主導錯誤地板
δv(錯誤地板總量)推導量εξv 算出隨兩個錯誤通道傳遞;不要與 ε 混用
τu(區段內離散度)觀測 nuisance預設不啟用(第三節)預設否殘差顯示過度離散時才加
σv(家族方向)潛在變數邊際化掉每視窗一個,加總掉
Meff(有效資訊量)校準量模擬或 bootstrap做不到就改用 held-out predictive score

因此這個 estimator 不是從原始 BAM 無條件地推出 clone tree。 它吃的是一套已經跑過 variant calling、copy-number calling、定相、單倍型標記 與錯誤校準的上游資料,而上述每一項都是它的輸入契約的一部分。 逐項該釘住哪些工具版本與門檻,是另一個層次的問題,本頁不展開。

二、一個多變異連鎖視窗的生成模型

上式的 Pv(DvΘK) 是整份規格的核心。它必須從全域參數一路長到一條 read 上看到的字母,中間不能有任何自由參數 —— 一旦局部比例可以自己亂動, 這個視窗就不再對全域參數施加任何限制,整條路線也就白做了。

先講清楚一件事:兩類觀測是同一條生成鏈的兩個出口

在展開細節之前要先擋掉一個很自然、但會把整件事讀歪的誤解: 單位點 VAF 不是多位點狀態表的先驗。 兩者都是觀測,都由同一組 ΘK 沿同一條鏈生出來:

細胞組成(w,T,z)拷貝加權的分子比例(η,q)read 上的觀測(am/dm,Dv)

中間那一步就是「細胞這一層」換算到「分子這一層」的地方,換算因子是拷貝數。 θmk(第一節)與 qu,h(本節)是同一個換算的兩個出口: 前者只問一個位點,後者問一整組位點的聯合。

單位點 VAF 與多位點狀態表是同一條生成鏈的兩個出口 圖由左至右分成三段。左段是細胞這一層:正常細胞與各個 clone 依細胞比例 w 混在一起。 中段是換算:每個 clone 貢獻的分子數不只看它的細胞比例,還要乘上它在這個位置的拷貝數, 所以細胞比例與分子比例之間差一個拷貝數因子,這就是 eta 與 q 所做的事。 右段是兩個出口:同一組分子比例,只問一個位點時得到預期 VAF theta, 問一整組位點的聯合時得到狀態表 q,兩者最後都變成 read 上的觀測。 圖下方的橫帶是重點:VAF 不是狀態表的先驗, 兩者是同一組參數生出來的兩批觀測,所以能相乘的是機率, 前提是同一條 read 不會同時進入兩個出口。 同一條鏈,兩個出口 ① 細胞組成 參數 w、T、z 正常細胞 w₀ clone 1 w₁ clone 2 w₂ 這一層講的是「有多少細胞」 總和為 1,所以純度 ρ = 1 − w₀ ② 乘上拷貝數 得到 η 與 q 一個 clone 貢獻多少分子 不只看它有多少細胞 CN = 4 的 clone 貢獻加倍 LOH 時兩條同源染色體 不再各佔一半 —— 這裡自動處理 這一層是「細胞 → 分子」的接縫 出口一:只問一個位點 預期 VAF θ_mk 觀測是 a_m / d_m → beta-binomial 因子 出口二:問一整組位點 狀態表 q_u,h 觀測是 D_v → 多位點 read 因子 所以 VAF 不是狀態表的先驗 兩個出口都是觀測,由同一組 Θ_K 生出來 —— 不是先用 VAF 當先驗,再去生 HP1/HP2。 層級之所以接得起來,是因為兩邊最後都被換算到 read 這一層: 「在這組參數下,看到眼前這些 read 的機率是多少?」 能相乘的前提只有一個:同一條 read 不可以同時進入兩個出口。
中段那個「乘上拷貝數」就是細胞層與分子層的接縫 —— θmkqu,h 是同一個換算的兩個出口, 一個只問一個位點,一個問一整組位點的聯合。

這解釋了 CCF 與 clone 比例講的是細胞、 而 HP1/HP2 的狀態表講的是分子,層級不同卻仍能相乘的原因: 它們最後都被換算到同一層 —— 兩個因子都在問「在這組 ΘK 下,看到眼前這些 read 的機率是多少」。 所以能相乘靠的是兩件事,兩件都必須成立: 其一,細胞 → 分子的投影要正確(這是本節的工作); 其二,沒有一條 read 同時進入兩個因子(這是第一節的工作)。

這條鏈預設了什麼

投影正確與否,取決於幾條沒有寫在式子裡、但整份規格都靠它們成立的假設。 把它們列出來,是因為違反時的後果各不相同,不列出來就沒辦法判斷某個結果可不可信:

假設用在哪裡違反時會怎樣
每個突變只發生一次(無限位點)第八節的候選列舉:一條邊只加一個突變recurrent/convergent 突變會被讀成「兩群共享祖先」,最小成本解補進的不是記帳節點而是錯的拓撲
突變不會消失同上,以及 H 沿樹單調累積deletion/LOH 把突變刪掉時,子代看起來「沒有」祖先的突變,同樣偽造出分岔
同一 CN 區段內各 clone 的拷貝數一致η 的分母 CNugsubclonal CNA 下分母逐 clone 不同,q 整體偏移;第十二節第 6 階段才放寬
一條 read 就是一條分子第三節主張預設 multinomial有 PCR 重複時同一條分子被讀到多次,計數的離散度被低估
無限位點假設違反時,錯的不是節點而是拓撲 圖分成三欄。左欄是假設成立的情形:每個突變在整棵樹上只發生一次, 所以兩個細胞群共同帶有某個突變,就真的代表它們共享一個祖先,重建出來的樹是對的。 中欄是重複突變:同一個位點在兩支各自獨立發生一次, 資料上看起來和共享祖先完全一樣,於是兩支被錯誤地併到同一個祖先之下。 右欄是突變遺失:某支的突變被刪除或因雜合性缺失而消失, 子代看起來沒有祖先的突變,於是本來巢狀的關係被讀成分岔。 三欄的觀測都不會產生任何錯誤訊息,差別只在重建出來的樹是對是錯。 重點是這兩種違反改動的是樹的形狀本身,不是多補一個潛在節點就能修掉的問題。 違反時,錯的是樹的形狀 假設成立 每個突變只發生一次 兩支各帶自己的突變 共同帶有某突變 = 真的共享祖先 → 重建出來的樹是對的 違反一:重複突變 同一位點在兩支各發生一次 兩邊看到同一個突變 資料上與「共享祖先」 完全一樣,分不出來 → 兩支被併到同一祖先下 違反二:突變遺失 deletion 或 LOH 把它刪掉 子代看起來沒有它 本來是巢狀關係, 卻讀成兩群互不包含 → 偽造出一個分岔 這不是多補一個潛在節點就能修掉的問題 潛在節點修的是「這個狀態沒被抽到」;這裡壞掉的是拓撲本身 而且三欄的觀測都不會產生任何錯誤訊息。
三欄的觀測都不會產生錯誤訊息,差別只在重建出來的樹是對是錯。 重複突變讓兩支被併到同一祖先下,突變遺失則把巢狀關係讀成分岔 —— 兩者壞掉的都是拓撲本身,不是補一個潛在節點能修的。

前兩條在多數體細胞 SNV 上成立得相當好,這也是簡約類方法長期沿用它們的理由; 但它們是假設而不是結論,尤其在高突變負荷或 CN 劇烈變動的樣本上要另行檢查。 第四節那個「潛在節點的三種身分」正是這條假設在輸出端的表現形式。

生成模型:從全域的 clone 一路長到一條 read 上看到的字母 五層,上排三格下排兩格,每一層只做一件事,中間沒有自由參數。 第一層是全域物件:一棵 clone tree、每個 clone 的細胞比例,以及每個突變掛在哪個 clone 上。 全基因體只有這一份,所有連鎖區段共用。 第二層把全域物件投影到一個連鎖區段上。一個連鎖區段是一個連鎖視窗乘一個單倍型家族, 所以只看得到一條染色體拷貝,另一條拷貝屬於另一個連鎖區段。 投影的結果是每個 clone 在這個連鎖區段上的局部基因型, 例如全參考、只帶第二個突變、三個都帶。 第三層把細胞比例換成分子比例:一個細胞貢獻幾條分子,取決於它在這裡有幾份拷貝, 所以權重是細胞比例乘上該家族的拷貝數,再除以全部分子數。正常細胞只落在全參考那一格。 第四層是觀測通道,有兩個入口:逐個位點的定序錯誤,一次只改一個字母; 以及整條分子的家族誤標,一次把所有位點一起換成另一個家族的樣子。 兩者的形狀不同,所以不能用同一個參數描述。 第五層是一條 read:它只覆蓋到部分位點,沒覆蓋到的位點被邊際化掉, 不是被當成參考型。所以一條只看到第一與第三個位點的 read, 會同時支持所有第一與第三位點相符的完整狀態。 右下角說明 k 等於一時這整條路徑退化成什麼:只有兩格, 第三層的比例就是期望 VAF,第五層沒有部分覆蓋的問題,得到的正是 beta-binomial。 最下方標注:所有連鎖區段共用第一層,這就是合併發生的地方,不需要任何對齊步驟; 而局部表格不是第二批資料,同一批 read 不可以在兩邊各算一次。 讀法是:局部看到的每一個數字,都是同一組全域參數投影下來的。 生成模型:全域 clone → 連鎖區段 → 分子 → 通道 → 一條 read ① 全域參數 只有一份,所有連鎖區段共用 clone tree 細胞比例 w 突變指派 z ② 投影到一個連鎖區段 連鎖區段 = 連鎖視窗 × 單倍型家族 000 正常 010 clone A 111 clone B 只看得到一條拷貝 另一條在另一個連鎖區段裡 ③ 細胞 → 分子 η = w·A / Σ w·CN 000 010 111 拷貝數在這裡進來 不是事後乘上去的 ④ 觀測通道(兩個入口) 逐位點錯誤:一次只改一個字母 000 → 010  機率 ε 家族誤標:整條分子一起搬過來 另一家族的 111  機率 η 形狀不同,不能共用一個參數 ⑤ 一條 read 1 1 只覆蓋第 1、3 個位點 沒覆蓋的位點要邊際化 不是填成參考型 P = q(101) + q(111) 一條中立的 read,不是反對票 k = 1 時退化成什麼 只有兩格(參考/變異), ③ 的比例就是期望 VAF, ⑤ 沒有部分覆蓋的問題。 = beta-binomial 合併在哪裡發生 每個連鎖區段各自跑完 ②③④⑤, 但都由同一組 ① 算出來, 相乘即完成,不需要對齊步驟。 局部表格不是第二批資料:它與 95% 連鎖視窗的 VAF 由同一組參數產生。 所以同一批 read 不可以在兩邊各算一次 —— 多變異連鎖區段的邊際 VAF 已含在它的聯合表裡。
五層各做一件事,中間沒有自由參數。 注意第二層:一條家族只看得到一條染色體拷貝,另一條是同一個視窗裡的另一條家族 —— 這決定了第三層的分母該怎麼寫。第五層的部分覆蓋是邊際化,不是填成參考型。

連鎖區段、局部基因型與分子權重

一個連鎖區段 u 是一個單倍型連鎖區段:一個連鎖視窗 × 一條 。 這個切法很重要:它表示一個連鎖區段裡的 read 全部來自同一條染色體拷貝, 另一條拷貝屬於同一個視窗的另一條連鎖區段。因此 不可以在連鎖區段內部再把兩條拷貝混起來寫成各佔一半 —— 那是尚未依家族分組時的寫法,用在已分組的資料上會把細胞比例整體算錯將近一倍。

要同時記住兩件看似相反、其實各管一段的事,第一節那張表已經寫過一次: 狀態表逐家族分開建立(u 這一層),機率在視窗合併(v 這一層)。 以下先在單一家族內把 qu 建起來,本節末尾再把兩條家族接回同一個 Pv

設 clone g 在拷貝 b 上的全域基因型為 Gg,b,m{0,1}, 投影到連鎖區段 u 的那幾個位點,即得局部基因型 Hugb{0,1}kv。基因型寫在拷貝這一層而不是 clone 這一層, 是為了讓 cis/trans 與 LOH 有地方表達。分子權重則為:

ηugb=wg·Augbg'wg'·CNug',qu,h=g,bηugb·1(Hugb=h)

Augb 是該拷貝在此處的份數,CNug 是 clone g 在此處的總拷貝數。 分母是全部分子數,所以 g,bηugb=1拷貝數在這裡進入,不是事後乘上去的;LOH 時兩條同源染色體不再各佔一半, 這條式子自動處理。正常細胞是 w0 那一項,CN=2, 其局部基因型恆為全參考。

回頭對照:這條式子就是第一節說「ρ 不是自由參數」的來源

g 跑遍 0K,且 g=0Kwg=1, 所以純度是 ρ=1w0 —— 純度已經包含在細胞組成裡,不是事後再乘一次的換算因子。 第一節 θmk 那條式子裡的 ρck 也都是從這同一個 w 算出來的,只是在單變異那一層寫成比較眼熟的形式。

要注意 qu,h分子比例而非細胞比例,兩者差一個拷貝數因子。

與中篇的接點:用途三不是額外的約束,是這個模型的推論

中篇第五節那條「兩個非參考型的組相除、共同分母消去」的式子, 就是這裡任取兩格相除的結果。 所以它不是一條要另外加進去的等式約束 —— 寫下 qu,h 之後,那條式子自動成立。

覆蓋遮罩:沒覆蓋到的位點要邊際化

一條 read 只覆蓋連鎖區段裡的一部分位點。設其覆蓋遮罩MJu、觀測到的字母為 y{0,1}|M|,則

qu,M(y)=h:hM=yqu,h

也就是把所有「在 M 上與 y 相符」的完整狀態加起來。 一條只看到第一與第三個位點、讀到 11 的 read,同時支持 101111沒覆蓋到的位點不可以填成參考型 —— 那會把一條中立的 read 變成一條反對 111 的證據。

一個連鎖區段一個 p,不是一個遮罩一個

同一個連鎖區段裡不同遮罩的 read 取樣的是同一池分子, 所以它們的比例是相關的。正確的寫法是讓整個連鎖區段共用一個潛在比例向量, 每條 read 各自從它自己的遮罩投影出來:

puDirichlet(τu·qu),yiMi,puCategorical(ProjMi(pu))
實作補充:改成「每個遮罩各自一個分布」會怎樣

那等於宣稱不同遮罩的 read 來自互相獨立的分子池。那是一個 composite likelihood 近似,可以用,但必須如此稱呼, 而且它會低估同一連鎖區段內部的相關性 —— 與前一節「逐家族相乘」是同一類的簡化。

觀測通道:兩種形狀不同的錯誤

qu 是「還沒經過任何錯誤」的比例。實際觀測到的比例要再過一層:

逐位點錯誤與整條分子誤標的形狀不同,而且位點越多,誤標越是主角 左邊是逐位點的定序錯誤。它一次只改一個字母, 每個位點各自獨立,所以要一次改對三個位點才會生出一個完全不同的狀態, 機率是單點錯誤率的三次方,小到可以忽略。 右邊是整條分子的家族誤標。一條本來屬於另一個單倍型家族的分子被標錯, 整條就這樣跳到這個連鎖區段裡,它的三個位點是一起過來的, 所以機率只有一個誤標率,跟位點數完全無關。 中間下方是兩者的比較表。以單點錯誤率千分之五為例, 差一個位點時兩者相當;差兩個位點時誤標大約高一百倍; 差三個位點時高兩萬倍以上。 所以位點越多,能造出假狀態的幾乎只剩誤標這一條路。 最下方是後果:如果模型只寫了逐位點錯誤, 那麼在全參考的背景上冒出來的三位點全變異狀態, 在模型眼中會是「錯誤不可能造出來的」,於是只剩一個解釋 —— 一個新的 clone。 而它真正的來源是隔壁那個家族。 讀法是:一個參數描述不了兩種形狀不同的錯誤,寫漏的那一種會直接變成假的 subclone。 兩種錯誤的形狀不同:一種改一個字母,一種搬走一整條分子 逐位點定序錯誤 每個位點獨立,一次改一個字母 0 0 0 只有中間這個位點被讀錯 0 1 0 要生出一個差三個位點的狀態, 同時錯三次:ε³ 整條分子的家族誤標 三個位點一起過來 另一個單倍型家族 1 1 1 整條被標到這個連鎖區段 1 1 1 機率只有一個誤標率 η, 與位點數無關 差幾個位點,誰才是主角(以 ε = 0.005、η = 0.01、來源比例 0.3 為例) 差 1 個位點 逐位點 5×10⁻³ 誤標 3×10⁻³ 兩者相當 差 2 個位點 逐位點 2.5×10⁻⁵ 誤標 3×10⁻³ 誤標高約 100 倍 差 3 個位點 逐位點 1.3×10⁻⁷ 誤標 3×10⁻³ 誤標高約 20,000 倍 只寫逐位點錯誤會發生什麼 在全 0 的背景上冒出 111:模型認為錯誤造不出來(10⁻⁷), 於是只剩一個解釋 —— 一個新的 clone。而它真正的來源是隔壁那個家族。 讀法:一個參數描述不了兩種形狀不同的錯誤;寫漏的那一種會直接變成假的 subclone。
左右兩種錯誤的形狀不同:一種一次改一個字母,一種一次搬走整條分子。 位點差得越多,逐位點錯誤的機率掉得越快,而誤標完全不受位點數影響 —— 所以差三個位點時,能造出假狀態的幾乎只剩誤標這一條路。

兩種錯誤不是同一類參數:一個能先校準,一個不能

既然定序平台固定,錯誤率是不是就可以當成已知常數餵進來? 對一半,而這一半正好是比較不重要的那一半。兩個通道要分開處理:

通道定位理由
逐位點錯誤 ε 平台校準輸入+序列脈絡修正 基準值確實由平台與 basecaller 決定,可以事先校準一次。但它逐脈絡變動 —— 區、低複雜度序列與 mapping/參考偏誤都會把它抬高數倍, 所以進模型的是一張依脈絡分層的表,不是一個全域常數
家族誤標 ξv 必須就地、成對估計 它衡量的不是定序品質,是定相品質:取決於該區域的雜合位點密度、 phase block 長度與 read 跨距。同一台機器、同一個 basecaller, 在雜合位點稀疏的區域 ξ 可以差一個數量級。平台固定完全不決定它
平台固定住的是逐位點錯誤,不是家族誤標 圖比較同一台機器、同一個 basecaller 在兩個不同區域的行為。 上排是雜合位點密集的區域:定相有很多錨點,phase block 長, 分子被標到正確家族的把握高,所以家族誤標率低。 下排是雜合位點稀疏的區域:錨點少,phase block 短, 同一台機器下的家族誤標率可以高一個數量級。 兩排的逐位點錯誤率則幾乎一樣,因為它由平台與 basecaller 決定。 結論寫在下方:把逐位點錯誤當成校準過的已知量大致無害, 因為它隨差異位點數以指數下降; 但家族誤標與位點數無關,在多位點時它幾乎單獨決定錯誤地板, 而它衡量的是定相品質而不是定序品質,所以平台固定完全不決定它。 同一台機器,兩個區域,兩種行為 雜合位點密集的區域 錨點多 → phase block 長 → 家族標得準 ε 逐位點 基準值 由平台決定 ξ 家族誤標 錨點充足 雜合位點稀疏的區域 錨點少 → phase block 短 → 家族容易標錯 ε 逐位點 幾乎不變 機器沒換 ξ 家族誤標 高一個級距 錨點不足 ξ 衡量的是定相品質,不是定序品質 所以「平台固定所以錯誤率已知」對 ε 大致成立,對 ξ 完全不成立 —— 而多位點時錯誤地板幾乎由 ξ 單獨決定,因為 ε 隨差異位點數以指數掉下去。
同一台機器、同一個 basecaller, ε 幾乎不變而 ξ 可以差一個數量級 —— 因為 ξ 衡量的是定相品質(錨點夠不夠),不是定序品質。

這個區別有實際後果,而且方向明確:kv2 時錯誤地板幾乎完全由 ξv 決定,因為 εr 隨位點數急速掉下去而 ξv 不會。 所以「把錯誤率當成已知」若指的是 ε,大致無害; 若指的是 ξv,那正是第四節錯誤地板訂錯的主要途徑 —— 也就是把幾條誤標的分子讀成一個新 clone 的那條路。 ξv 尤其要成對估計,因為它同時連結一個視窗的兩條家族。

觀測要經過幾道閘門:每個位點一道,最後兩個家族之間再交換一次 兩條並排的通道分別是同一個連鎖視窗的兩個單倍型家族。 每條通道由左到右經過相同的幾個階段。 起點是真實的分子組成。 接著是每個位點各一道錯誤閘門,閘門會把參考型讀成變異型,也會把變異型讀成參考型, 兩個方向的機率不一樣,所以閘門不是對稱的。 k 個位點就串 k 道閘門,把它們串起來就是公式裡那個張量積。 最後一道是家族交換閘門:大部分的分子留在自己的通道, 但有一小部分會被標到另一條通道去,圖上用兩條交叉的虛線表示。 終點是實際觀測到的計數。 圖的下方指出這件事的後果:因為交換閘門把兩條通道接在一起, 兩個家族必須一起估。分開估會讓譜系內比例每個連鎖區段都往零點五偏一點, 而且幾萬個連鎖區段偏的方向相同,那不是把譜變寬,是把整條譜平移。 讀法是:公式裡的三個符號各對應圖上一道閘門。 觀測要經過幾道閘門 家族 H1 家族 H2 真實組成 真實組成 位點 1 閘門 ε₁ , η₁ 位點 1 閘門 ε₁ , η₁ 位點 2 閘門 ε₂ , η₂ 位點 2 閘門 ε₂ , η₂ 這兩道串起來就是公式裡的 T = E₁ ⊗ E₂ (k 個位點就串 k 道) 家族交換閘門 δ 1 − δ δ 觀測計數 觀測計數 ε 是「把 REF 讀成 ALT」,η 是「把 ALT 讀成 REF」—— 兩個方向機率不同,所以閘門不對稱。 兩者都可以用同一個連鎖視窗裡的 germline 雜合位點就地估出來,不必外部參數。 交換閘門把兩條通道接在一起,所以兩個家族必須一起估。分開估會讓 ϱ 每個連鎖區段 都往 0.5 偏一點,而且幾萬個連鎖區段偏的方向相同 —— 那不是把譜變寬,是把整條譜平移。
每個位點一道錯誤閘門;最末一道為家族交換閘門, 少部分分子被標至另一條通道。交換閘門連結兩條通道,故兩個家族必須一併估計 —— 這道閘門就是「一個視窗只出一個因子」的具體原因。

把兩條家族接回同一個因子

交換閘門的存在,表示一條被標成家族 u 的 read 不一定真的來自家族 u。所以真正用來算機率的觀測分布, 必須是「正確標記」與「由隔壁誤標進來」兩個來源的混合。 令 u1u2 為視窗 v 的兩條家族, αu'u 為「一條最後被標成 u 的 read,實際來自家族 u'」的權重:

qu,Mobs(y)=u'{u1,u2}αu'u·qu',M(y),u'αu'u=1

αuu 是正確標記的比例,另一項由 ξv 與兩條家族的分子數導出, 不是每條家族各自自由擬合的比例α 同時出現在兩條家族的式子裡 —— 這就是逐家族相乘不成立的地方。

HP1/HP2 的方向是 nuisance,而它屬於視窗

家族標號在每個 phase set 內獨立決定, 所以「這個視窗的家族一」對應到全域基因型的哪一條拷貝 b 並不確定。 處理方式是引入一個方向變數 σv{,調} 並把它邊際化。 σv 是每個連鎖視窗一個,不是每條家族一個 —— 同一個視窗的兩條家族互為補集,對調就是同時對調,共用同一個方向:

P(DvΘK)=σvP(DvΘK,σv)·P(σv)

σv 在這裡只被邊際化一次。若寫成逐家族各自邊際化, 等於把一個方向當成兩次獨立的擲硬幣,會把方向的不確定性算掉一半。

作用域補充:σ 如何跨 phase set 定義

若兩個 phase set 之間沒有共享的變異,也沒有其他錨點,而且相關 clone 的比例又相同, 則它們的對應關係真的不可辨識。此時正確的輸出是保留數個等價的對應, 而不是挑一個印出來。

三、預設是 multinomial:一條 read 是一個分子

上式寫了一個 τu,但它的預設值應該是無窮大,也就是退化成 multinomial。理由是 guardrail 第 7 條的直接後果:

beta-binomial 的 overdispersion 來自「分子池的真實比例偏離期望值」—— 那是一個兩段抽樣的結構:先從細胞抽出分子,再從分子抽出 read。 而 PCR-free 的長讀定序沒有第二段一條 read 就是一條分子, 不存在同一條分子被讀到兩次的情形。細胞數又以百萬計, 第一段抽樣的變異小到可以忽略。所以在一個連鎖區段內部, read 的計數本來就是 multinomial,額外的離散度沒有來源。

這給出一條明確的實作規則:先用 multinomial,只有在殘差真的顯示額外離散時才加 τu,而且要說得出它來自哪裡(連鎖視窗內部的 mapping 或覆蓋不均, 而非分子抽樣)。τu 若要估,也必須跨可比較的連鎖區段分層借力 —— 一張稀疏的計數表沒有能力同時定出 qu 與它自己的離散度。

與中篇的接點:同一個理由讓用途二的 φ 量測方式需要重做

用途二以「同一連鎖區段、同一條單倍型上數個變異之間的離散度」量測 φ。 但若這些變異位於同一批分子上,分子池的偏離是它們共有的, 在兩者相減時會消去 —— 剩下的只有各自的 read 抽樣與 base error。 這樣估出來的 φ^偏低,而偏低的 φ^ 正好把 K 往上推,方向與這條路線想要的結論相同 —— 這是一個要主動避開的偏誤。 φ 應改由相距夠遠、分子池獨立的同群變異估計。本頁末的未解問題有列這一項。

四、三種不同的「沒有」

這一節是整份規格裡最容易出事的一節:狀態表上一格是 0, 可能代表三件完全不同的事,而三者的觀測一模一樣。 分不開它們,錯誤造出來的少數幾條 read 就會被讀成一個新的 clone。

一格是空的,有三種完全不同的原因 三欄並列,三欄的觀測完全一樣:那一格的計數是零。但成因不同,處理方式也不同。 第一欄是抽樣零。那個狀態真的存在,只是跨越這幾個位點的分子太少,沒抽到。 判準是機率:沒抽到的機率等於一減去它的比例,再取跨越深度次方。 跨越深度三、比例三成時,這個機率大約是三分之一, 所以「沒看到」幾乎沒有排除任何東西。跨越深度五十九時才降到百分之五。 處理方式是讓似然自己算,不需要任何門檻。 第二欄是結構零。沒有任何 clone 帶有那個基因型,所以它的真實比例就是零。 這是我們真正想推論的結論,不是輸入。 第三欄是錯誤地板。那個基因型確實不存在,但定序錯誤與家族誤標仍然會產生看起來像它的 read。 所以觀測到的比例永遠不會真的是零,而是壓在一個地板上。 中間橫跨一條警告:Dirichlet 的參數不允許是零, 所以結構零必須經過錯誤通道抬到地板之上,模型才寫得下去。 最下方是三者的處理方式對照。 讀法是:把這三種零混為一談,就會把錯誤產生的少數幾條 read 讀成一個新的 clone。 同樣是「這一格沒有 read」,成因有三種 ① 抽樣零 狀態存在,只是沒抽到 P(看不到) = (1 − q)ⁿ n = 3、q = 0.30 → 0.34 三分之一的機率誤判成「不存在」 n = 59 才降到 0.05 處理:讓似然自己算 ② 結構零 沒有任何 clone 帶這個基因型 q = 0 這是要推論出來的結論 不是輸入,也不是門檻判出來的 硬性排除等於把結論當成前提 處理:讓資料把 q 壓下去 ③ 錯誤地板 基因型不存在,但錯誤會造出它 q觀測 = (1−ε)·q + ε·r 觀測比例有一個下界 逐位點錯誤 + 家族誤標都在這裡 地板高度決定得出來的解析度下限 處理:寫進觀測通道 為什麼 ② 與 ③ 一定要分開寫:Dirichlet 的參數不可以是零 結構零給出 q = 0,但 Dirichlet 分量必須為正。所以結構零一定要 先經過 ③ 的通道抬到地板之上,式子才寫得下去 —— 這不是技術細節, 它就是「零不代表不可能」的數學形式。 三者的觀測一模一樣,都是「這一格計數為 0」 分得開它們的不是那個 0,是跨越深度、其他連鎖區段的證據,以及就地估到的錯誤率。 混為一談的後果:錯誤造出來的少數幾條 read,會被讀成一個新的 clone。 讀法:門檻只能把三種零一起丟掉;似然可以分別給它們不同的重量。
三欄的觀測一模一樣,都是「這一格計數為 0」。 分得開它們的不是那個 0,而是跨越深度、其他連鎖區段的證據,與就地估到的錯誤率。 中間那條警告是這一節的關鍵:Dirichlet 的參數不可以是零。

第二種與第三種必須分開寫,還有一個純技術但無法迴避的理由: Dirichlet 的參數不可以是零。結構零給出 qh=0, 而 τqh=0 不是一個合法的 Dirichlet 分量。 所以結構零一定要先經過錯誤通道抬到地板之上:

qu,hobs=(1δv)·qu,h+δv·ru,h

δv地板的總量:一條 read 有多少機率來自任何一種錯誤來源。 它εξv 算出來,不是第三個自由參數kv2 時幾乎完全由家族誤標 ξv 撐起來,這也是它掛在視窗層的原因。 ru,h 是地板的形狀(錯誤會把機率灑到哪幾格),逐家族不同, 因為它取決於隔壁那條家族長什麼樣。

這不是為了數值穩定而加的小常數。 它就是「零不代表不可能」這句話的數學形式 —— δvru,h 的大小正是這個連鎖區段能分辨的最小比例, 也就是第十一節那個偵測下界的來源。若 ru,h 由第二節的兩個錯誤通道算出來, 這個地板是可以就地估計的量,不需要另設參數。

這一節的取捨在整份規格裡最容易被低估,所以本頁末的「預測與結果檢視」 用一整個問答把它再走一次:門檻確實不需要了,但錯誤地板變得比以前更重要

潛在節點的三種身分

樹成本等於潛在節點數,所以最小成本就是「補最少的看不到狀態」 左上是成本的算式。樹的成本等於邊數,邊數等於節點數減一, 而節點數等於固定節點數加上潛在節點數, 固定節點是參考型的根加上實際觀測到的狀態,潛在節點是為了把樹接起來而補進去的狀態。 所以最小成本等價於最少潛在節點。 右邊是一個例子:觀測到的只有全參考的根與兩個變異都帶的狀態,中間什麼都沒看到。 因為一步只能加一個突變,中間必須補一個狀態,補哪一個資料沒有意見, 於是得到兩個並列的最小成本候選,兩者成本都是二。 正確的做法是兩個都留著,而不是挑一個。 最下方指出潛在節點數本身就是一個值得統計的量: 它數的是「這棵樹需要、但沒有任何觀測支持」的狀態, 把全基因體的分布畫出來,就是這份重建有多少比例來自推論的直接量度。 讀法是:潛在節點不是一群還沒被觀察到的細胞,它是模型為了連通而記的帳。 最小成本 = 補最少的「看不到的狀態」 cost(T) = |E| = |V| − 1 = C + |H| − 1 C = 根 + 觀測到的狀態  H = 補進去的潛在節點 C 固定時,最小成本就等價於最少潛在節點。 例:只觀測到 00 與 11 00 11 中間一定要經過一個狀態,但補哪一個資料沒有意見 補 10 |H| = 1 cost 2 補 01 |H| = 1 cost 2 兩個都留著 潛在節點數本身就是一個值得統計的量 它數的是「這棵樹需要、但沒有任何觀測支持」的狀態。 把全基因體的分布畫出來,就是這份重建有多少比例來自推論的直接量度 —— 而且求解器本來就算出來了,它就是成本。 但要記住它的意思:潛在節點不是一群還沒被觀察到的細胞。 它可能對應真的中間世代,也可能只是模型為了連通而記的帳。
樹的成本等於固定節點數加潛在節點數減一, 故最小成本等價於潛在節點數最少。潛在節點為該樹所需、但無任何觀測支持的狀態。

觀測到 000010111011110 皆空時, 最小成本解會補進一個中間狀態。這個節點的身分必須標清楚,因為它有三種可能, 而三者的意義完全不同:

身分意義可以拿來做什麼
現存的 clonew>0,只是沒抽到可以,但要標明是抽樣零
歷史狀態w=0,曾經存在但已被後代取代可以進樹,不可計入細胞比例
記帳節點只因「一條邊只能加一個突變」這個表示法而存在不可當成任何生物學實體
解讀邊界:記帳節點不等於 subclone

局部超立方體用的是「一步一個突變」的簡約假設, 但全域的 z多個突變指派到同一個 clone —— 在全域這一層, 010111 完全可以是一條邊,中間不需要任何節點。 所以那個補進來的節點是局部表示法的產物,不是「還沒找到的 subclone」。 這正是 那條警告的具體形式:潛在節點數 |H| 仍然是個有用的統計量 (它量的是這份重建有多少比例來自推論),但它是記帳,不是證據。

五、分類是輸出,不是輸入

現行流程會把每個連鎖區段標成分岔、串接或不相容。 這些標籤在新寫法下照樣產生,但不再是餵進模型的證據 —— 它們只是狀態表本身的形狀。這一節說明為什麼,以及因此有三個問題直接消失。

k=2 的連鎖區段只會落入三類:串接、分岔、不相容 一個只有兩個位點的連鎖區段,它的分子只可能有四種狀態: 兩個都不帶、只帶第一個、只帶第二個、兩個都帶。 三欄各是一種情形,每一欄把這四種狀態各自的分子數列出來。 三欄的邊際刻意做成完全相同:總數都是八十條,位點 A 的變異分子都是三十九條, 位點 B 的都是十七條 —— 這是整張圖的重點,因為它表示光看每個位點各自的頻率 分不出這三種情形,要看四種狀態怎麼分配。 左欄是串接:沒有任何分子只帶 B,所以帶 B 的分子全部也帶 A, B 只可能長在 A 的後代裡。 中欄是分岔:沒有任何分子兩個都帶,所以 A 與 B 落在互不包含的兩支上。 右欄是不相容:四種狀態都有分子。在「每個變異只發生一次」的前提下這不可能, 所以它不是發現了一支新的 lineage,而是四配子檢定失敗 —— 代表這個連鎖區段的錯誤地板偏高或家族誤標偏多,是一個品質訊號。 讀法是:分類要用似然比檢定,不要對原始計數設門檻, 因為在偵測極限附近,兩種假設只差幾條分子。 同一組邊際,三種分子狀態分配 每一列是一種分子狀態:實心=帶變異、空心=參考型。三欄的邊際完全相同(見最下一列)。 串接 chain A → B 00 41 10 22 01 0 11 17 沒有分子「只帶 B」 → B 長在 A 的後代裡 分岔 fork A / B 00 24 10 39 01 17 11 0 沒有分子「兩個都帶」 → A、B 互不包含 不相容 incompatible 四種都有 00 33 10 30 01 8 11 9 四配子檢定失敗,非新 lineage N 80 · A 的變異 39 · B 的 17 N 80 · A 的變異 39 · B 的 17 N 80 · A 的變異 39 · B 的 17 右欄的出現率可以反過來估計單倍型分型的錯誤率 —— 模型因此自帶一個校正用的觀測量。 分類要用似然比檢定,不是對原始計數設門檻:在偵測極限附近,兩種假設只差幾條分子。
一個 kv=2 的連鎖區段,其分子只有四種狀態。 三欄的總數與兩個位點各自的變異分子數完全相同(最下一列), 所以僅憑邊際無法區分三者。左欄沒有「只帶 B」的分子為串接, 中欄沒有「兩個都帶」的分子為分岔,右欄四種都有為不相容。 在本頁的模型下,這三種形狀不再是餵進去的約束,而是狀態表本身的形狀。

現行流程對每個連鎖區段所做的分類(分岔/串接/不相容)在新的寫法下照樣產生, 但它們的地位變了:它們是 qu 的形狀,不是額外的證據

現行輸出在生成模型裡對應什麼地位
分岔(無分子同時帶有兩者)沒有任何 clone 的局部基因型同時帶兩個突變,故該格只剩錯誤地板輸出
串接,比值 1兩個 clone 的 η 相近輸出
串接,比值 <1η 有序,且巢狀輸出
不相容(四格皆非空)錯誤通道的 εξv 偏高品質訊號

由此得到一條必須寫進實作的規則: 凡其原始狀態表已經進入似然的連鎖區段,不得再為它加一條約束項。 分岔摘要仍可以印出來給人看、畫成圖、當作 QC,但那是衍生輸出, 不是另一份獨立證據。這條規則就是第一節那個「兩個因子相乘」在實作層的說法。

三個原本需要特別處理的問題,也在這裡一併消失:

原本的問題在新寫法下
約束的信心值 ωr 要怎麼校準不需要 —— 證據強弱就是似然本身
「必定同群」會降低可辨識性,權重該給多低不需要 —— 它只是 η 相近,沒有被當成等式
假的硬約束會逼出不存在的群不會 —— 沒有任何一格的機率是 0,錯誤地板保證了這件事

六、數百個連鎖區段的局部形狀不同 —— 這是預期,不是矛盾

通過品質檢查的連鎖區段有數百個,而它們的局部拓撲形狀各不相同: 有的是一條線,有的是分岔,有的只有一個節點。此現象本身不構成衝突。

三份證據如何把相容的候選樹砍到只剩一棵:頻率譜給一棵部分決定的樹,兩個連鎖區段各給一個局部拓撲 本圖延續前一個數值例,純度零點六、二倍體,A、B、C 的細胞比例是一點零零、 零點四零、零點四零,另加第四群 D,細胞比例零點二零,是 B 的後代。 上排是三份證據各自說了什麼。 第一份是 VAF 頻率譜。換算後只得到三群:一點零零、零點四零、零點二零, 其中零點四零那一群可能是兩群被併起來的。 依 pigeonhole 檢查,這三群能排出的樹有兩棵,圖上並排畫出: 一棵是 A 到 X 再到 D 的線性樹,一棵是 A 同時接到 X 與 D 的分支樹,兩棵都合法。 取兩棵的共同部分,就是頻率譜真正確定的東西:A 是根,X 在 A 之下。 未定的有兩件:D 掛在 A 之下還是掛在 X 之下,以及 X 是一群還是兩群。 所以頻率譜給的是一棵部分決定的樹,不是一棵完整的樹。 第二份是連鎖區段甲。它含有兩個變異 i 與 j,觀測到沒有分子同時帶有兩者, 所以兩者分屬兩群 P 與 Q,而且兩群互不包含。 這同時做了兩件事:把群數由三修正為四,並指出 P 與 Q 誰都不是誰的祖先。 第三份是連鎖區段乙。它含有兩個變異 p 與 q,觀測到帶 q 的分子全部也帶 p, 所以 q 所在的群巢狀於 p 所在的群之內,另附零點五零的比值。 中排說明目標函數的兩項各自負責什麼、又各自不負責什麼。 左邊是 beta 二項混合這一項,圖上畫的是三根峰各自的成分曲線: 中心由細胞比例決定,寬度是用途二量出來的常數,高度是該群所佔的變異比例。 這一項回答的是某個變異的讀數比較像哪一根峰, 它對峰與峰之間誰在誰之下完全沒有意見。 右邊是約束這一項,它把甲寫成兩個變異不可同群,把乙寫成樹上的一條有向邊。 這一項回答的是哪些變異不能同群、以及誰在誰之下, 它對峰落在哪裡完全沒有意見。 兩項回答的問題不重疊,這正是合起來能補齊、而任一邊單獨補不齊的原因。 下排是候選樹的數量如何被砍下來。只用頻率譜時群數估成三,候選兩棵, 而且群數本身是錯的。加入甲之後群數修正為四;在四群的狀態空間裡 若沒有任何關係約束,候選會有七棵,甲的互不包含把它砍成三棵。 再加入乙的巢狀關係,候選只剩一棵,也就是最右邊那棵樹。 最後標注:樹的形狀是唯一的,但那兩群頻率相同, 所以它們的標號可以整組對調,編號本來就是任意的。 三份證據,各補上樹的一部分 延續前例:ρ = 0.60、二倍體、μ = 1;A = 1.00、B = C = 0.40,另加 D = 0.20(B 的後代)。 ① 頻率譜給的:部分的樹 換算後得到三群: c = 1.00 / 0.40 / 0.20 (0.40 那一群可能是兩群併起來的) pigeonhole 檢查後,兩棵都合法 A X D 線性 A X D 分支 ✓ 已定:A 是根、X 在 A 之下 ✗ 未定:D 掛在 A 還是 X 之下 ✗ 未定:X 是一群,還是兩群 ② 連鎖區段甲給的:分岔 兩個變異 i、j 落在同一個連鎖區段 帶 i 不帶 j 帶 j 不帶 i 沒有任何分子同時帶有兩者 局部拓撲: 互不包含 P Q 它同時做了兩件事: ① 把 0.40 那一群拆開 → 群數 3 修正為 4 ② 指出 P 與 Q 誰都不是誰的祖先 ③ 連鎖區段乙給的:一條線 兩個變異 p、q 落在同一個連鎖區段 只帶 p p、q 都帶 帶 q 的分子全部也帶 p 局部拓撲: P D D 巢狀在 0.40 的其中一群之內 另附比值 ϱ = 0.50(不需純度) 目標函數的兩項,各自只回答一半的問題 第一項|beta-binomial 混合 0.06 0.12 0.30 某個變異 a/d = 6/50 中心 = ρ·c/2 寬度 = 用途二量到的 高度 = 該群的變異占比 回答:這個變異的讀數比較像哪一根峰。 峰之間誰在誰之下,它沒有意見 第二項|約束 甲 → 不可同群 i j 乙 → 一條有向邊 P D 回答:哪些不能同群、誰在誰之下。 峰落在哪裡,它沒有意見 兩項回答的問題不重疊 —— 這正是合起來補得齊、任一邊單獨補不齊的原因。 合起來:相容的候選樹被砍到只剩一棵 只用頻率譜 2 棵 而且 K = 3 是錯的 +甲 K 修正為 4,P ⊥ Q 3 棵 (不加約束會是 7 棵) +乙 再加巢狀關係 1 棵 唯一解 A P Q D 形狀唯一; P、Q 標號 可整組對調
延續中篇第三節那個例子(ρ、A、B、C 都不變),只加上第四群 D 與兩個連鎖區段。 上排是三份證據各自說了什麼 —— 注意頻率譜給的是一棵部分決定的樹,不是一棵完整的樹。 中排說明目標函數的兩項各自回答什麼、又各自不回答什麼。 下排是三者合起來時,相容的候選樹如何被砍到只剩一棵。

成因是每個連鎖區段只裝得下落在該連鎖視窗內的那幾個變異。 上圖的連鎖區段甲裝到的是 B 群與 C 群的變異,兩群互不包含,故其局部形狀是分岔; 連鎖區段乙裝到的是 B 群與 D 群的變異,後者巢狀於前者,故其局部形狀是一條線。 兩者皆為同一棵全域 clone tree 在不同變異子集上的投影 —— 形狀相異是因為子集相異,而非證據衝突。

合起來為什麼更準、解析度更高

關鍵在於認清頻率譜的輸出並不是一棵樹,而是一棵部分決定的樹。 本例中它換算出三群(1.00/0.40/0.20),而這三群在 之下 有兩棵樹同時通過:線性的 A → X → D,與分支的 A → {X,D}。 取兩棵的交集,才是頻率譜真正確定下來的東西:

頻率譜確定的頻率譜未定的
A 是根D 掛在 A 之下,還是掛在 X 之下
X 在 A 之下X 是一群,還是兩群被併起來的

兩個連鎖區段補的正是右欄那兩格,而且各補一格: 甲的狀態表在「兩個突變同時出現」那一格只有錯誤地板的量,乙則相反。 候選數因此逐步收斂 —— 這就是「合起來更好」的具體內容:

手上的證據相容的候選樹備註
只有頻率譜2而且 K=3 本身是錯的(少計一群)
+ 甲3K 先被修正為 4;在 4 群下若無局部觀測會有 7 棵,甲砍到 3 棵
+ 甲 + 乙1唯一解,即真實的樹

三項改變的性質並不相同,值得分開看:

改變來源性質
K 由 3 增為 4 甲那一格的空缺把 0.12 那根峰拆開 解析度提升:多還原一個 subclone,而這是頻率單獨永遠達不到的 —— 兩群的 θ 本就相等
樹由兩棵並列變為唯一解 乙的巢狀狀態表把 D 釘在 B 之下 準確度提升:原本那一棵由簡約性挑選,現在由資料決定
群間距不需純度即可定出 乙的兩格相除,共同分母消去 ρ 退化為整體縮放(中篇第五節)

第二項尤其值得看清楚:「D 掛在 B 之下還是 C 之下」在頻率上永遠沒有答案。 B 與 C 的期望 VAF 完全相同,所以兩種掛法產生一模一樣的直方圖 —— 這不是精度問題,是中篇第三節那個不可辨識性換一個位置再出現一次。 連鎖區段乙的共現觀測是唯一回答得了的證據。

而三項改變都不需要先把兩個連鎖區段對齊: 兩個連鎖區段各自算出自己那張表的機率,而兩張表都由同一組 (w,T,z) 產生,相乘即完成合併。 形狀不同從頭到尾都不是需要處理的問題,而合併也不需要任何對齊步驟。

精確度的保留:「唯一解」是指樹的形狀唯一

拆出來的兩群頻率相同,所以它們的標號可以整組對調而不影響任何機率 —— 編號本就是任意的,這與手動 phasing 練習裡 HP1/HP2 對調也算正確是同一回事。

由此導出一條實作規則,與第九節那條互為表裡: 可以合併的是機率,不是標籤。 局部標籤(HP1-1)僅在該連鎖視窗內有定義,跨連鎖視窗的同名標籤並非同一條, 故不得將局部拓撲拼接成一棵大樹。所要合併者是它們對 (w,T,z) 的支持度 —— 而這組參數本就只有一份。

真正的矛盾長什麼樣

真正的矛盾並非形狀相異,而是整組連鎖區段找不到任何一組 (w,T,z) 能同時給出夠高的機率。 在似然寫法下它不再讓求解器卡住 —— 因為沒有任何一格的機率是 0, 求解器會取總機率最大的那組參數,少數異常的連鎖區段被多數蓋過。 但它仍然是必須報告的診斷量:擬合後各連鎖區段的狀態表與模型預測的差距, 估計的是整條產線的錯誤率。

惟此處有一個陷阱:殘差小不代表模型正確。 系統性偏誤(例如第八節的排序偏誤)會使錯誤彼此一致 —— 它們朝同一方向偏,因而完全不互相矛盾,卻一併使結論偏移。 殘差只偵測得到隨機錯誤。

診斷細節:舊的硬約束寫法下,矛盾會表現成哪三種無解形式
形式成因
直接對立一個連鎖區段的表說兩者不共存,另一個說共存其中一個是抽樣零或錯誤地板被讀成結構零
違反傳遞性三個連鎖區段兩兩相容,合起來卻無解同上,惟須三個連鎖區段方能顯現
祖先關係成環zazbzcza任何樹皆不可能,通常是第八節的排序偏誤將分岔判為串接

三種形式在似然寫法下都不再讓求解器停住, 此即第四節堅持要有錯誤地板的理由 —— 那個地板同時是「零不代表不可能」與 「矛盾不會炸掉求解器」這兩件事的來源。

殘差這個診斷量的邏輯,與以「不相容連鎖區段」估計單倍型標記錯誤率相同, 僅是提升至全域這一層。報告應予載明。

七、推論怎麼跑:外層定結構,內層估比例

到這裡為止,寫下來的都是「什麼是好的解」。這一節講「怎麼找到它」。 先講結論,因為它跟多數人的預期不同:真正難的是離散的那一半, 而連續的那一半小到不需要什麼特別的工具。

外層列舉離散結構,內層只是一個小的 simplex 最佳化 圖由左至右分成三段。最外層是群數 K 的迴圈,從 1 跑到 K_max, 這一層是真的迴圈,而且必須跑完再比較 Score, 因為資料配適度對 K 幾乎單調遞增,中途看到上升就停會停不下來。 中間一層是離散結構的搜尋:固定 K 之後,clone tree、突變指派與逐拷貝基因型 仍有大量組合,數量隨 K 迅速上升,不可能全部列舉, 所以要靠候選剪枝、啟發式搜尋或取樣,而局部連鎖視窗算出來的候選集合 正是在這裡先把不相容的全域結構排除掉。 最內層是連續參數的最佳化:結構固定之後只剩細胞比例 w, 自由度只有 K 個,定義域是一個 simplex, 直接用受限最佳化即可,不需要 EM 或 MCMC。 下方標出成本的分布:幾乎全部落在中間那層,內層是幾毫秒的事。 右側標出兩個必須誠實記住的保留:內層不保證凹,需要多起點; 以及 EM 與 MCMC 各自真正該出場的時機。 難的是離散那一半,連續那一半小到可以直接解 外層迴圈 K = 1 … K_max 真的是一個 for 迴圈;必須跑完再比 Score,不可中途停 結構搜尋(離散) 固定 K 之後,仍要決定: T clone tree 的形狀 z 每個突變掛到哪一群 G 每個位點的逐拷貝基因型 組合數隨 K 迅速上升 —— 不可能窮舉,要靠剪枝與啟發式搜尋 內層:連續最佳化 只剩細胞比例 w,K 個自由度,w_g ≥ 0 且總和為 1 受限最佳化直接解 —— 幾毫秒,不需要 EM 或 MCMC 成本落在哪裡 中層 幾乎全部 內層 幾毫秒 所以要少列舉,不是把內層解得更快 內層不保證凹 q 對 w 是比值函數, 狀態機率又是加權和。 必須多起點,並記錄是否收斂到同一點 EM/MCMC 何時才需要 EM  把突變指派 z 邊際化時 MCMC 要的是後驗區間而非點估計 兩者都不是為了那 K 個比例 外層定結構,內層估比例 看到 likelihood 就想用 EM 或 MCMC,在這個內層問題上是殺雞用牛刀
外層列舉離散結構(K、樹、指派、基因型), 內層在結構固定後只剩一個 simplex 上的最佳化。 成本幾乎全在外層 —— 內層那個小圈圈是可以直接解的, 所以優化的重點是少列舉幾個候選,不是把內層解得更快。

兩層的分工

要定的東西性質用什麼方法
外層群數 K、clone tree T、突變指派 z、逐拷貝基因型 G離散、組合爆炸候選列舉+剪枝、啟發式搜尋;不可能窮舉
內層細胞比例 w連續,K 個自由度,定義域是一個 simplexconstrained optimization,直接解

內層:K 個自由度,直接解就好

結構一旦固定,ck(w,T,z) 決定、μmG 決定、 θq 都是 w 的函數,錯誤參數已經校準或就地估好。 剩下的自由參數只有 w 本身 —— 依第一節的清點,那是 K 個自由度 (K=5 時是 5 個)。問題因此化簡成:

maxwlogP(DΘK)s.t.wg0,g=0Kwg=1

這就是一個 constrained maximum-likelihood 問題: 在「每項非負、總和為一」這個定義域(一個 simplex)上找最大值。 「直接解」不是說有閉式解 —— 一般沒有 —— 而是說把目標函數與這兩條限制交給數值最佳化器即可

這裡不需要 EM,也不需要 MCMC。這一點值得說清楚, 因為看到 likelihood 就想到 EM/MCMC 是很自然的反射,但在這個內層問題上兩者都是殺雞用牛刀: 五個參數的凸定義域最佳化,數值最佳化器幾毫秒就收斂。

方法補充:用哪一種最佳化器,以及什麼時候真的需要 EM 或 MCMC

常見做法是投影梯度法、序列二次規劃,或用 wgexg 這類重參數化把限制吸收掉之後改用一般的無限制最佳化器。

方法什麼時候需要
EM選擇把突變指派 z 邊際化而不是當成待估狀態時(第一節提過的第二種推論方式)。此時 z 是潛在變數,E 步算每個突變屬於各群的責任度,M 步更新 w
MCMC要的不只是點估計,而是 wTK後驗區間;或外層的結構搜尋本身就以取樣進行
兩者皆非結構已固定、只要 w^ 的點估計 —— 直接做 constrained optimization

但有一個必須誠實標註的保留:這個內層問題不保證是凹的。 定義域確實是凸的,可是 qu,hw比值函數 (第二節那條 η 的分母也含 w),而且狀態表的機率是多個狀態的加權和 —— 兩者都會破壞對數似然的凹性。實務上必須多起點並記錄各起點是否收斂到同一點; 只跑一個起點就宣稱找到最大值,是這一步最容易犯的錯。

外層:不可能窮舉,所以重點是怎麼不列舉

外層才是成本所在。固定 K 之後,樹的形狀、 每個突變掛到哪一群、每個位點的拷貝基因型,全都是離散選擇,數量隨 K 迅速上升 —— 光是有根有標號的樹就已經多到不可能一棵一棵試。所以概念上的骨架雖然是:

for K = 1 ... Kmax:
    列舉/搜尋這個 K 下的離散結構候選
    for each 候選:
        固定結構 → 在 simplex 上最大化 log-likelihood   ← 內層,直接解
        記下這個候選的最佳 log-likelihood
    取這個 K 的最佳值
比較各 K 的 Score(K, Θ̂_K),取最大者為 K̂

但中間那個「列舉/搜尋」不是一個真的 for 迴圈。 可用的做法包括啟發式搜尋、分支定界、以取樣取代列舉,以及最重要的一項: 用局部證據先把候選砍掉。第八節那個候選集合正是為此而存在 —— 每個連鎖視窗算出來的局部候選整組帶進外層, 不相容的全域結構因而在列舉之前就被排除, 這比列舉完再逐一評分便宜得多。

兩件事要連著記住:其一,K 的那層迴圈是真的迴圈, 而且必須跑完再比 Score,不能中途看 Ldata 上升就停 —— LdataK 幾乎單調遞增,會停不下來。 其二,這一整節是本規格中唯一沒有閉式成本估計的部分, 也是第十二節把它排在最後幾階段的理由。

八、現行實作要改的兩處

前面七節寫的是規格。落到現有的程式碼上, 真正要動的只有兩個地方,而且兩處都是「把資訊留下來」而不是「加一道閘門」: 其一,覆蓋遮罩不要併掉其二,候選排序的分數換成似然。 超立方體列舉、分類輸出、前處理全部沿用。

其一:覆蓋遮罩要留下來,而不是併掉

一個真實連鎖視窗的 read 覆蓋:八成的分子只看得到一個位點 上半是一個真實分析單位裡 read 覆蓋情況的統計。 這個連鎖區段有三個 somatic 位點、一百九十四條 read,連鎖視窗寬三十九點四 kb。 三條長條由上而下分別是:同時蓋到三個位點的 read 只有三條,佔百分之一點五; 蓋到兩個位點的三十一條,佔百分之十六;只蓋到一個位點的一百六十條,佔百分之八十二點五。 下半把同一批 read 按位點對拆開,看每一對到底有幾條 read 同時蓋到。 第一對與第二對各有十七條與二十條,分別判出分岔與串接; 第三對只有三條,而且三條都是參考型,什麼也判不出來。 最下方是這張圖的結論:這個連鎖區段的演化樹靠的是十七與二十這兩個數字,不是一百九十四; 而第三對實質上缺乏資料,仍被演算法判定了關係。 讀法是:有效樣本數是「每一個位點對各自的跨越深度」,不是這個連鎖區段的總 read 數。 真實資料的覆蓋結構 HCC1395_HKU · chr12:981,725–1,021,146 · HP1 · k=3 · 194 reads · 連鎖視窗 39.4 kb 一條 read 蓋得到幾個位點 蓋到 3 個 3 條 1.5% 蓋到 2 個 31 條 16.0% 只蓋到 1 個 160 條 82.5% 八成的分子只看得到一個位點 —— 它對「兩個位點的共現」完全沒有意見。 把同一批 read 按位點對拆開 A × C n = 3 三條都是參考型 什麼也判不出來 A × B n = 17 RA 12 · AR 5 · 沒有 AA 判為分岔 B × C n = 20 AA 6 · AR 9 · RR 5 判為串接 這個連鎖區段的樹靠的是 17 與 20,不是 194。而 A × C 那一對沒有資料 卻一樣被演算法決定了關係 —— 「沒看到」被當成了「不存在」。
約八成的 read 僅覆蓋三個位點中的一個。 將同一批 read 依位點對拆分後可見:此連鎖區段的判定依據為 17 與 20 兩個數字,而非 194; 其中一對僅有 3 條 read,仍產出了一條關係判定。

一個連鎖區段的有效樣本數並非其總 read 數, 而是各位點組合分別有幾條 read 同時覆蓋。 上圖連鎖區段的三個位點對,跨越深度分別為 20、17 與 3

舊的做法是設一道門檻把跨越深度不足的丟掉 —— 因為在硬約束的寫法下,一條由 n=3 產生的假「不可同群」代價極高。 在似然的寫法下這道門檻不需要了n=3 的觀測自然只貢獻很小的證據量, (1q)30.34 這個數字就是似然自己會算的東西。

兩種「沒看到」:真的沒有那種細胞,與沒有 read 跨得到 左邊是跨越深度隨距離衰減的曲線。 兩個位點靠得愈近,同時蓋到它們的 read 就愈多;距離接近讀長時,跨越深度掉到接近零。 圖上標出真實例子的三個位點對,跨越深度分別是二十、十七與三。 右邊說明問題所在:演算法看到某個狀態沒有出現,有兩種完全不同的原因。 第一種是真的沒有細胞帶著那個組合,那是生物學結論。 第二種是無 read 同時覆蓋該二位點,屬於未觀測。 目前的做法把兩者當成同一件事,於是把看不到當成不存在。 最下方是修正方式:每一個位點對先用自己的跨越深度算檢定力, 檢定力不足的對標成未定,不允許它去約束樹的形狀,並且在報告裡列出來。 讀法是:缺席要有足夠的觀測撐著,才能當成證據。 兩種「沒看到」 跨越深度隨距離掉得很快 兩個位點的距離 → 跨越深度 n=20 n=17 n=3 檢定力門檻 同樣是「這個狀態沒出現」 ① 真的沒有細胞帶著那個組合 這是生物學結論,可以拿來決定樹的形狀。 ② 無 read 同時覆蓋該二位點 這只是看不到,不能拿來決定任何事。 目前的做法把兩者當成同一件事 修正:每一對先過檢定力這一關 用該位點對自己的跨越深度算檢定力;不足的標成「未定」, 不允許它的「缺席」去約束樹,並且在報告裡逐條列出來。 預期效果:目前被歸進「單層無分支」的連鎖區段,會有一部分正確地移到「未解析」。
「此狀態未出現」有兩種成因:該類細胞確實不存在, 或無 read 跨越該對位點。舊做法將兩者等同處理;似然寫法讓第二種成因 自動只貢獻很少的證據,不需要門檻就分得開。

所以這一步的改動不是加一道閘門,而是把遮罩存下來: 狀態表要記成 (,phaseset,,,,) 的稀疏列, 而不是先把部分覆蓋的 read 併進某個完整狀態。 門檻退居為報告量:收得幾條、各遮罩各有幾條、哪些連鎖區段的證據其實很薄。

實作草稿:稀疏列怎麼產生,以及該報告哪三個數字
for each unit u:
    for each read r spanning ≥1 site in u:
        emit (u, phase_set, sites(u), mask(r), pattern(r), 1)
    aggregate → sparse rows
report: 每個遮罩的 read 數、連鎖區段的最大跨越深度、
        以及「若某狀態真佔 5%,這個連鎖區段看得到它的機率」

可跨越範圍受限的成因,來自以下三層結構:

三層資訊:全基因體只有邊際、phase block 知道 cis/trans、read 跨距內才數得到共現 三層由下而上代表資訊愈來愈完整,但涵蓋範圍愈來愈小。 最下層是全基因體,任何兩個位點之間都只有各自的邊際頻率,沒有共現關係。 中間層是 phase block,典型長度一到五個 Mb,在這個範圍內兩個位點是在同一條染色體 還是分開在兩條,是已知的,即使沒有任何一條 read 同時蓋到它們。 最上層是 read 跨距,典型二十個 kb,只有在這個範圍內才數得出「同時帶有兩個變異的分子有幾條」。 右側標出每一層在一個典型樣本裡各有多少筆可用觀測: read 跨距內的聯合計數約數百到數萬筆,phase block 內的 cis/trans 判定約多一百倍, 全基因體邊際則涵蓋全部變異。 讀法是:read 長度限制的是「數得到共現」,phase block 限制的是「知道在不在同一條染色體上」, 這兩件事的範圍差了兩個數量級,常被混為一談。 三層資訊:範圍愈小,資訊愈完整 ③ 全基因體 只有邊際頻率(VAF、β)—— 傳統路線整個住在這一層 全部變異 數百萬筆 ② phase block(1–5 Mb) cis/trans 已知,但數不到共現分子數 cis/trans 判定 約 7 萬筆 ① read 跨距(20 kb) 聯合計數看得到 聯合計數 數百到數萬筆 資訊最完整 涵蓋最廣 最常見的誤解:把 ① 與 ② 當成同一件事。read 長度限制的是「數得到共現」, phase block 限制的是「知不知道在同一條染色體上」—— 兩者範圍差約一百倍。
read 跨距限制的是能否計數共現, 限制的是能否確定兩個位點是否位於同一條染色體。 局部狀態表僅能自最上層產生,而該層亦為三者中範圍最小者。

其二:候選排序的分數要換成似然

最小成本候選常不只一個,現行流程以 的差值總和排序; 問題在於相加的項數由拓撲形狀決定

read-AF 差值總和有形狀偏誤:星狀永遠得零分,串接永遠贏 目前排序候選樹的分數,是把樹上每一組「祖先與後代」的 read-AF 相減再全部加起來。 問題在於相加的項數本身由樹的形狀決定。 圖上三個形狀由左到右:三個突變串成一條線、一條線加一個分支、三個都從根長出來的星狀。 它們的祖先後代配對數分別是三、一、零。 因此串接的分數是第一個減第三個的兩倍,中間的形狀只有一項, 而星狀因為沒有任何祖先後代配對,分數恆等於零。 結論寫在下方:只要 read-AF 不完全相等,串接的分數就是正的, 而星狀永遠是零,所以當最小成本候選裡同時有這兩種形狀時,分支永遠贏不了。 觀測到的最多的類別正好是多層無分支,佔三成八到五成三, 這個偏誤剛好往那個方向推。 最下方是替代方案:改用機率模型比較各個形狀解釋同一組 read-AF 的能力, 而不是加總差值。 讀法是:分數要能跨形狀比較,才不會讓形狀自己決定勝負。 分數的形狀偏誤 分數=把樹上每一組「祖先→後代」的 read-AF 相減,全部加起來。項數由形狀決定。 串接 祖先後代配對:3 組 2(a₁ − a₃) 一線加一分支 祖先後代配對:1 組 a₁ − a₂ 星狀(全分支) 祖先後代配對:0 組 恆等於 0 只要 read-AF 不完全相等,串接就是正分,星狀恆為 0 —— 所以最小成本候選裡同時有這兩種形狀時,分支永遠贏不了 觀測到最多的類別正好是「多層無分支」(38–53%),而這個偏誤剛好往那個方向推。 替代方案:用機率模型比較各形狀解釋同一組 read-AF 的能力,而不是加總差值。
三種形狀的祖先後代配對數分別為 3、1、0。 串接得到正分,星狀恆為 0 —— 故最小成本候選中同時存在此二形狀時,分支形狀恆不獲選。

其後果為:本應呈現分岔的連鎖區段,將改為呈現串接。 而分岔是拆峰能力唯一的來源,因此該偏誤系統性地移除拆峰的能力, 使中篇第三節所述的 K = 2 得以維持。

修正方式正是第二節那個 Pv:在該候選所施加的結構下算出 qu, 再算整張狀態表的似然。如此不同形狀所比較的是對同一組計數的解釋能力, 形狀本身不再決定勝負。而且不必只留一個候選 —— 局部候選集合應整組帶進全域推論,由全域參數決定哪一個站得住。 這是把「先挑一個再往下走」換成「全部留著,讓似然決定」。

現行實作的超立方體列舉照樣沿用,它負責產生候選與必要的潛在節點; 被換掉的只有那個分數。這是整份規格中最小、也最值得先做的一個改動。

九、兩類與相位有關的誤讀

兩者皆與相位有關,方向相反: 其一為相位資訊僅在 block 內有效,跨 block 即無定義; 其二為即使在 block 內相位解得正確,仍可能被解讀為錯誤的生物學。

H1/H2 的標號只在同一個 phase block 內有意義,跨 block 是任意的 上排是實體事實:兩條染色體拷貝各自是連續的一整條,橫跨圖上的兩個 phase block。 中排是相位軟體實際輸出的東西:每個 phase block 各自把兩堆 read 標成 H1 與 H2, 但標號在每個 block 內獨立決定。圖上刻意讓 block A 的 H1 對應上排第一條拷貝, 而 block B 的 H1 對應上排第二條拷貝 —— 兩個 block 的 H1 不是同一條染色體。 這個任意性寫成每個 block 一個正負號,圖上標為 σ。 下排分成兩欄說明後果。左欄是不受影響的:clone tree 談的是細胞的祖先關係, 不是哪一條親源染色體帶著變異,所以每個連鎖區段內部算出來的量都與 σ 無關。 右欄是會出錯的:任何把不同 block 的 H1 加總在一起的統計都沒有意義, 跨 block 的單倍型特異拷貝數、跨 block 比較甲基化偏向也都需要先定出 σ。 讀法是:所有全基因體統計都必須只由「連鎖區段內部的量」組成,這樣才自動與 σ 無關。 H1/H2 只在同一個 phase block 內有意義 實體上 兩條染色體拷貝各自是連續的一整條 拷貝 ① 拷貝 ② 軟體輸出 每個 block 各自標號,標號獨立決定 phase block A σ = +1 H1 H2 H1 = 拷貝 ① phase block B σ = −1 H1 H2 H1 = 拷貝 ② 標號於此處反轉 不受影響 clone tree 談的是細胞的祖先關係, 不是哪一條親源染色體帶著變異。 連鎖區段內部算出的量與 σ 無關,可直接邊際化。 會靜靜出錯 把不同 block 的 H1 加總在一起的統計; 跨 block 的單倍型特異拷貝數; 跨 block 比較甲基化偏向。這些都要先定出 σ。 設計規則:所有全基因體統計只能由「連鎖區段內部的量」組成 —— 這樣才自動與 σ 無關。
上排為物理事實:兩條染色體拷貝各自連續。 中排為軟體輸出:block A 的 H1 對應拷貝 ①,block B 的 H1 對應拷貝 ② —— 兩個 H1 並非同一條。

十、連鎖區段預算

結論先講:在最不利的低突變負荷樣本(5/Mb)上, 全基因體約產出 369 個同家族的多變異連鎖區段; 若腫瘤有三群、質量 0.60/0.25/0.15,最稀疏的那一對群仍分到 28 個。 這個數量看起來很小,但它要回答的是一個是非題(這兩個成分是不是同一個), 不是要指派一萬五千個點 —— 所以夠用。

推導:Poisson 模型下的三個閉式比例,以及「兩個 5%」的分母差異

先釐清兩個 5%。本頁所稱的「5%」為固定寬度視窗的比例:含變異的視窗中, 僅 5% 含有兩個以上的變異。以下推導所用者則為變異的比例,其分母不同 —— 由於每個多變異視窗至少含兩個變異,「5% 的視窗」對應 9.5% 的變異。 兩個數字皆正確,但計數的對象不同;可用連鎖區段的產量由後者決定

設變異在基因體上依 Poisson 分布。令 λ 為每個固定寬度視窗的期望變異數:每 Mb 5 個、視窗寬 20 kb 時λ = 0.1;基因體 3.1 Gb 切分為 155,000 個固定寬度視窗。 三個關鍵比例皆為 λ 的閉式函數:

閉式數值
含變異的固定寬度視窗155,000×(1eλ)14,750
其中僅含單一變異的比例λeλ/(1eλ)95.1%(上篇所述的 95%)
落於多變異固定寬度視窗的變異比例1eλ9.5%(本節所用者)
 即多變異固定寬度視窗的變異數15,500×0.0951,475 個變異
相鄰位點對(每個含 k 個變異的固定寬度視窗貢獻 k1 對)155,000×(λ(1eλ))750
 再乘上「兩個變異落於同一單倍型家族」×1/2375,約當表列的 369

依上述模型,若腫瘤含三群、質量分別為 0.60/0.25/0.15, 則跨第 i 群與第 j 群的連鎖區段數為總數乘以 2wiwj

突變負荷同家族多變異連鎖區段群 1×2群 1×3群 2×3
5/Mb約 3691116628
20/Mb約 5,1001,533920383
50/Mb約 24,5007,3484,4091,837

充足性的依據已見於中篇第三節:這些連鎖區段的作用在於確立成分存在且相異, 而非指派 15,500 個點。最稀疏的一對有 28 個獨立連鎖區段, 對「兩個成分是否相同」此一是非判定為充足。

惟這個預算對第十二節的分期很敏感。 若初期只納入 copy-number-neutral 的雜合區域(那是分期的建議做法), 在 CN 變異廣泛的實體腫瘤中可能只剩一半甚至更少, 最稀疏的那一對會從 28 掉到十幾個 —— 那時充足性的論證就不成立了。 因此分期的第一階段應優先選高突變負荷的樣本; 低負荷樣本要等到允許非中性區域之後才有足夠的連鎖區段。 報告須載明各階段實際納入與排除的連鎖區段數。

計數口徑:上表算的是相鄰位點對,不是視窗內全配對

若改為視窗內全配對(每個固定寬度視窗C(k,2) 對),在低負荷下兩者相近 (5/Mb:388 與 375),但在高負荷下顯著分離 —— 50/Mb 時全配對約為 38,750, 相鄰配對約為 28,500。表列的 24,500 屬相鄰配對。 引用這些數字時要一併說明是哪一種配對。

十一、連鎖視窗寬度:連鎖區段產量與品質的取捨

視窗開得寬,收得到的位點多,但多數 read 只覆蓋其中一部分,狀態表變得很稀疏; 視窗開得窄則相反。結論是兩種都做,因為在似然的寫法下同時用兩種寬度不需要付任何代價 —— 兩批都進同一個乘積,各自的證據量由各自的計數與遮罩決定。

項目寬連鎖視窗(現行約 39 kb)窄連鎖視窗(read 跨距
可納入的位點數 k
完整覆蓋的 read 比例低(多數 read 只覆蓋部分位點)高(多數 read 覆蓋全部位點)
狀態表的稀疏程度高(遮罩很多,每個遮罩很少 read)
適用廣泛收集產出高證據量的一批
可分析的頻率連鎖視窗:傳統 VAF 擬合區間與譜系內比例區間的比較 兩條橫軸畫的是同一件事在兩條路線上的可用範圍,範圍都以「佔細胞的比例」為單位。 上排是傳統做法:原始研究刻意只在 VAF 零點一二到零點二四之間擬合, 更低的一端混著假陽性,更高的一端已經進入 clonal 峰。 把它換算成細胞比例,在純度零點六的樣本上大約是零點四到零點八,是一段相當窄的區間。 下排是本頁的做法:下界由每一個連鎖區段自己的深度與地板總量決定,不是一個固定常數, 在每個家族六十條分子、地板總量千分之五時大約是零點零五; 上界則由譜系內的 clonal 堆積決定,暫定零點五。 右側的表列出下界怎麼隨分子數與地板總量變化。 底下標出一個重要提醒:上界零點五是全文最弱的一個數字,必須由模擬重新推定。 讀法是:把比例改成在譜系內部量,動態範圍不但沒有變窄,反而變寬了。 可分析的比例連鎖視窗 傳統 VAF 擬合區間 0 0.5 1.0 換算成細胞比例約 0.4–0.8 HFS 譜系內比例區間 0 0.5 1.0 約 0.05–0.5,且下界逐連鎖區段計算 下界隨深度變化 分子數 δ=0.005 δ=0.01 20 0.10 0.12 30 0.08 0.10 60 0.05 0.07 100 0.04 0.05 下界不是常數,要逐連鎖區段算 把比例改成在譜系內部量,動態範圍不但沒有變窄,反而變寬。 但上界 0.5 是本頁最弱的一個數字:它是從傳統區間的比例類推來的, 必須由模擬重新推定,不要當成已知常數引用。
窄連鎖視窗下每個家族 60 條分子、地板總量 δ 為千分之五時, 可偵測的比例下界約為 0.05。該下界應逐連鎖區段計算,不宜採用固定常數 —— 它正是第四節那個錯誤地板 δvru,h 的數值 —— 注意 δ 是地板總量, 與逐位點錯誤率 ε 是兩個不同的量。

這是與舊寫法最直接的對照 —— 舊寫法必須替兩批各設一個 ωr, 新寫法什麼都不必設。

十二、實作分期

整份規格不應一次到位。以下順序讓每一階段都能單獨驗證, 而且前一階段的結果可以當作後一階段的初始值:

階段做什麼驗收標準
1存下稀疏狀態表(含覆蓋遮罩);不改任何推論能重現現行分類的計數
2把 read-AF 分數換成 multinomial 似然;仍只在局部候選排序的變化可解釋;分岔比例回升
3加入觀測通道(逐位點 + 家族誤標),就地估計不相容連鎖區段的比例被錯誤率解釋掉
4接上全域 (w,T,z);限 CN-neutral 雜合區域、純度與 CN 取外部值合成資料上能還原已知的 K 與樹
5邊際化 σv;輸出未解對應而非強行統一標號斷開的 phase set 被正確報成未解
6視殘差決定是否加 τu;放寬到 LOH/WGD/subclonal CN加了 τ 之後結論是否改變
實作流程:從 read 到全基因體的群與樹,以及每一步是沿用還是改寫 八個步驟由上而下,右欄註明每一步的狀態是沿用、改寫還是新增。 第一步前處理,用現有的變異判定與單倍型標記,沿用。 第二步切分析單位,一個連鎖區段是一個連鎖視窗乘一個單倍型家族,鍵值要含 phase set,沿用。 第三步抽狀態表,除了完整的狀態之外還要留下每一條 read 的覆蓋遮罩與計數, 這一步要改寫:現行流程把部分覆蓋的 read 併進判定, 新的做法是把遮罩本身存下來,因為似然要用它。 第四步是現行的最小成本候選列舉,沿用,它負責產生候選的局部拓撲與必要的潛在節點。 第五步是改寫的重點:把原本用 read-AF 差值總和排序的分數, 換成這個連鎖區段那張狀態表的似然,並且不再只留一個候選。 第六步是新增的觀測通道,包含逐位點錯誤與整條分子的家族誤標,兩者形狀不同要分開估。 第七步把九成五單變異連鎖視窗的頻率因子與百分之五多變異連鎖區段的狀態表因子相乘, 接到同一組全域參數上,這是整條路線的核心。 第八步輸出全基因體的群與樹,並且逐條標明支持度、 沒看到的狀態各自的比例上界,以及跨 phase set 沒解決的對應關係。 右下角標注一個由此消失的東西:原本的約束信心值不再需要, 因為權重本來就是為了修補重複計數才存在的。 最下方標注:分岔與不可同群這些分類仍然照樣產生,但它們是這條流程的輸出, 不是再餵回去的證據。 讀法是:八步裡有三步沿用,兩步改寫,兩步新增, 而改寫的那兩步都是把「先挑一個」換成「全部留著,讓似然決定」。 實作流程:把局部的狀態表接到全基因體那一層 ① 前處理:變異判定 + 單倍型標記 沿用 ② 切連鎖區段:染色體+phase set+連鎖視窗+家族 沿用 ③ 抽狀態表,並保留每條 read 的覆蓋遮罩 改寫 遮罩不再被併掉,似然要用 ④ 列舉最小成本候選與潛在節點 沿用 現行的超立方體解法照用 ⑤ 候選分數:read-AF 差值 → 狀態表似然 改寫 而且不再只留一個候選 ⑥ 觀測通道:逐位點錯誤 + 家族誤標 新增 兩者形狀不同,要分開估 ⑦ 兩類因子相乘,接到同一組全域參數 新增 這是整條路線的核心 ⑧ 輸出:群 + 樹 + 支持度 + 未解對應 新增 含「沒看到的狀態」比例上界 由此消失的一步:約束的信心值。權重本來就是為了修補重複計數才存在的。 分岔/不可同群這些分類照樣產生 —— 但它們是這條流程的輸出,不是再餵回去的證據。
八步裡有三步沿用、兩步改寫、兩步新增。 兩處改寫都是把「先挑一個」換成「全部留著,讓似然決定」。 右下角標出由此消失的一步:約束的信心值不再需要。
規模補充:一個視窗最多放幾個變異(k 的上限該由什麼決定)

狀態空間本身不是瓶頸 —— kv=6 也只有 64 格,而實際觀測到的樣式遠少於此。 真正的成本在於局部候選集合與 σv 的加總被包在全域取樣的內層。 所以上限應由候選列舉的成本決定,不是由 2kv 決定。

依第十節的 Poisson 模型,5/Mb 時 k4 已涵蓋多變異固定寬度視窗的 99.99%, 50/Mb 時仍有 98.6%(固定寬度 20 kb 視窗)—— 先做 k4 幾乎不損失任何資料。 而 k 特別大的連鎖視窗多半是 kataegis,本來就該降權為一個有效觀測。

真實資料與證據

現行實作的量測結果:可用連鎖區段的庫存

以下數值皆來自本實驗室既有實作在七個資料集、六個生物樣本、chr1–22 上的輸出, 在本頁的脈絡下構成可寫成 Pv 的原料清單。

已經量到的全基因體譜:七個資料集的連鎖視窗拓撲類別組成 七條堆疊長條,每一條是一個資料集,橫軸是佔全部可分析單位的百分比。 每條分成三段:單層無分支、多層無分支,以及其餘(分支類與未解析加起來)。 單層無分支的範圍是一成九點五到四成六點八, 多層無分支的範圍是三成八點一到五成三點三,在七個資料集裡有六個是最大的一類。 右側標出每個資料集的可分析單位數,從四千二百多到兩萬三千多不等。 下方列出重現性:同一個細胞株在不同機構、不同 basecaller 下的組成相似度是零點九零九, 同為乳癌的樣本之間是零點八四到零點九零, 兩個肺癌樣本之間是零點八六,跨癌別則掉到零點五九到零點七八。 一個換了 basecaller 還能維持零點九零九、卻分得開癌別的統計量,帶著真的訊號。 最下方提醒:這張圖尚未針對覆蓋幾何做校正,所以類別比例還不能直接當成演化結論。 讀法是:這已經是一個可重現的全基因體單倍型頻譜,重新設計要建在它上面。 已經量到的全基因體譜 七個資料集、六個生物樣本、chr1–22,每個連鎖區段是「連鎖視窗 × 單倍型家族」。 HCC1395_HKU 34.5% 52.2% 9,130 HCC1395_NYGC 36.0% 52.3% 5,308 HCC1937 28.8% 53.3% 4,245 HCC1954 46.8% 38.1% 5,647 H1437 29.8% 53.2% 13,740 H2009 19.5% 52.2% 23,128 COLO829 42.8% 45.7% 10,757 單層無分支 多層無分支(七個裡有六個是最大類) 分支類 + 未解析 重現性:同細胞株換機構換 basecaller 0.909;乳癌之間 0.84–0.90; 兩個肺癌之間 0.86;跨癌別掉到 0.59–0.78。換了 basecaller 還守得住,代表訊號是真的。 但這張圖還沒針對覆蓋幾何校正,所以類別比例還不能直接當成演化結論。
七個資料集的連鎖視窗分類組成。 在本頁的模型下這張圖的讀法變了:它不是「有幾條約束」, 而是「狀態表的形狀分布」——「分支類」僅佔 6%–22%, 是拆峰能力唯一的來源,最為稀缺。
觀測數值在本頁的意義
可分析連鎖區段總數85,941 個含突變的單倍型連鎖區段原料充足,不需重新定序
候選集合可完整列舉75,224 個(87.53%可整組帶進全域推論的比例;其餘須另行處理
分支類的比例各資料集 6%–22%拆峰能力唯一的來源,最為稀缺
多層無分支的比例38.1%–53.3%次序資訊的來源,數量最多
更換 basecaller 的重現性同細胞株跨機構 0.909此分類非流程雜訊
單一連鎖區段的覆蓋結構194 條 read,覆蓋 3 個位點者僅 3 條遮罩必須留下來的直接依據

三項須注意的事項

其一,0.909 為目前最強的結果。一個在更換 basecaller 後仍維持、 且能區分癌別的統計量,所承載的是真實訊號。改成似然之後應重新計算此數值: 若維持或提升,表示新的分數確實在解釋同一個訊號;若下降, 則原本的 0.909 有一部分係由共同的覆蓋幾何所致。

其二,「分支類」的比例尚不可直接視為證據產量。 分岔的判定需要兩個單突變狀態皆存在,雙突變狀態的缺席不是抽樣零也不是錯誤地板 —— 後者正是第四節所檢驗的對象。故 6%–22% 為上限,而非實際可用量。

其三,有一項計數需要釐清。 各資料集的連鎖區段數總和為 71,955,而結論中引用的數值為 85,941。 兩者可能計數不同的對象,此點須在成文之前確認。

預測與結果檢視

既然改成似然之後「證據弱的觀測自然只貢獻一點點」, 那是不是就不必再管品質了 —— 把所有連鎖區段、所有遮罩全部丟進去就好?

展開答案

對一半。門檻確實不需要了,但有一件事變得更重要,不是更不重要。

舊寫法必須設門檻,是因為一條由 n=3 產生的假「不可同群」 會迫使混合模型分出一個不存在的群,而且不留任何跡象。 新寫法沒有這個失效模式:沒有任何一格的機率是 0, 一個 n=3 的連鎖區段算出來的似然差異本來就很小。這一半是對的。

但代價轉移到了錯誤地板身上。地板由第二節的兩個錯誤通道決定, 而地板訂錯的後果與舊寫法的假約束一樣嚴重、一樣安靜

  • 地板訂得太低(例如只寫了逐位點錯誤、漏了家族誤標): 誤標造出來的少數幾條 read 在模型眼中變成「錯誤不可能產生」, 於是被解釋成一個新的 clone。這正是舊寫法那個失效模式換一個位置再出現一次。
  • 地板訂得太高:真實的低頻 subclone 被吸進地板,K 少算。 這一種更難察覺,因為群數少一個不會引起任何注意。

所以取捨並沒有消失,只是從「要不要相信這條約束」變成「錯誤率估得準不準」。 好消息是後者是一個可以就地量測的量(不相容連鎖區段的比例、 同一連鎖區段內互斥狀態的共現率),而前者從來都不是。 這正是改寫的實際收益:把一個靠判斷的旋鈕,換成一個可以估計的參數。

實際強度仍應藉重現性外部檢驗: 在不同 basecaller、不同機構的同一細胞株上掃描一系列錯誤率設定, 比較何者的群與樹最為一致。此檢驗不需金標準, 而金標準正是此領域最欠缺的條件。

尚未解決的問題

  • 整條路線尚未經實測驗證。上述各項皆有結構性的理由,但均未在真實資料上檢驗。 最小的驗證即中篇第三節的數值例:合成 ρ = 0.60、CCF 分別為 1.00/0.40/0.40 的三群, 確認僅用 VAF 的分群必然給出 K=2 與線性樹, 再量測需要多少個多變異連鎖區段、錯誤率要估得多準,方能正確分離而不誤拆。
  • φ 的量測方式需要重新設計。第三節指出: 用同一批分子上的變異估 φ 會系統性偏低,而偏低的方向恰好偏向本路線想要的結論。 改由相距夠遠的同群變異估計之後,φ^ 會變大多少是一個必須先回答的問題 —— 它直接決定用途二還剩多少效力。
  • 推論的計算成本尚未評估。全域取樣的內層包了每個連鎖區段的候選集合與 σv 加總,而連鎖視窗有數萬個。這是整份規格中唯一沒有閉式估計的部分。
  • 內層最佳化的凹性沒有保證。第七節指出, qw 是比值函數、狀態機率又是加權和,兩者都會破壞對數似然的凹性。 因此「找到的是全域最大值」目前只是假設: 需要先用合成資料量出多起點之間收斂到不同解的比例, 才知道多起點要跑幾個、以及區間估計要不要因此加寬。
  • 連鎖區段的來源具有偏性。它們僅來自變異密集的連鎖視窗, 而變異密集有時並非偶然:kataegis 為一種局部超突變, 單次事件於數十 kb 內產生一連串變異。 該串變異幾乎必然同時發生且同屬一群,故將貢獻大量高度相關的證據, 在統計上卻被計為數十個獨立觀測。應先偵測並降權為每叢一個有效觀測。
  • 一個群未必對應單一細胞群體。本實驗室的甲基化觀測顯示: 單一個「單倍型 + 等位」狀態之下仍可區分出五群甲基化模式。 故 K 的正確讀法恆為「至少此數」。
  • 超出 read 跨距的關係仍不可觀測。相距 100 kb 的兩個變異無法落入同一個連鎖區段, 與定序深度無關;第八節的三層結構為此設下硬上限。

原始文獻與程式碼

本頁「現行實作的量測結果」一節的數值均出自: 廖子游,Subclonal reconstruction using somatic haplotagging and methylation profiles with Nanopore sequencing,國立中正大學資訊工程學系碩士學位口試,2026 年 7 月 30 日。

以 read 上的多變異狀態計數(而非單點 VAF)直接建模 subclone, 最接近的既有做法是 PairClone 與 TreeClone:Zhou T, Sengupta S, Müller P, Ji Y, PairClone: a Bayesian subclone caller based on mutation pairsJ R Stat Soc Ser C 2019;68:705–725 (academic.oup.com); 以及 Zhou T et al., TreeClone: Reconstruction of tumor subclone phylogeny based on genotype pairsarXiv:1703.03853。 兩者處理的是成對的位點與部分觀測的 read;本頁規格與其相異之處在於 可變的 k、逐 phase set 的方向邊際化,以及與全基因體單變異連鎖視窗的相乘接合。 此一相異性尚未經文獻檢索確認,成文前應先查證。

單變異連鎖視窗那個因子所屬路線的代表性實作:SciClone,Miller CA et al., PLoS Comput Biol 2014;10:e1003665;PyClone,Roth A et al., Nat Methods 2014;11:396–398; MOBSTER,Caravagna G et al., Nat Genet 2020;52:898–907 (doi 10.1038/s41588-020-0675-5), 程式碼在 github.com/caravagnalab/mobster。 換算式與檢定力指標見 Tarabichi M et al., Nat Methods 2021;18:144–155 (doi 10.1038/s41592-020-01013-2); 評比數據見 Salcedo A et al., Nat Biotechnol 2024 (doi 10.1038/s41587-024-02250-y)。

簡約假設的原始出處為 Camin JH, Sokal RR, A method for deducing branching sequences in phylogeny, Evolution 1965;19:311–326; 有向最小成本 Steiner 樹形圖的標準參考為 Charikar M et al., Approximation algorithms for directed Steiner problems, J Algorithms 1999;33:73–91。 第八節所沿用的候選列舉即屬此系。

前處理所依賴的單倍型標記見 LongPhase-S 預印本 (bioRxiv, 2025,doi 10.1101/2025.11.20.689492), 程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-s。 參數名稱與欄位一律以原始碼為準。

本模組術語

cancer cell fraction(癌細胞比例)
帶有某個特定突變的腫瘤細胞佔全部腫瘤細胞的比例。用來區分 clonal(1)與 subclonal(<1)突變。不等於 VAF。
clone tree(克隆演化樹)
描述腫瘤內各群細胞祖先關係的樹:節點是一群帶有相同變異組合的細胞,邊代表在祖先之上又多拿到變異。要注意同一組群集常常有多棵樹同時相容。
haplotagging
根據已 phase 好的 variants,把每一條 read 指派到 HP1 或 HP2,並把結果寫回 BAM 的 HP tag。
homopolymer(同聚物)
同一個鹼基連續重複的區段,例如 AAAAAA。nanopore 在此類區段較容易發生長度判讀錯誤,是 indel 假陽性的常見來源之一。
latent node(潛在節點)
建樹時為了讓圖連得起來而補進的中間狀態,沒有被任何 read 直接觀測到。它是模型的產物,不能當成「還沒觀察到的細胞」。
mutation multiplicity
在帶有某突變的細胞中,該突變所占的拷貝數;是 VAF 與 cancer cell fraction 換算時的重要參數。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。
pigeonhole(鴿籠原理)
由父代與子代的細胞比例限制樹形的算術規則:一個細胞至多屬於父節點底下的一個子節點,所以各子節點的細胞比例加起來不得超過父節點。名稱來自鴿籠原理 —— 東西放進籠子,總量不會憑空變多。在 subclone 重建的文獻中也稱為 sum rule 或 crossing rule。它只能排除樹,不能挑出樹:通過檢查的候選通常仍不只一棵,其餘要靠 parsimony 之類的偏好決定。
read-AF(read 層級的 ALT 比例)
在同一個分析區域、同一個單倍型家族的 read 之中,某個 somatic 位點帶 ALT 的比例。分母已限縮到同一條 haplotype 的同一段區域,所以不必經過純度與拷貝數換算;用途是在步數並列的候選樹之間排序。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。
單倍型家族(一條 germline 單倍型,加上由它衍生的 somatic 單倍型)
把 read 依 HP tag 分成的兩組之一。家族一HP1 與從它長出來的 HP1-1家族二HP2HP2-1;歸不到任何一條 germline 單倍型的 HP3 不屬於任何一族。叫「家族」是因為它把一條 germline 單倍型與由它衍生的 somatic 單倍型收在同一組裡 —— 分組看的是 germline 那一層,不是有沒有帶 somatic 突變。

在同一個 phase block 內,一個家族對應一條染色體拷貝,所以「兩族」就是那個位置上的兩條同源染色體。但兩件事不成立:其一,軟體判定不出哪一族來自父親、哪一族來自母親(那需要另外定序父母);其二,標號只在該 phase block 內有定義,跨 block 的「家族一」並非同一條染色體。

研究指引 · Subclone 系統發生重建 · Supplement — a local estimand and features for somatic callers

補篇:把目標換成局部系譜,以及它能餵給 caller 什麼

不重建全域細胞層級的 clone tree,改為重建每個單位內部的分子系譜:先用證據預算說明局部結構為何走不進以邊際 VAF 為觀測的全域似然,再把前處理寫成契約(工具鏈門檻、HP3、視窗為讀序連鎖的傳遞閉包、逐樣本連鎖率),然後是局部生成模型、全域頻率譜如何以單向先驗進入而不重複計數、可計數的輸出旗標與其虛無分布,最後是給 ClairS/DeepSomatic 的三層特徵、留一法與分層驗收。

建議先修:估計式與落地

本模組學習目標

  • 把估計目標由全域細胞層級的 clone tree 換成連鎖區段內的分子系譜,並寫出這個目標的形式定義
  • 用證據預算說明局部結構為何走不進以邊際 VAF 為觀測的全域似然,而不是「全域方法不夠準」
  • 寫出局部生成模型:狀態集合、四配子相容性、節點分子比例與兩個錯誤通道
  • 把前處理寫成契約:工具鏈與門檻、HP3 的三種處理、連鎖視窗為讀序連鎖的傳遞閉包、以及逐樣本先算連鎖率
  • 說明全域頻率譜如何以單向先驗進入局部推論,而不把同一批 read 算兩次
  • 定義輸出語義與旗標,並給出 REFINES_GLOBAL 這個可計數、且有虛無分布可比的產出
  • 規格化給 somatic variant caller 的三組特徵、留一法、缺席契約與分層驗收
  • 列出驗收條件、實作順序,以及這條路線不可宣稱的事

為什麼重要

換掉的是目標,不是方法

前一篇把兩類觀測寫成兩個相乘的因子,接上同一組全域參數 (w,T,z),目標仍然是一棵全基因體、細胞層級的 。 這個目標有一個現實問題:以邊際 VAF 與 為觀測的既有方法已經成熟且被系統性評比過, 要在同一個目標上勝過它們,需要的證據量遠大於多變異連鎖視窗能提供的。 中篇的計算已經指出,可用的多變異連鎖區段在低突變負荷樣本只有數百個。

本篇因此換一個估計目標:不重建全域的細胞層級系統發生, 而是重建每一個連鎖區段內部的分子系譜 —— 哪幾種局部狀態真的存在、 各佔多少分子、以及它們之間的先後關係。這個目標的解析度是單倍型連鎖區段 —— 一個連鎖視窗(read 連鎖起來的一段,不跨 )的一條染色體拷貝,不是「全基因體共用的一個 CCF 位置」。

同一批變異,做成一棵全域樹,或做成幾百棵局部小樹 由上而下三個面板,說明估計目標的改動。 最上方是同一批觀測:一條全基因體的長條,上面散布著體細胞變異; 其中四段用虛線框起來,那是有讀序把兩個以上變異連鎖起來的連鎖視窗,依序標為 R1 到 R4; 框外還有許多變異沒有被任何讀序連鎖起來。 中間面板是既有做法:把全基因體所有變異匯集成每個變異的邊際等位頻率, 輸出一棵細胞層級的樹。這棵樹的一個節點是一群細胞, 解析度的連鎖區段是一個全基因體共用的細胞比例位置, 所以細胞比例相同的兩支 lineage 必然被併成同一個節點。 最下方是本規格:每一個框起來的連鎖視窗,各自依兩條染色體拷貝再切成兩個連鎖區段, 每個連鎖區段各輸出一棵小樹,因此圖上有八棵彼此獨立的小樹。 八棵的形狀各不相同:有的只有一條邊,有的是一條鏈,有的分岔, 而且同一個連鎖視窗的兩個家族可以是不同的形狀 —— 這是資料決定的輸出,不是設定。 沒有被連鎖起來的變異不產生任何小樹。 最下方的結論是:兩邊看的是同一批讀序,差別只在把它們摘要成什麼。 左邊是每個變異的邊際計數,右邊是同一條分子上的共現。 而那些小樹不接成一棵大樹,因為局部標籤只在連鎖區段內有定義。 同一批變異:匯集成一棵樹,或留成幾百棵小樹 同一批 read、同一批體細胞變異 R₁ R₂ R₃ R₄ 既有做法:全部匯集成邊際 VAF,輸出一棵樹 全基因體所有變異的邊際計數匯在一起 位置資訊在匯集時就沒了 一個節點 = 一群細胞 解析度:全基因體共用的 CCF CCF 相同的兩支必然併成一個節點 本規格:每個連鎖視窗 × 每條染色體拷貝各一棵 R₁ R₂ R₃ R₄ HP1 HP2 形狀各不相同,同一個連鎖視窗的兩個家族也可以不同;沒有連鎖的變異不產生小樹。 兩邊看的是同一批 read,差別只在摘要成什麼。 左是每個變異的邊際計數;右是同一條分子上的共現。小樹不接成一棵大樹 —— 標籤只在連鎖區段內有定義。
最上方是同一批 read 與同一批變異,下方兩個面板是它的兩種去向。 中間面板把所有變異匯集成邊際 VAF,輸出一棵樹; 最下方讓每個連鎖視窗、每條染色體拷貝各留一棵小樹 —— 八棵形狀各不相同,而且同一個連鎖視窗的兩個家族可以不同。 沒有被連鎖起來的變異不產生小樹,那正是後文「輸入與前處理契約」定義的連鎖率。
 既有做法的目標本規格的目標
估計對象全基因體的細胞群數、比例與樹每個連鎖區段內各局部狀態的比例與先後
觀測進入似然的形式每個變異的邊際 VAF + 拷貝數同一條分子上多個位點的共現
一個節點是什麼一群細胞一類分子狀態
解析度一個全基因體共用的 CCF 位置一個連鎖視窗、一條染色體拷貝
輸出幾棵樹一棵幾百到幾萬棵,彼此不相接
永遠分不出來的CCF 相同的兩支 lineage跨越 read 距離以外的任何關係
多分出一支要多少證據約 20 個變異(兩群差 0.05 時);兩群越近需要越多數十條跨越分子;與兩支靠得多近無關

兩條路線的差別集中在最後一列: 頻率譜要分開兩支,靠的是它們的比例不同;共現要分開兩支,靠的是它們的突變組合不同。 所以「兩支比例相同」對前者是致命的,對後者完全沒有影響 —— 只要它們帶的突變不一樣,分子上就看得出來。

局部這一側的限制在別的地方:它要求每一支各自夠多 (高於該連鎖區段的錯誤地板),而不是要求兩支之間差得夠開。 這個限制由後文「候選模型與輸出旗標」的 FLOOR_LIMITED 旗標承接。

交付物是「成對關係目錄」,不是幾百棵漂亮的樹;而本頁是規格,不是已驗證的方法

既有實作實測到,七個資料集中有六個,最大的一類是「一個連鎖區段只有兩個變異」 (完整分布見「輸入與前處理契約」)。所以這條路線的主要產出是全基因體的成對分子關係目錄 —— 這兩個突變共不共存、誰在前 —— 多層的局部系譜是其中的少數。 輸出格式、資料結構與驗收指標都要照這個比例設計,不要照「幾百棵樹」設計。

另外,本頁是規格,不是已驗證的方法(LiLT,工作名稱)。 文中所有數字都出自既有的原型實作,不是這份規格跑出來的結果 —— 自己實作時應當重新量一次,不要直接引用。

頻率譜為什麼看不到某些局部結構

「全域方法犧牲了局部解析度」如果只是印象,就沒有價值。 它其實是一個機制,而且可以換算成一個可直接與實際資料對照的數字: 要說服頻率譜「這裡是兩群不是一群」,需要幾個變異?

僅以 VAF 頻率譜重建 subclone 的四個步驟,及三項限制各自所在的參數 由左至右共四個步驟,為不使用任何長讀關係、僅以一維頻率譜重建的標準做法。 第一步為換算:單一位點的 read 分為帶變異與不帶變異兩組,其比值為 VAF, 再除以純度的一半換算為癌細胞比例。此步驟需要三個外部估計值, 分別為全樣本單一值的純度、每區段一個值的拷貝數,以及每個變異一個值的 multiplicity。 第二步為將一萬五千個換算後的數值匯為一維直方圖並擬合混合模型, 每一群具有位置、高度與寬度三個參數;每個變異的群歸屬為未觀測的潛在變數, 在該式中被邊際化。 第三步為決定群數,所依據者為模型選擇準則而非參數估計。 第四步為由各群的細胞比例建樹,其條件為父節點的細胞比例不得小於各子節點的比例總和; 此條件通常無法將候選收斂至唯一一棵,其餘由簡約性等偏好決定。 圖的下方列出三項限制,各以箭頭指回其所在的步驟: 群數不可辨識,位於潛在變數與群數; 寬度參數與群數不可區辨,位於寬度; 細胞比例依賴三個外部估計值,位於位置。 此三項限制與後續三個用途一一對應。 僅用 VAF:自 read 至樹的四個步驟 此為改善的對照基準。三項限制列於下方,各對應一個用途。 ① 換算 每個變異 → 一個細胞比例 a = 3 d = 8 VAF = a/d 再換算成 CCF: c = 2·VAF / ρ 須三個外部估計值 ρ 純度 · 全樣本一個 CN 拷貝數 · 每區段一個 μ multiplicity · 每變異 ② 擬合混合模型 15,500 個 c 匯為一維直方圖 CCF → a_m | z_m=k ~ BetaBin(d_m, θ_k, φ) θ_k 位置 · π_k 高度 · φ 寬度 z_m 於此處被邊際化 5% 的作用點即為此變數 ③ 決定 K 群數為何 BIC Dirichlet process MOBSTER 的冪次尾 此為模型選擇, 非參數估計 ④ 建樹 由 {c_k} 定先後 A B C c_A ≥ c_B + c_C 此條件通常無法 收斂至唯一一棵 其餘由簡約性等偏好 決定,非由資料決定 此路線的三項限制 —— 與 5% 的三個用途一一對應 限制一:K 不可辨識 兩群的 c 相等時,似然對 「一群或兩群」完全不變。 增加深度不作用於此方向。 參數:z → K → 由用途一補足 限制二:φ 與 K 不可區辨 單一寬峰與兩個鄰近的 窄峰擬合出近乎相同的圖。 其結果取決於懲罰項。 參數:φ → 由用途二補足 限制三:c 依賴換算 ρ 偏誤使整體平移; CN 或 μ 偏誤為逐變異 位移,將汙染群的組成。 參數:c → 由用途三補足
先看清楚被討論的是哪一系:這四個步驟就是那一系的全部路徑, 而觀測進入模型的唯一形式是第①步那個每變異的邊際計數與該處拷貝數。 PyClone、SciClone、PhyloWGS、Pairtree、DPClust 走的都是這條路徑(圖上只點名了 MOBSTER,因為第③步的冪次尾是它特有的),而它們正是這個領域被系統性評比的那一群。 圖右下角把三項限制各自掛回一個參數,本頁只用得到「限制一:兩群的 c 相等時, 似然對一群或兩群完全不變」—— 那正是下一張表最後一列。 (每項限制底下那句「由用途一/二/三補足」是前一篇補救這三項限制的做法, 本頁走的是另一條路,用不到它們。)

答案取決於兩群靠得多近,而且不是慢慢變多

兩群的期望 VAF頻率譜大約需要幾個變異才分得開
0.20 對 0.10約 4 個
0.20 對 0.15約 20 個
0.20 對 0.18約 120 個
0.20 對 0.20永遠不夠

最後一列不是「很難」,是沒有答案。 兩群的期望 VAF 相同時,把任何一個變異從這一群改指派到另一群, 直方圖完全不變 —— 兩群本來就落在同一根柱子裡。 加深度、加樣本、換更好的演算法都不會動它。 中篇的 K=2 例子即為此情形。

而一支只在一個連鎖視窗裡不同的 lineage,本來就帶不起那麼多變異

這是問題的另一半。一支細胞群若只在某個連鎖視窗內與它的母群體不同, 它與母群體的全部差別就是那個連鎖視窗裡的那幾個突變 —— 三個、五個。 它因此落在上表「開不出來」那一側,而且通常離得很遠。 所以這不是「不容易偵測」,是它在那個模型裡開不出來。

同一批 read,換一種看法

把那三個變異換成「它們在不在同一條分子上」,需要的證據量完全不同。 假設這三個突變其實共存,那麼在 20 條跨越它們的分子裡, 同時帶三個突變的分子預期只有錯誤地板那麼多 —— 1% × 20 條 ≈ 0.2 條

而實際看到 5 條。

這裡不需要門檻,也不需要任何統計檢定:預期 0.2、實際 5,結論就出來了。 而兩條路線看的是同一批 read —— 差別不在資料量,在把它們摘要成什麼。

上面那幾個數字是怎麼算出來的

「需要幾個變異」=多開一群要付的代價 ÷ 每個變異能提供的證據, 兩者都是對數似然,單位是 nat(自然對數底下的資訊量)。 本文不用 nat 當敘述單位,因為換算成「幾個變異」之後, 即可直接與實際資料比較。

  • 代價是模型複雜度罰則 12pKlogMeff: 參數兩個、有效觀測三千時約 8。
  • 每個變異的證據約為 d(θ1θ2)2/2θ(1θ), 其中 d 是深度、θ 是兩群的期望 VAF。 深度 50、0.20 對 0.15 時約 0.43,故 8÷0.4319,表中記為「約 20」。
  • θ1=θ2 時分子為零、商為無限大 —— 那就是兩群期望 VAF 相同的情形。 表中那四列是同一條曲線上的四個點,不是四件不同的事。
  • 共現那一側:5 條對 0.2 條的對數似然比約 12, 遠高於分辨兩個局部結構所需。這裡的錯誤地板(總量 δu,本頁取 1%) 來自後文「局部生成模型」的逐位點錯誤 ε 與家族誤標, 所以 δu算出來的而不是另一個自由參數,而且不是常數,要逐連鎖區段估。

一個必要的但書

上面整段的前提是「似然只吃邊際計數」,而有兩個既有方法滿足這個前提: PairClone 與 TreeClone 已經把「同一條短讀上一對鄰近 SNV 的共現」寫進了全域似然。 所以本規格與它們的差別不是「有沒有用共現」,而是這條通道有多寬 —— 通道寬度完全由讀長決定,而同一扇門,門後的東西差兩個數量級

數量級補充:短讀只有 0.15%–1.5% 的 sSNV 有伴,ONT 是 40.5%–98.1%

兩個 sSNV 要落在同一條讀序上才數得到,所以能不能用共現,取決於讀長與突變密度的比值。 300 bp 的短讀在 5–50/Mb 的突變負荷下只有 0.15%–1.5% 的 sSNV 有伴; ONT 的實測是 40.5%–98.1%(見「輸入與前處理契約」)。 這也是為什麼 PairClone 與 TreeClone 只處理成對位點:在那個產量下, k 大於 2 的視窗幾乎不存在,可變 k 沒有意義。

方法

方法概覽

方法先把互不重疊的 read 分成兩組:單變異連鎖視窗 S1 用於估計全域頻率基準, 多變異連鎖區段 S2 用於逐區段重建局部分子系譜。全域結果只作為局部推論的先驗, 局部結果不回饋全域,因此同一條 read 不會在兩個 likelihood 中重複計數。

整條路線的總覽:從原始 read 到兩份交付物 由上而下四個面板,分別畫出輸入整理、資料切分、全域與局部推論,以及交付物。 第一個面板是前處理,沿用既有工具: 左邊是四條來源未知的原始 read,以虛線外框表示; 中間是定相與體細胞標記之後的同一批 read,已依兩條單倍型分成兩組並帶上變異標記; 右邊是由它們整理出來的稀疏狀態表,畫成一格一格的方陣, 深色格代表帶有該位點的變異,淺色格代表參考型。 第二個面板是把位點切成兩堆:一條全基因體長條上散布著變異, 多數是孤立的,屬於 S1;少數幾處聚在一起並用虛線框起來,屬於 S2。 兩堆的 read 沒有交集,因此下方有兩支箭頭分別把 S1 送進全域基準、把 S2 送進局部推論。 第三個面板左邊是全域基準,畫成一張變異等位頻率的直方圖, 上面有幾個峰,峰頂各標一個圓點代表被定出來的 CCF 原子; 右邊是局部推論,畫出某一個連鎖區段的四條分子, 每條分子上有三個位點,實心代表帶有變異、空心代表參考型, 右方由這些分子推出一棵小小的局部系譜。 兩者之間有一支由左指向右的箭頭,標著單向:全域基準的結果只當作局部推論的先驗,局部不回饋全域。 最下方是兩份交付物: 左邊是逐連鎖區段目錄,畫成數列,每一列是一棵小樹加上幾個顏色不同的旗標; 右邊是給 somatic caller 的特徵,畫成一疊通道, 上面三條是本規格新增的三組特徵,下面三條是 caller 原本就有的。 方法概覽:三個步驟,兩份交付物 前處理 沿用既有工具 原始 read 定相 + 體細胞標記 稀疏狀態表 切成兩堆 read 互斥 S₁ · 單變異連鎖視窗(多數) S₂ · 虛線框起來的多變異連鎖區段 S₁ S₂ 全域基準 頻率譜分群 VAF 輸出:純度、CCF 原子 單向 局部推論 每個連鎖區段一次 該連鎖區段的分子 局部系譜 交付物 A · 逐連鎖區段目錄 每連鎖區段一列:小樹 + 比例 + 旗標 B · 給 caller 的特徵 局部系譜特徵 caller 既有
讀法:虛線外框的 read 是來源未知的原始資料, 上色之後才分得出兩條單倍型;實心圓是變異、空心圓是參考型。 中間那條長條是分水嶺 —— 孤立的變異進 S1,虛線框起來的成群變異進 S2兩堆的 read 沒有交集,所以全域基準算出的原子可作為局部推論的獨立先驗。 右側四條分子推出的小樹,就是方法的產出單元。
步驟資料產出在本方法中的地位
前處理配對 BAM + 候選集合定相、體細胞標記、連鎖區段與稀疏狀態表沿用既有工具;輸入契約必須固定
全域基準S1 的單變異資料純度、CCF 原子、原子不確定度與 overdispersion沿用既有頻率譜方法
局部推論S2 的單一連鎖區段 + 全域先驗狀態集合、比例、先後關係與品質旗標本規格的核心

估計目標:一個連鎖區段的三個量

每個連鎖區段只估計三個對象:局部狀態集合、各狀態的專屬分子比例, 以及狀態之間的先後關係。以下先定義估計單位與輸出,再引入似然與先驗。

一個連鎖區段的輸出:稀疏狀態表、唯一的相容樹,以及可以計數的旗標 三格由左到右。第一格是一個連鎖區段的稀疏狀態表: 全參考狀態 62 條、只帶第一個變異的 18 條、同時帶第一與第二個的 5 條、 同時帶第一與第三個的 7 條,而同時帶第二與第三個的是 0 條, 另外還有覆蓋遮罩不完整的分子另行計數。 這個連鎖區段的錯誤地板約為百分之一乘上分子總數,也就是不到一條, 所以 5 條遠高於地板,而 0 條還不足以排除那個狀態存在。 第二格是由這些狀態建出來的樹:全參考在最上,其下是只帶第一個變異的狀態, 再往下分成兩支,分別再加上第二個或第三個變異。 因為狀態集合通過四配子檢定,這棵樹是唯一的; 所以困難的地方不是搜尋樹,而是決定哪些狀態的比例高於地板。 第三格是這個連鎖區段輸出的那一列:狀態集合與各自比例、先後關係與後驗、 有效分子數與遮罩分布,以及四個旗標。 旗標是這條路線可以計數的產出,不是修辭。 一個連鎖區段輸出什麼 ① 稀疏狀態表 000 62 100 18 110 5 101 7 011 0 覆蓋遮罩不完整的另計 地板約為分子總數的百分之一 5 條遠高於地板 0 條還不足以排除 ② 相容則樹唯一 000 100 110 101 難的是選狀態,不是搜尋樹 四配子檢定通過,樹就唯一 ③ 輸出這一列 狀態集合與各自比例 先後關係,附後驗 有效分子數與遮罩分布 旗標 REFINES_GLOBAL FLOOR_LIMITED ORDER_UNRESOLVED INCOMPATIBLE 旗標是可以計數的產出
整節要交代的就是這張圖: 左邊是一個連鎖區段收到的東西(稀疏狀態表),中間是要估出來的東西(哪幾種狀態、誰在誰之前), 右邊是它最後輸出的那一列。中間那棵樹沒有經過搜尋 —— 狀態集合一旦選定,包含關係就把樹決定了,這是下面第三個小節的重點。

估的範圍:一個連鎖區段

沿用前一篇的連鎖區段u 是一個單倍型連鎖區段:一個連鎖視窗 × 一條 , 其位點集合為 Ju、位點數 ku=|Ju|

這樣切有一個具體的理由,不是為了方便: 一個連鎖區段裡的分子全部來自同一條染色體拷貝,另一條屬於另一個連鎖區段。 所以在連鎖區段內部,「兩個變異出現在同一條分子上」才真的等於 「它們在同一條拷貝上先後發生」。 若不先依家族切開,位於兩條拷貝上的一對變異(trans)永遠不會共存, 其計數表會與「兩支互不包含的 subclone」長得一模一樣 —— 連鎖區段這個切法就是為了讓這兩件事落進不同的連鎖區段而不會相遇。

要估的三個量

局部狀態h{0,1}ku, 即該連鎖區段那幾個位點上「帶或不帶變異」的樣式。 一個連鎖區段的估計目標就是下面三個量,沒有第四個

要估的量記號白話
狀態集合Xu{0,1}ku這個連鎖區段裡有哪幾種分子
專屬比例νu,h0,總和為 1每一種各佔多少
先後關係Xu 上的有根樹 Eu誰是誰的祖先

三者合起來記為 Lu=(Xu,Eu)νu, 樹根固定為全參考狀態 0ku

變數補充:ν 是專屬比例,不是累積比例

一條分子只由它所屬那一個節點的狀態產生,不由祖先節點產生; 祖先節點的 ν 因此是「還停留在該狀態的分子」的比例,可以很小。 換句話說,樹的形狀不對 ν 施加任何單調性, 它只規定哪些狀態可以同時存在

先後關係幾乎不用估:四配子相容性

先後關係看起來是三個量裡最難的,其實不是 —— 它不需要搜尋。 兩個位點稱為相容,若四種樣式 00,01,10,11 中至多出現三種。 只要 Xu每一對位點都相容,樹就已經被 Xu 決定了, 不必列舉任何樹形。實作上要做的只有兩件事:逐對檢查相容性, 以及在檢查失敗時把它當成品質訊號而不是新發現

k=2 的連鎖區段只會落入三類:串接、分岔、不相容 一個只有兩個位點的連鎖區段,它的分子只可能有四種狀態: 兩個都不帶、只帶第一個、只帶第二個、兩個都帶。 三欄各是一種情形,每一欄把這四種狀態各自的分子數列出來。 三欄的邊際刻意做成完全相同:總數都是八十條,位點 A 的變異分子都是三十九條, 位點 B 的都是十七條 —— 這是整張圖的重點,因為它表示光看每個位點各自的頻率 分不出這三種情形,要看四種狀態怎麼分配。 左欄是串接:沒有任何分子只帶 B,所以帶 B 的分子全部也帶 A, B 只可能長在 A 的後代裡。 中欄是分岔:沒有任何分子兩個都帶,所以 A 與 B 落在互不包含的兩支上。 右欄是不相容:四種狀態都有分子。在「每個變異只發生一次」的前提下這不可能, 所以它不是發現了一支新的 lineage,而是四配子檢定失敗 —— 代表這個連鎖區段的錯誤地板偏高或家族誤標偏多,是一個品質訊號。 讀法是:分類要用似然比檢定,不要對原始計數設門檻, 因為在偵測極限附近,兩種假設只差幾條分子。 同一組邊際,三種分子狀態分配 每一列是一種分子狀態:實心=帶變異、空心=參考型。三欄的邊際完全相同(見最下一列)。 串接 chain A → B 00 41 10 22 01 0 11 17 沒有分子「只帶 B」 → B 長在 A 的後代裡 分岔 fork A / B 00 24 10 39 01 17 11 0 沒有分子「兩個都帶」 → A、B 互不包含 不相容 incompatible 四種都有 00 33 10 30 01 8 11 9 四配子檢定失敗,非新 lineage N 80 · A 的變異 39 · B 的 17 N 80 · A 的變異 39 · B 的 17 N 80 · A 的變異 39 · B 的 17 右欄的出現率可以反過來估計單倍型分型的錯誤率 —— 模型因此自帶一個校正用的觀測量。 分類要用似然比檢定,不是對原始計數設門檻:在偵測極限附近,兩種假設只差幾條分子。
一個 k=2 的連鎖區段,其分子只有四種狀態。 三欄的總數與兩個位點各自的變異分子數完全相同(最下一列)—— 所以光看每個位點的頻率分不出這三種情形,要看四種狀態怎麼分配。 左欄沒有「只帶 B」的分子,故 B 只能長在 A 的後代裡; 中欄沒有「兩個都帶」的分子,故 A、B 互不包含; 右欄四種都有 —— 在「每個變異只發生一次」下不可能, 所以它不是發現了一支新 lineage,是四配子檢定失敗。
為什麼「兩兩相容」就足以決定一棵唯一的樹(含 k3

把每個位點 j 換成一個集合 CjXu帶有該變異的狀態所成的集合。 四種樣式少一種,說的正是 CACB 這兩個集合的關係:

缺哪一種樣式兩個集合的關係樹上的意思
沒有 01CBCAB 在 A 的後代裡
沒有 10CACBA 在 B 的後代裡
沒有 11CACB=A、B 在互不包含的兩支上
四種都有兩集合互相交錯樹上不存在這種關係

所以「相容」=「這兩個集合不交錯」,也就是要嘛一個包含另一個,要嘛不相交

唯一性:一族兩兩不交錯的集合,在數學上就是一棵樹 —— 包含關係本身給出父子關係(Cj 的父親是包含它的最小那一個), 不相交的兩個成為兄弟。沒有任何自由度留給搜尋,所以樹是 Xu函數,不是待估的參數。 剩下的自由度只有一種:一條邊上若有數個位點的集合完全相同, 它們同時發生、在樹上擠在同一條邊,彼此的先後資料沒有講 —— 這就是「本質上唯一」那個「本質上」的全部內容。

k3 為什麼不必額外檢查:關鍵在於兩兩相容不只是必要條件, 它同時是充分條件(perfect phylogeny 定理,Gusfield 1991)。 也就是說不存在「每一對都相容、但三個一起就不相容」的反例 —— 所以三個位點不必檢查 3 組三元組,k 個位點也只要檢查 k(k1)/2 對,成本是 k2 而不是 2k。 這正是「先後關係幾乎不用估」的來源。

實作上因此只需維護一張逐對的相容性表; 它同時就是右欄那個品質訊號的計數來源。

這給出兩個貫穿後面各節的結論:

  • 困難不在搜尋樹,在決定 Xu —— 哪些狀態的比例真的高於錯誤地板。後續的生成模型、先驗與候選選擇都在處理這一件事。
  • 四格全滿不是發現了一支新 lineage,是四配子檢定失敗, 代表這個連鎖區段的錯誤地板偏高或家族誤標偏多。相容性檢定因此同時是品質訊號。
解讀補充:未觀測狀態可能是現存或歷史狀態

Xu 可以含沒有被任何分子觀測到的狀態。 觀測到 110101100 沒看到時, 兩者若不共用一個帶第一個突變的祖先,第一個突變就得發生兩次。 這種狀態只有兩種身分 —— 現存但沒抽到(ν>0), 或已被後代取代的歷史狀態(ν=0)。 前一篇還有第三種:純粹因為「一步一個突變」的表示法而被迫補進來的記帳節點; 本規格允許一條邊帶多個突變,那一種就隨表示法一起消失了。 那條警告仍然適用,但適用範圍窄了一半。

什麼時候算「估完了」

三個核心估計量之外,細胞比例與全域群對應還需要外部資訊。 每項輸出各有成立條件;條件不足時輸出旗標,而不是猜一個值 —— 這條規則是後文輸出旗標的語義來源。

要回答的問題估到什麼需要什麼條件不足時的輸出
有哪幾種、各佔多少Xuνu只需要該連鎖區段的 read 與就地估到的錯誤率FLOOR_LIMITED
誰在誰之前Xu 上的先後關係兩個單一狀態皆可見,且雙狀態的有無高於地板ORDER_UNRESOLVED
換算成細胞比例各節點的 純度與該處 ,由全域基準提供只報分子比例,標 CELL_SCALE_UNAVAILABLE
對得上哪一個全域群局部節點與全域群的對應節點內至少一個變異有可信的全域指派UNLINKED_TO_GLOBAL
局部節點是一類分子狀態,不是一群細胞

上表的「換算成細胞比例」只是尺度轉換,它不會把節點變成細胞群。 一個節點只表示「這些分子在 Ju 上帶有同一組突變」。 兩群基因體其他地方不同、但在這個連鎖視窗內完全相同的細胞,會落進同一個節點。 本實驗室的甲基化觀測正是這件事的實例:單一個「單倍型 + 等位」狀態之下, 仍可再分出數群甲基化模式。因此節點數的正確讀法恆為「至少此數」。 反向也不成立:同一群細胞在不同連鎖區段裡對應到不同的局部狀態, 因為每個連鎖區段看的位點集合不同。

局部生成模型

這一節只回答一個問題:給定某個連鎖區段裡各種真實分子狀態的比例 νu,資料中的一條 read 為什麼會呈現目前看到的 0/1 字母? 由真實分子池到觀測資料共有四步:

  1. 抽出一種真實狀態。一條分子先依 νu,屬於某個完整狀態 Hr=h
  2. 套用這條 read 的覆蓋範圍。read 通常只蓋住位點集合 Mr,未覆蓋的位置保持未知。
  3. 通過觀測錯誤。逐位點錯誤可能改變一個字母,家族誤標則可能把整條分子分到錯的單倍型家族。
  4. 形成實際資料。通過前述步驟後的字母 Yr,才是狀態表裡真正計數的觀測。
局部生成鏈:由這個連鎖區段的狀態比例,長到一條 read 上看到的字母 由左到右四格,說明一條讀序上的字母是怎麼產生的。 第一格是這個連鎖區段的狀態比例:四種局部狀態各佔多少分子,畫成四條長短不同的長條。 這組比例是自由參數,先驗來自全域基準。 第二格是從這組比例抽出一條分子,它有一個真實狀態,圖中畫的是三個位點皆帶變異的 111; 實心圓代表帶有變異,空心圓代表參考型。 第三格是覆蓋遮罩:第二個位點沒有可靠觀測,以虛線空心圓表示未知; 第一與第三個位點讀到 1 和 1。沒觀測到的位點必須邊際化,不可以填成參考型。 第四格是兩個錯誤通道:逐位點錯誤一次只改一個字母, 整條分子的家族誤標則一次把整條分子搬到另一個家族; 通過這兩道之後看到的字母才是真正的資料。 最下方是與前一篇的唯一結構差異,而且只差在第一格。 左邊是前一篇:全域的 clone tree 以一個確定函數決定局部比例,局部沒有任何自由度。 右邊是本規格:同一棵全域樹只以虛線箭頭提供先驗,局部比例是自由參數。 這就是「提高局部解析度」在技術上的全部內容。 一條 read 上的字母是怎麼來的 ① 這個連鎖區段的狀態比例 000 101 111 自由參數 先驗來自全域基準 ② 抽一條分子 它的真實狀態 111 ③ 覆蓋遮罩 第二個位點沒有可靠觀測 要邊際化,不可填成 0 ④ 兩個錯誤通道 逐位點:改一個字母 誤標:整條搬走 過完這兩道之後 看到的字母才是資料 與前一篇的唯一結構差異,就只差在第 ① 格 前一篇 確定函數 ν 沒有自由度 本規格 只當先驗 ν 是自由參數
上半部依序畫出完整生成過程: 先從此連鎖區段的狀態比例 νu 抽出一條具有完整真實狀態的分子, 再只保留該 read 實際覆蓋的位置,最後通過逐位點錯誤與家族誤標,得到資料中觀測到的字母。 下半部才比較與前一篇的差異:前一篇由全域 clone tree 確定 νu; 本規格讓 νu 成為局部自由參數,全域結果只提供先驗。

先看一條只有部分覆蓋的 read

設三位點連鎖區段的狀態集合為 Xu={000,101,111},三種狀態的專屬比例依序為 νu=(0.60,0.30,0.10)。現在有一條 read 只覆蓋第一與第三個位點, 並在這兩處讀到 1–1。在尚未加入錯誤時,這條 read 同時相容於 101111,因此其觀測機率為 0.30+0.10=0.40一條 read 支持的是一組狀態,不是一個狀態 —— 這句話就是下面整節的全部內容。

符號表:HrMrYr 三者的分工(隨時可回來查)
記號在此例中的值意義
Hr000101111這條分子的完整真實狀態,未直接觀測
Mr{1,3}這條 read 實際覆蓋的位點
Hr,Mr0–01–1把完整狀態投影到覆蓋位置後,原本應看見的字母
Yr例如 1–1經過錯誤通道後,資料中真正記錄的字母

三者的關係是一條單向鏈:Hr 經覆蓋遮罩投影成 Hr,Mr, 再經錯誤通道變成資料裡的 Yr。推論要走的是反方向。

先條件於 read 已進入正確的單倍型家族;此時 read-level 的骨架可寫成:

P(Hr=hνu)=νu,h,P(Yr=yMr=M,νu,eu)=hXuνu,hAu,M(yh,eu)

Au,M(yh,eu) 是單一家族內的觀測通道:給定完整真實狀態 h, 它處理部分覆蓋與逐位點錯誤,並給出最後看到 y 的機率。 eu 為本連鎖區段的逐位點錯誤參數。跨家族誤標會連結另一個連鎖區段,於第二個細節另行加入。

這條式子的讀法是:逐一考慮所有可能的真實狀態, 以其分子比例 νu,h 加權,再乘上它經觀測通道變成 y 的機率。 以下各小節先拆開 A,再把跨家族誤標接回來。

第一個細節:未覆蓋位點要邊際化

若暫時忽略所有錯誤,觀測通道只剩下「h 投影至 M 後是否等於 y」這項檢查。上面的完整式子便化為:

qu,M(y)=h:hM=yνu,h

MJu 是該 read 的覆蓋遮罩,y 是它讀到的字母。 沒覆蓋到的位點不可以填成參考型 —— 那會把一條中立的 read 變成反對某個狀態的證據。

一個真實連鎖視窗的 read 覆蓋:八成的分子只看得到一個位點 上半是一個真實分析單位裡 read 覆蓋情況的統計。 這個連鎖區段有三個 somatic 位點、一百九十四條 read,連鎖視窗寬三十九點四 kb。 三條長條由上而下分別是:同時蓋到三個位點的 read 只有三條,佔百分之一點五; 蓋到兩個位點的三十一條,佔百分之十六;只蓋到一個位點的一百六十條,佔百分之八十二點五。 下半把同一批 read 按位點對拆開,看每一對到底有幾條 read 同時蓋到。 第一對與第二對各有十七條與二十條,分別判出分岔與串接; 第三對只有三條,而且三條都是參考型,什麼也判不出來。 最下方是這張圖的結論:這個連鎖區段的演化樹靠的是十七與二十這兩個數字,不是一百九十四; 而第三對實質上缺乏資料,仍被演算法判定了關係。 讀法是:有效樣本數是「每一個位點對各自的跨越深度」,不是這個連鎖區段的總 read 數。 真實資料的覆蓋結構 HCC1395_HKU · chr12:981,725–1,021,146 · HP1 · k=3 · 194 reads · 連鎖視窗 39.4 kb 一條 read 蓋得到幾個位點 蓋到 3 個 3 條 1.5% 蓋到 2 個 31 條 16.0% 只蓋到 1 個 160 條 82.5% 八成的分子只看得到一個位點 —— 它對「兩個位點的共現」完全沒有意見。 把同一批 read 按位點對拆開 A × C n = 3 三條都是參考型 什麼也判不出來 A × B n = 17 RA 12 · AR 5 · 沒有 AA 判為分岔 B × C n = 20 AA 6 · AR 9 · RR 5 判為串接 這個連鎖區段的樹靠的是 17 與 20,不是 194。而 A × C 那一對沒有資料 卻一樣被演算法決定了關係 —— 「沒看到」被當成了「不存在」。
約八成的 read 僅覆蓋三個位點中的一個。 將同一批 read 依位點對拆分後可見:此連鎖區段的判定依據為 17 與 20 兩個數字,而非 194; 其中一對僅有 3 條 read,仍產出了一條關係判定。
證據補充:部分覆蓋為何只能算一個約束

一條有 x 個未覆蓋位點的 read,與 2x 個狀態相容, 那些狀態構成狀態空間的一個子立方體。它主張的是「真實狀態落在其中」, 不是 2x 個觀測 —— 把兩者混為一談會把證據量灌大 2x 倍。 在似然寫法下這是自動的(上式的加總就是那個子立方體),但報告層不自動: 既有實作有一個 k=3 的連鎖視窗,靠一個全跨樣式(3 條 read) 加上十一個部分樣式就「解出唯一解」。 這種連鎖區段的唯一性大部分來自簡約性與先驗,不是來自資料。 因此每個連鎖區段必須分開報全跨分子部分分子各貢獻多少證據; 只有全跨樣式與根是跨候選不變的,被部分 read 見證的狀態不是。 順帶一個反直覺的推論:部分覆蓋越多,相容的候選越多 —— 覆蓋越差的連鎖區段越容易看起來「並列」,而不是越容易被排除。

整個連鎖區段共用同一個分子池

整個連鎖區段共用一組 νu,每條 read 由它自己的遮罩投影出來; 不同遮罩不各配一個獨立的比例向量,因為它們取樣的是同一池分子。 在 PCR-free 長讀下,一條 read 就是一條分子, 所以連鎖區段內部的計數預設為 multinomial,額外離散度沒有來源; 只有殘差真的顯示過度離散時才加,而且要說得出它來自哪裡。

把這個區段的所有 read 記為 Du={(Mr,Yr)}r=1nu。暫時忽略跨家族誤標時,單一連鎖區段的基礎似然只是逐 read 相乘,而每一項都是前述的加權和:

P(Duνu,eu)=r=1nu[hXuνu,hAu,Mr(Yrh,eu)]

不同 read 可以有不同的遮罩 Mr,但全部共用同一組 νu。 同一遮罩的 read 可彙總成 multinomial 計數;兩種寫法是同一個模型。

第二個細節:兩種錯誤通道的形狀不同

前式中的 A 不能只寫成一個無來源的錯誤率。 逐位點錯誤與整條分子的家族誤標會產生不同形狀的假狀態,因此必須分開校準。 前者留在 A 內;後者要把成對的兩個連鎖區段一起寫:

逐位點錯誤與整條分子誤標的形狀不同,而且位點越多,誤標越是主角 左邊是逐位點的定序錯誤。它一次只改一個字母, 每個位點各自獨立,所以要一次改對三個位點才會生出一個完全不同的狀態, 機率是單點錯誤率的三次方,小到可以忽略。 右邊是整條分子的家族誤標。一條本來屬於另一個單倍型家族的分子被標錯, 整條就這樣跳到這個連鎖區段裡,它的三個位點是一起過來的, 所以機率只有一個誤標率,跟位點數完全無關。 中間下方是兩者的比較表。以單點錯誤率千分之五為例, 差一個位點時兩者相當;差兩個位點時誤標大約高一百倍; 差三個位點時高兩萬倍以上。 所以位點越多,能造出假狀態的幾乎只剩誤標這一條路。 最下方是後果:如果模型只寫了逐位點錯誤, 那麼在全參考的背景上冒出來的三位點全變異狀態, 在模型眼中會是「錯誤不可能造出來的」,於是只剩一個解釋 —— 一個新的 clone。 而它真正的來源是隔壁那個家族。 讀法是:一個參數描述不了兩種形狀不同的錯誤,寫漏的那一種會直接變成假的 subclone。 兩種錯誤的形狀不同:一種改一個字母,一種搬走一整條分子 逐位點定序錯誤 每個位點獨立,一次改一個字母 0 0 0 只有中間這個位點被讀錯 0 1 0 要生出一個差三個位點的狀態, 同時錯三次:ε³ 整條分子的家族誤標 三個位點一起過來 另一個單倍型家族 1 1 1 整條被標到這個連鎖區段 1 1 1 機率只有一個誤標率 η, 與位點數無關 差幾個位點,誰才是主角(以 ε = 0.005、η = 0.01、來源比例 0.3 為例) 差 1 個位點 逐位點 5×10⁻³ 誤標 3×10⁻³ 兩者相當 差 2 個位點 逐位點 2.5×10⁻⁵ 誤標 3×10⁻³ 誤標高約 100 倍 差 3 個位點 逐位點 1.3×10⁻⁷ 誤標 3×10⁻³ 誤標高約 20,000 倍 只寫逐位點錯誤會發生什麼 在全 0 的背景上冒出 111:模型認為錯誤造不出來(10⁻⁷), 於是只剩一個解釋 —— 一個新的 clone。而它真正的來源是隔壁那個家族。 讀法:一個參數描述不了兩種形狀不同的錯誤;寫漏的那一種會直接變成假的 subclone。
左右兩種錯誤的形狀不同:一種一次改一個字母,一種一次搬走整條分子。 位點差得越多,逐位點錯誤的機率掉得越快,而誤標完全不受位點數影響 —— 所以差三個位點時,能造出假狀態的幾乎只剩誤標這一條路。

u1=u 為目前的單倍型家族,u2 為同一連鎖視窗的另一個家族, αvu 為「一條最後被標成 u 的 read,實際來自家族 v」的校準權重。 則真正用於 unit u 的觀測機率為:

pu,M(y)=v{u1,u2}αvuhXvνv,hAv,M(yh,ev),vαvu=1

αu1u 是正確標記的來源,αu2u 是由另一家族誤標進來的來源。 這些權重由成對家族的分子數與誤標率導出,不是每個 unit 自由擬合的比例。 因此 production likelihood 以 pu,Mr(Yr) 取代前一個基礎似然括號內的值。

νu,hobs=(1δu)·νu,h+δu·ru,h

這是前述成對觀測通道的摘要寫法。ru,h 由逐位點錯誤與整條分子的家族誤標算出,不是自由參數。 δu地板總量,由逐位點錯誤 ε 與家族誤標算出,不是另一個自由參數; δuru,h 就是這個連鎖區段能分辨的最小比例,也是所有偵測下界的來源。

一格是空的,有三種完全不同的原因 三欄並列,三欄的觀測完全一樣:那一格的計數是零。但成因不同,處理方式也不同。 第一欄是抽樣零。那個狀態真的存在,只是跨越這幾個位點的分子太少,沒抽到。 判準是機率:沒抽到的機率等於一減去它的比例,再取跨越深度次方。 跨越深度三、比例三成時,這個機率大約是三分之一, 所以「沒看到」幾乎沒有排除任何東西。跨越深度五十九時才降到百分之五。 處理方式是讓似然自己算,不需要任何門檻。 第二欄是結構零。沒有任何 clone 帶有那個基因型,所以它的真實比例就是零。 這是我們真正想推論的結論,不是輸入。 第三欄是錯誤地板。那個基因型確實不存在,但定序錯誤與家族誤標仍然會產生看起來像它的 read。 所以觀測到的比例永遠不會真的是零,而是壓在一個地板上。 中間橫跨一條警告:Dirichlet 的參數不允許是零, 所以結構零必須經過錯誤通道抬到地板之上,模型才寫得下去。 最下方是三者的處理方式對照。 讀法是:把這三種零混為一談,就會把錯誤產生的少數幾條 read 讀成一個新的 clone。 同樣是「這一格沒有 read」,成因有三種 ① 抽樣零 狀態存在,只是沒抽到 P(看不到) = (1 − q)ⁿ n = 3、q = 0.30 → 0.34 三分之一的機率誤判成「不存在」 n = 59 才降到 0.05 處理:讓似然自己算 ② 結構零 沒有任何 clone 帶這個基因型 q = 0 這是要推論出來的結論 不是輸入,也不是門檻判出來的 硬性排除等於把結論當成前提 處理:讓資料把 q 壓下去 ③ 錯誤地板 基因型不存在,但錯誤會造出它 q觀測 = (1−ε)·q + ε·r 觀測比例有一個下界 逐位點錯誤 + 家族誤標都在這裡 地板高度決定得出來的解析度下限 處理:寫進觀測通道 為什麼 ② 與 ③ 一定要分開寫:Dirichlet 的參數不可以是零 結構零給出 q = 0,但 Dirichlet 分量必須為正。所以結構零一定要 先經過 ③ 的通道抬到地板之上,式子才寫得下去 —— 這不是技術細節, 它就是「零不代表不可能」的數學形式。 三者的觀測一模一樣,都是「這一格計數為 0」 分得開它們的不是那個 0,是跨越深度、其他連鎖區段的證據,以及就地估到的錯誤率。 混為一談的後果:錯誤造出來的少數幾條 read,會被讀成一個新的 clone。 讀法:門檻只能把三種零一起丟掉;似然可以分別給它們不同的重量。
三欄的觀測一模一樣,都是「這一格計數為 0」。 分得開它們的不是那個 0,而是跨越深度、其他連鎖區段的證據,與就地估到的錯誤率。 第③欄那個地板就是上面那條式子的 δuru,h結構零在觀測上永遠到不了零, 所以「這個狀態不存在」這件事只能由它與地板的距離來講,不能由計數是不是 0 來講。

家族誤標尤其要成對估計,因為它連結同一連鎖視窗的兩個連鎖區段。 在 k2 時它是假狀態的主要來源:只寫逐位點錯誤的話, 全 0 背景上出現的 111 在模型眼中「錯誤造不出來」(約 ε3), 於是只剩一個解釋 —— 一支新的 lineage。而它真正的來源是隔壁那個家族。

觀測要經過幾道閘門:每個位點一道,最後兩個家族之間再交換一次 兩條並排的通道分別是同一個連鎖視窗的兩個單倍型家族。 每條通道由左到右經過相同的幾個階段。 起點是真實的分子組成。 接著是每個位點各一道錯誤閘門,閘門會把參考型讀成變異型,也會把變異型讀成參考型, 兩個方向的機率不一樣,所以閘門不是對稱的。 k 個位點就串 k 道閘門,把它們串起來就是公式裡那個張量積。 最後一道是家族交換閘門:大部分的分子留在自己的通道, 但有一小部分會被標到另一條通道去,圖上用兩條交叉的虛線表示。 終點是實際觀測到的計數。 圖的下方指出這件事的後果:因為交換閘門把兩條通道接在一起, 兩個家族必須一起估。分開估會讓譜系內比例每個連鎖區段都往零點五偏一點, 而且幾萬個連鎖區段偏的方向相同,那不是把譜變寬,是把整條譜平移。 讀法是:公式裡的三個符號各對應圖上一道閘門。 觀測要經過幾道閘門 家族 H1 家族 H2 真實組成 真實組成 位點 1 閘門 ε₁ , η₁ 位點 1 閘門 ε₁ , η₁ 位點 2 閘門 ε₂ , η₂ 位點 2 閘門 ε₂ , η₂ 這兩道串起來就是公式裡的 T = E₁ ⊗ E₂ (k 個位點就串 k 道) 家族交換閘門 δ 1 − δ δ 觀測計數 觀測計數 ε 是「把 REF 讀成 ALT」,η 是「把 ALT 讀成 REF」—— 兩個方向機率不同,所以閘門不對稱。 兩者都可以用同一個連鎖視窗裡的 germline 雜合位點就地估出來,不必外部參數。 交換閘門把兩條通道接在一起,所以兩個家族必須一起估。分開估會讓 ϱ 每個連鎖區段 都往 0.5 偏一點,而且幾萬個連鎖區段偏的方向相同 —— 那不是把譜變寬,是把整條譜平移。
每個位點一道錯誤閘門;最末一道為家族交換閘門, 少部分分子被標至另一條通道。交換閘門連結兩條通道,故兩個家族必須一併估計 —— 分開估的偏誤方向在幾萬個連鎖區段上相同,那不是把估計變寬,是整批平移 (圖下方的 ϱ 是連鎖區段內的分子比例,在本頁就是 νu)。 「輸入與前處理契約」中三種 HP3 處理之所以必須明選,也是這個閘門的問題: 它決定哪些分子進得了這兩條通道、哪些根本不進來。
實作風險:少數錯字為何會改變整個候選集合

既有實作把狀態表當成精確值:沒有逐 read 錯誤模型, 沒有接受一個位點為「已覆蓋」的最低品質門檻,也沒有「一個樣式要幾條 read 才收」的下限。 在頻率路線上,一個誤讀只是把某個 VAF 推偏一點點; 在這條路線上不是 —— 一個被數條 read 共享的誤讀會引入一個樣本從來沒有的狀態, 而那個狀態會改變整個候選集合,連帶改變樹的形狀、旗標與計數。 這就是為什麼本節的錯誤地板不是數值穩定用的小常數, 而是這條路線唯一擋得住這件事的東西;也是為什麼前處理契約的三個門檻 (覆蓋一個位點的最低品質、算連鎖的最低 read 數、保留一個連鎖視窗的最低跨越深度) 必須寫死 —— 它們決定哪些字母有資格進到狀態表裡。

第三個細節:只准 0 → 1 時,LOH 會被誤讀

四配子相容性與 perfect phylogeny 都預設突變只增不減,所以 一段發生 而失去某個突變的區域,在模型眼中會被描述成 「那個狀態從來沒有取得過」,而不是「取得後又失去」。

來源補充:既有實作的 Camin–Sokal 條件在哪裡漏掉了「喪失」

既有實作的 Camin–Sokal 條件同樣只准 01:復發(同一個突變在兩支各發生一次) 不被罰,但喪失完全不在模型的表達範圍內 —— 它不是被罰得很重,是連寫都寫不出來。 既有實作在整條鏈上沒有任何一處修正這件事,所以 LOH 區段的局部系譜會安靜地錯, 而且錯得跟一個正常結果長得一樣。

本規格的處理是把它變成明示的邊界,而不是默默承受: 拷貝數由全域基準提供,故每個連鎖區段都知道自己落在哪一種區段。 非中性區段的連鎖區段一律標 LOSS_UNMODELLED, 其局部系譜只作報告、不進任何樣本層統計量; 第一版並建議只納入 CN-neutral 的雜合區段。 這會減少可用連鎖區段(在 CN 變異廣泛的實體腫瘤可能減少一半以上), 所以納入與排除的連鎖區段數必須逐階段載明 —— 這正好也是連鎖率之外的第二個分層變數。

家族標號的方向不影響局部系譜

家族標號在每個 內獨立決定, 故仍引入 σu{,調} 並邊際化。但與前一篇不同的是, 這裡有一件可以放心的事:局部系譜的形狀完全不依賴 σu —— 連鎖區段內部的狀態集合與包含關係與家族標號無關,所以 σu 不進核心推論,只進註解層。

作用範圍補充:那 σu 到底在哪兩處還是要緊

兩處都在「把局部結果接到外面」的時候: 把節點對應到某一條 germline 單倍型(用於後文 caller 的單倍型特徵), 以及把節點對應到全域群。兩者都屬於註解層 —— 它們錯了,這個連鎖區段的狀態集合、比例與先後關係一個都不會變

與前一篇的唯一結構差異

項目前一篇(全域目標)本規格(局部目標)
局部比例 νu全域 (w,T,z)確定函數,沒有自由度自由參數,帶來自全域基準的先驗
換得的東西每個連鎖區段都對全域參數施加限制連鎖區段內部可以出現全域表達不了的結構
付出的代價局部只能表達全域已經有的群連鎖區段之間不再互相限制,後驗較寬
推論結構全域取樣的內層包住每個連鎖區段連鎖區段彼此獨立,可完全平行

這張表就是整份規格的決定點。 νu 自由,正是「提高局部解析度」的技術內容; 它同時也是「不再限制全域參數」的原因。兩件事是同一個改動的兩面,不能只要一面。

全域頻率基準如何成為獨立先驗

局部比例自由之後,20 條分子撐不起一個穩定的估計。 全域頻率譜在這裡仍然有用 —— 但只能單向進來。 可以這樣做的理由,正是前一篇為了讓似然相乘而建立的那個性質: 單變異連鎖視窗 S1 與多變異連鎖區段 S2 的 read 沒有交集

單向先驗:全域頻率譜只用單變異連鎖視窗擬合 最上方是一條全基因體的長條,上面散布著幾個較深的色塊。 長條的大部分是只含一個變異的連鎖視窗,稱為 S1,佔全部變異的九成; 深色塊是含兩個以上變異的連鎖區段,稱為 S2,佔約一成。 兩堆的 read 沒有交集,這正是前一篇用來把似然寫成兩個因子相乘的同一個性質。 中間是兩個方塊。左邊是全域基準:只用 S1 擬合全域頻率譜, 輸入是 S1 的 alt 計數、深度與拷貝數,輸出是純度、CCF 原子與權重、以及 overdispersion。 全域基準可沿用任一既有實作,不是本規格的貢獻, 唯一的硬性要求是 S2 的位點必須整批排除。 右邊是局部推論:每個 S2 連鎖區段各推論一次局部系譜, 輸入是該連鎖區段的稀疏狀態表,先驗來自全域基準, 輸出是局部狀態集合、比例、先後關係與旗標,連鎖區段之間彼此獨立、可以完全平行。 兩個方塊之間只有一個單向箭頭:局部不回饋全域,這是刻意切斷的回饋。 最下方是警告:如果全域基準用到了 S2 的 read,同一批 read 會先算進頻率項再算進局部項, 那正是前一篇用兩個因子相乘避免掉的重複計數。 另外拷貝數與純度用的是全基因體深度,其中含 S2 的 read, 這個界線有限但必須量出來並報告。 全域訊號怎麼用,才不會把同一批 read 算兩次 S₁:只有一個變異的連鎖視窗 S₂:兩個以上變異的連鎖區段(深色塊) 兩堆的 read 沒有交集 —— 這正是前一篇用來把似然寫成兩個因子相乘的同一個性質。 全域基準 · 只用 S₁ 輸入:S₁ 的 alt/depth/CN 輸出:純度、CCF 原子與權重 用哪一個既有實作都可以 沿用既有方法,不是本規格的貢獻 唯一的硬性要求 S₂ 的位點必須整批排除 單向 局部不回饋全域 (cut posterior) 局部推論 · 每個連鎖區段一次 輸入:該連鎖區段的稀疏狀態表 先驗:全域基準的輸出 輸出:局部狀態集合與比例    先後關係與旗標 連鎖區段之間彼此獨立 可以完全平行,沒有全域取樣 如果全域基準用到了 S₂ 的 read,這條路就白做了 那等於把同一批 read 先算進頻率項,再算進局部項 —— 這正是前一篇指出、 並且用「兩個因子相乘」避免掉的重複計數。 另一個必須量出來的邊界:CN 與純度的估計用的是全基因體深度,其中含 S₂ 的 read。 一個 20 kb 連鎖視窗通常佔其所屬區段不到 1%,這個界線有限,但必須量出來並報告。
上方是同一個切法:兩堆的 read 互不重疊。 因此全域基準只用 S1 擬合,其輸出對局部推論而言是一份獨立的先驗。 中間只有一個單向箭頭 —— 局部不回饋全域,是刻意切斷的。

全域頻率基準只使用 S1

全域基準是一個標準的 分群, 用哪一個既有實作都可以,它不是本規格的貢獻。它必須輸出四樣東西: 純度 ρ^;CCF 原子的位置 c^j 與權重 ω^j; 各原子的後驗不確定度;以及分層估到的 overdispersion φ^(d,CN)

唯一的硬性要求是:S2 的位點必須整批排除。 它是這條路線不重複計數的全部依據,而且可以寫成檢查程式: 全域基準的輸入位點集合與 S2 的交集必須為空。

這個要求的代價比紙上估計大得多,而且逐樣本差很多。 中篇以 Poisson 模型推得「約 9.5% 的變異落在多變異連鎖區段」,若真是如此, 排掉 S2 對頻率譜幾乎沒有影響。但既有實作實測到的是 40.5% 到 98.1%(見「輸入與前處理契約」)—— 在連鎖率高的樣本上, 排掉 S2 等於排掉大半個變異集合。 所以S1 剩幾個變異,是逐樣本必須先算、必須寫進報告的量, 不是一個可以忽略的尾數。

後果補充:S1 被排小之後,該傳什麼、什麼時候該直接棄權

S1 太小時全域基準的原子後驗會變寬,那份不確定度必須在局部推論中逐次傳遞, 不能只傳原子的位置 —— 只傳位置等於把一個很寬的估計當成確定值使用。

而在極端情況下 S1 可能小到撐不起分群。 那時全域基準就該直接棄權,全部連鎖區段標 UNLINKED_TO_GLOBAL, 而不是拿一個估不準的原子集合去當先驗 —— 後者會把全域的雜訊當成局部的先驗知識, 而且在輸出裡看不出來。

兩個邊界必須量出來,不能用講的:深度不是嚴格互斥,先驗不是硬約束

其一,深度不是嚴格互斥的。拷貝數分段與純度用的是全基因體深度, 其中含有 S2 連鎖視窗的 read。一個 20 kb 尺度的連鎖視窗通常佔其所屬 CN 區段不到 1%, 所以這個洩漏有界 —— 但界線要實際算出來寫進報告, 嚴格版本則在 CN 分段時把 S2 連鎖視窗一併排除,並比較兩者的差異。 其二,先驗不是硬約束。全域基準的原子若當成 ν 只能取的值, 局部解析度就歸零了;下面那個逃逸質量存在的唯一理由,就是不讓這件事發生。

先驗:原子加上逃逸質量

全域頻率譜當作局部比例的先驗:原子加上逃逸質量 三個並排的分布圖,橫軸都是某一個局部狀態的分子比例。 左圖是稀疏局部計數自己的似然:只有 20 條跨越分子時,這條曲線又寬又平, 單靠這個連鎖區段什麼都定不下來。 中圖是全域基準的全域頻率譜提供的先驗:幾根很窄的尖峰落在全域算出來的 CCF 位置上, 底下另有一條很低但不為零的水平線,代表逃逸質量, 它保留了「這一支 lineage 只在局部存在、全域頻譜上沒有對應的峰」這個可能。 右圖是兩者合起來的後驗:主峰被拉到某一個原子上而變窄, 同時仍留下一個較小的次峰,那是只有局部看得到的那一支。 最下方是警告:逃逸質量是這條路線唯一一個靠判斷的旋鈕。 設成零,局部結構會被強行貼回全域原子,解析度歸零,等於沒做局部推論; 設成一,等於丟掉全域資訊,20 條分子撐不起任何結論。 它必須預先登錄並做敏感度分析。 全域頻率譜怎麼變成局部比例的先驗 稀疏的局部計數 20 條分子,比例定不下來 似然很寬 單靠這 20 條,什麼都定不下來 全域頻譜給的先驗 原子 + 逃逸質量 尖峰的位置來自全域基準 那條低線是逃逸質量 合起來的後驗 收緊,但沒有把逃逸封死 主峰貼上其中一個原子 次峰是局部才看得到的那一支 逃逸質量是這條路線唯一一個靠判斷的旋鈕 設成 0:局部結構被強行貼回全域原子,解析度歸零 —— 等於沒做局部推論。 設成 1:等於丟掉全域資訊,20 條分子撐不起結論。它必須預先登錄並做敏感度分析。
左:20 條分子自己的似然又寬又平。 中:全域基準給的先驗是幾根窄峰加上一條不為零的底線。 右:後驗被拉緊,但那條底線保留了「這一支只在局部存在」的可能。

先在細胞尺度上寫先驗,再換算成分子比例。設節點 h 的細胞比例為 cu,h

p(cu,h)=(1λ)jω^j·Beta(cu,h;aj,bj)+λ·Beta(cu,h;a0,b0)

(aj,bj) 由全域基準第 j 個原子的後驗均值與變異決定; (a0,b0) 是弱的擴散成分。λ逃逸質量: 先驗上認為這一支不對應任何全域群的機率。 λ0 把局部結構強行貼回全域原子(解析度歸零); λ1 等於丟掉全域資訊。λ 必須預先登錄並做敏感度分析。

由細胞比例換算為連鎖區段內的分子比例,用的是前一篇那條把拷貝數放進分母的式子: 一個 clone 在該處的每一條拷貝各貢獻一份,分母是該連鎖區段全部的分子數。 正常細胞是其中一項,其局部狀態恆為全參考 —— 所以純度不是額外的換算因子。 若該處的 CN 或 multiplicity 未定,這一步就停在分子尺度,輸出標 CELL_SCALE_UNAVAILABLE,而不是套一個預設的二倍體值。

先後關係的先驗:只能軟用

logp(Lu)=(h,h')Eulogωanc(h,h')+κsplit·|Xu|

ωanc 由兩端節點所含變異在全域基準的群指派後驗算出: 若祖先端的群 CCF 不小於後代端,該邊獲得較高的先驗。 κsplit<0 是狀態數的複雜度罰則。 兩者都必須是的:全域基準的群指派本身有不確定度, 把它當成硬性排序會讓局部推論繼承全域的錯誤而且不留痕跡。

先後關係的先驗只能是軟的:全域基準給的是重疊的後驗,不是一條排序 左上格說明全域基準交出來的東西。含節點 h 的那些變異被指派到群 A, 細胞比例的後驗中心是 0.42、區間 0.24 到 0.60; 含節點 h′ 的那些變異被指派到群 B,中心 0.35、區間 0.13 到 0.57。 兩個區間大幅重疊,重疊的那一段被標了出來。 所以「A 在 B 之前」不是一個事實,是一個機率,這裡是 0.68。 右上格把那個機率變成邊的先驗權重:由 h 指向 h′ 的邊得到 log 0.68, 反方向得到 log 0.32,兩者只差 0.75 nat,沒有任何一個方向被封死。 中間一列把 0.75 nat 跟這個連鎖區段自己的觀測放在一起比: 一次共現觀測,也就是預期 0.2 條而實際看到 5 條,值約 12 nat, 長條長了十六倍。所以局部觀測想翻轉先驗給的方向,輕而易舉。 最下方是硬用的後果:把 0.68 當成 1、0.32 當成 0, 就有三成的機率整個連鎖區段的先後從一開始就反了, 而局部後驗看起來一樣自信,輸出裡看不出來。 讀法是:先驗只調初始傾向,它封不死方向,也不該封。 先後關係的先驗,為什麼只能是軟的 ① 全域基準給的不是排序 群 A = 含節點 h 的變異 群 B = 含節點 h′ 的變異 群 A 0.42 群 B 0.35 0 0.4 0.8 重疊這麼多,所以那是機率,不是事實 ② 那個機率就是這條邊的權重 h h′ log 0.68 log 0.32 兩個方向只差 0.75 nat —— 沒有任何一個方向被封死 0.75 nat 有多大?跟這個連鎖區段自己的觀測比一下 先驗給的方向傾向 0.75 nat 一次共現觀測(預期 0.2 條、實際 5 條) ≈ 12 nat 硬用的後果:錯了不會留下痕跡 把 0.68 當成 1、0.32 當成 0,就有三成的機率整個連鎖區段的先後從一開始就反了,而局部後驗看起來一樣自信。
「軟」在這裡是一個可以算出來的量,不是態度。 全域基準交出來的兩個群,細胞比例的後驗大幅重疊, 所以「A 在 B 之前」是機率 0.68 而不是事實; ωanc 把這 0.68 換成邊的權重,兩個方向只差 0.75 nat。 中間那兩條長條說明這有多小:一次共現觀測(預期 0.2 條、實際 5 條)約 12 nat, 是它的十六倍 —— 局部觀測要翻轉先驗給的方向,一次就夠。 反過來,若把 0.68 當成 1 硬用,三成的連鎖區段先後從一開始就反了, 而且局部後驗看起來一樣自信,輸出裡完全看不出來。

為什麼不做完整的聯合模型:那正是前一篇與整合篇的規格。 本規格刻意切斷回饋(cut posterior),換三件事 —— 連鎖區段之間完全獨立因而可以平行、局部比例不會被全域參數壓平、 以及每一個連鎖區段的結論可以單獨檢視與反駁。 代價是這個後驗不是任何聯合模型的邊際分布, 報告中必須如此稱呼,不得寫成「聯合估計」。

候選模型與輸出旗標

每個連鎖區段的推論目標是 Xu 的後驗。 候選狀態集合由「觀測到的樣式 ∪ 相容性所需的中間狀態」產生, 再對每個候選算邊際似然(ν 依上節先驗積掉),最後正規化成後驗。 Xu 不取單一最大值,而是輸出前若干個候選與各自的質量。

每個連鎖區段除了那份後驗,還帶一組旗標。十二個旗標分成三類, 只有第一類是產出,另外兩類都是「這個連鎖區段的話只能講到哪裡」

  • 與全域基準的關係(四個):REFINES_GLOBALGLOBAL_CONSISTENTLOCAL_ONLY_LINEAGECONTRADICTS_GLOBAL —— 第一個是本規格的主要產出。
  • 證據不足以作答(五個):FLOOR_LIMITEDORDER_UNRESOLVEDBRANCH_UNDERPOWEREDPARTIAL_DOMINATEDSTATE_CAP_REACHED —— 每一個都代表「沒看到」,不代表「不存在」
  • 品質訊號(兩個):INCOMPATIBLEKATAEGIS_DOWNWEIGHTED —— 它們指向地板、誤標或取樣偏性,不是新發現。
旗標全表:十二個旗標各自的觸發條件與讀法(實作時逐欄對照)
旗標觸發條件讀法
REFINES_GLOBAL後驗有足量質量落在「至少兩個節點,其所含變異被全域基準高信心指派到同一群」的候選上本規格的主要產出:全域表達不了的結構
GLOBAL_CONSISTENT後驗主質量的節點與群一一對應局部只是把全域結果再確認一次
LOCAL_ONLY_LINEAGE某節點的比例後驗主要由逃逸成分承接該支在全域頻率譜上沒有對應的峰
CONTRADICTS_GLOBAL局部包含關係與全域基準的鴿籠排序相反診斷量:多半是地板、誤標或全域基準的群指派有問題
FLOOR_LIMITED有效分子數不足以把該狀態與地板分開不是「不存在」
ORDER_UNRESOLVED雙狀態格的跨越深度過低節點存在但先後未定
BRANCH_UNDERPOWERED判為無分支,但分子數與地板不足以看到一支佔 5% 的旁支「沒有分岔」在這裡只代表沒看到
PARTIAL_DOMINATED該連鎖區段的證據主要來自部分覆蓋的分子唯一性多半來自簡約性與先驗,不是資料
INCOMPATIBLE四配子檢定失敗品質訊號,不是新 lineage
KATAEGIS_DOWNWEIGHTED該連鎖區段被判定為局部超突變叢整叢降權為一個有效觀測
STATE_CAP_REACHED候選狀態集合觸及列舉上限不得在截斷後仍回報通過
一個連鎖區段定得下來什麼、定不下來什麼,以及每一項各由哪個旗標承接 左格是這個連鎖區段定得下來的三件事,全部由該連鎖區段自己的分子決定: 有哪幾種狀態,這裡是全參考、只帶第一個變異、以及兩個雙變異狀態共四種; 誰在誰之前,只帶第一個變異的那個狀態是另外兩個的祖先; 以及每一種各佔多少分子,依序是 0.66、0.19、0.05、0.07。 三件事都落在「一個連鎖視窗、一條染色體拷貝」之內。 右格是同一個連鎖區段定不下來的四件事,每一項後面掛著承接它的旗標: 某一支對應到哪一個全域群,掛 UNLINKED_TO_GLOBAL; 分子比例換算成細胞比例是多少,缺純度與拷貝數,掛 CELL_SCALE_UNAVAILABLE; 有沒有第四支被錯誤地板吃掉,掛 FLOOR_LIMITED; 某個沒被觀測到的狀態是真的不存在還是沒抽到,掛 ORDER_UNRESOLVED。 最下方是這張圖的重點:旗標不是免責聲明,是欄位。 右格每一項都有名字,所以「這條流程對多少比例的資料拒絕作答」查得出來; 被沉默補齊的東西在統計量上是隱形的。 一個連鎖區段交出去的那一列,說了什麼、沒說什麼 定得下來 —— 用它自己的分子 000 100 110 101 有哪幾種狀態 000 · 100 · 110 · 101 誰在誰之前 100 → 110 · 100 → 101 各佔多少分子 .66 · .19 · .05 · .07 三件事都在「一個連鎖視窗、一條拷貝」之內 —— 沒有用到任何連鎖區段以外的東西 定不下來 —— 每一項各有一個名字 110 那一支對應哪一個全域群? UNLINKED_TO_GLOBAL 0.05 換算成細胞比例是多少? CELL_SCALE_UNAVAILABLE 有沒有第四支被錯誤地板吃掉? FLOOR_LIMITED 沒看到 011,是不存在還是沒抽到? ORDER_UNRESOLVED 旗標不是免責聲明,是欄位 右格每一項都有名字,所以「對多少比例的資料拒絕作答」查得出來;被沉默補齊的東西在統計量上是隱形的。
把十二個旗標讀成一張對照:左格三件事全部由該連鎖區段自己的分子定出來, 右格四件事它定不下來 —— 而每一項各對應一個旗標。 兩格的分界就是上述估計範圍:問題只要越出「一個連鎖視窗、一條拷貝」, 答案就不在左格。這也是為什麼旗標必須是欄位而不是註解: 右格每一項都有名字,「這條流程對多少比例的資料拒絕作答」才查得出來。

REFINES_GLOBAL 是這條路線的操作型定義: 「比全域方法解析度高」這句話在這裡等於「有多少個連鎖區段掛上這個旗標, 而且顯著多於虛無分布」。後文「驗收設計」定義這個虛無分布的產生方式。 沒有這個定義,前面所有論述都不可檢驗。

跨連鎖區段的彙整邊界

前一篇的規則是「可以合併的是機率,不是標籤」。 在本規格下更嚴格:連機率都不合併,因為 νu 是每個連鎖區段自己的參數, 不同連鎖區段的後驗沒有共同的參數可以相乘。局部拓撲當然更不可以拼接成一棵大樹 —— 局部標籤只在該連鎖區段內有定義。

跨連鎖區段的產出可否條件
連鎖區段層級的目錄(每個連鎖區段一列 + 旗標)本規格的主要交付物
樣本層統計量:REFINES_GLOBAL 的個數、局部分岔比例、節點數分布必須同時報告驗收設計的虛無分布
把局部樹拼成一棵全基因體的樹不可標籤跨連鎖區段無定義,且不同連鎖區段看的位點集合不同
把成對的祖先/互斥關係匯出給全域方法有條件使用它的全域擬合必須排除 S2 的 read,否則就是重複計數
把節點數加總當成全基因體的群數不可節點是分子狀態,且各連鎖區段互不對齊
三層資訊:全基因體只有邊際、phase block 知道 cis/trans、read 跨距內才數得到共現 三層由下而上代表資訊愈來愈完整,但涵蓋範圍愈來愈小。 最下層是全基因體,任何兩個位點之間都只有各自的邊際頻率,沒有共現關係。 中間層是 phase block,典型長度一到五個 Mb,在這個範圍內兩個位點是在同一條染色體 還是分開在兩條,是已知的,即使沒有任何一條 read 同時蓋到它們。 最上層是 read 跨距,典型二十個 kb,只有在這個範圍內才數得出「同時帶有兩個變異的分子有幾條」。 右側標出每一層在一個典型樣本裡各有多少筆可用觀測: read 跨距內的聯合計數約數百到數萬筆,phase block 內的 cis/trans 判定約多一百倍, 全基因體邊際則涵蓋全部變異。 讀法是:read 長度限制的是「數得到共現」,phase block 限制的是「知道在不在同一條染色體上」, 這兩件事的範圍差了兩個數量級,常被混為一談。 三層資訊:範圍愈小,資訊愈完整 ③ 全基因體 只有邊際頻率(VAF、β)—— 傳統路線整個住在這一層 全部變異 數百萬筆 ② phase block(1–5 Mb) cis/trans 已知,但數不到共現分子數 cis/trans 判定 約 7 萬筆 ① read 跨距(20 kb) 聯合計數看得到 聯合計數 數百到數萬筆 資訊最完整 涵蓋最廣 最常見的誤解:把 ① 與 ② 當成同一件事。read 長度限制的是「數得到共現」, phase block 限制的是「知不知道在同一條染色體上」—— 兩者範圍差約一百倍。
read 跨距限制的是能否計數共現, 限制的是能否確定兩個位點是否位於同一條染色體。 本規格的每一列都只能自最上層產生,而該層亦為三者中範圍最小者 —— 這就是「不可拼接成一棵大樹」的物理來源,不是保守的選擇。

輸入與前處理契約

局部模型假設連鎖區段與稀疏狀態表已經建立。 前處理沿用既有工具,但其輸出直接決定候選狀態與覆蓋遮罩; 因此工具版本、品質門檻、HP3 處理與連鎖定義都是模型輸入契約的一部分。

下列參數會改變狀態表、連鎖區段與候選集合,因此必須與結果一起記錄, 以保證前處理可重現。

工具鏈與必須釘住的參數

既有的鏈是:正常樣本 germline calling() → 定相 → 腫瘤樣本 somatic calling() → 體細胞標記。兩個步驟各列了兩個可選工具, 但沒有記錄實際用了哪一個、是否取交集,也沒有任何版本號。 這不是文件疏漏,是重跑不出同一份狀態表的直接原因 —— 狀態表換了,連鎖區段、候選集合與每一個下游數字都跟著換。

清單:五項必須釘住的設定,以及各自不釘住會壞在哪
必須釘住的不釘住的後果
germline/somatic caller 的身分、版本,以及是否取交集候選位點集合改變 → 連鎖區段改變 → 全部數字不可比
判定「這條 read 覆蓋這個位點」的最低 base quality 與 mapping quality決定 XRA 的分界,直接改變覆蓋遮罩
沒有 HP 標籤的 read 怎麼處理丟掉與併入是兩種方向相反的偏誤,既有實作未載明
兩個 sSNV 要有幾條共同覆蓋的 read 才算連鎖既有實作沒有下限,所以一條 read 就能開出一個連鎖視窗
一個連鎖視窗要有多少跨越深度才保留同上;下限缺席時,證據極薄的連鎖區段與紮實的連鎖區段在計數上等重
單倍型標籤的五個值,以及連鎖視窗如何由讀序連鎖的傳遞閉包長出來 上排三格說明體細胞單倍型標記輸出的標籤詞彙恰好只有五個值。 左格是 germline 的兩條:HP1 與 HP2,它們是定相軟體給的兩條單倍型, 標號只在這個 phase set 內有效。 中格是可歸因的體細胞改變:HP1-1 與 HP2-1, 表示該分子的體細胞改變可歸因於第一個數字所指的那條單倍型,詞彙到此為止。 右格是無法歸因的 HP3:兩條單倍型都歸不上去, 所以「一個連鎖區段只看得到一條染色體拷貝」這個假設對它並不成立。 中排說明連鎖視窗的定義:在同一個 phase set 內, 只要有某一條讀序同時覆蓋至少兩個體細胞變異,該段就構成一個連鎖視窗; 若另一條讀序疊到已連鎖的位點又碰到新的位點,兩段就合併成更長的連鎖視窗。 圖中左邊三條讀序彼此重疊,把五個位點連成一個連鎖視窗; 右邊兩條之中,一條連起兩個位點形成第二個連鎖視窗,另一條只覆蓋單一位點因而沒有連鎖。 因此位點數 k 數的是位點而不是讀序,一個由數條讀序接起來的連鎖視窗可能一條全跨分子都沒有。 最下方是兩件容易被誤讀的事: 後綴不是獲得序列,1-1 是一個標籤而不是「1 再加一步」,不認得的標籤一律排除; 搜尋成本由 q 決定而不是 k,q 是該家族內真的有變化的位點數,恆有 q 小於等於 k。 標籤只有五個值,連鎖視窗由讀序連鎖長出來 germline 兩條 HP1 HP2 定相軟體給的兩條 單倍型,標號只在 這個 phase set 內有效 可歸因的體細胞改變 HP1-1 HP2-1 體細胞改變可歸因於 第一個數字那條單倍型 詞彙就到此為止 無法歸因 HP3 兩條都歸不上去 「一個連鎖區段只看得到 一條拷貝」對它不成立 連鎖視窗 = 同一個 phase set 內、讀序連鎖的傳遞閉包 W₁ · k=5 W₂ · k=2 沒有連鎖 k 數的是位點不是 read —— 一個由數條 read 接起來的連鎖視窗,可能一條全跨分子都沒有。 兩件會被誤讀的事 後綴不是獲得序列:1-1 是一個標籤,不是「1 再加一步」;不認得的標籤一律排除。 搜尋成本由 q 決定不是 k:q 是該家族內真的有變化的位點數,恆有 q ≤ k。
上排是標籤詞彙恰好五個值,其中 HP3 是本規格的真問題。 下排是連鎖視窗的定義:不是固定寬度,是讀序連鎖的傳遞閉包。 最下方兩件事看似細節,但兩者都會安靜地改變結論。

標籤詞彙只有五個值,而 HP3 是一個真的問題

輸出的詞彙恰好121-12-13 五個值。 1-1 表示這條分子屬於 germline 單倍型 1,且帶有可歸因於它的體細胞改變; 3 表示體細胞改變無法歸因於任何一條 germline 單倍型。 沒有更長的後綴,所以後綴不是一條獲得序列 —— 不可以把它讀成「先 1 再加一步」。不認得的標籤一律排除在所有分組之外。

HP3 破壞的正是「一個連鎖區段只看得到一條拷貝」

估計單位的核心假設是:連鎖區段內部不必處理兩條拷貝的混合。 HP3 的分子不滿足它,因為它們的體細胞改變兩條都歸不上去。 三種處理各有代價,必須明選其一並在輸出載明實際被影響的量: 整批排除(最保守,但在 LOH 與高拷貝區會丟掉大量證據); 當成獨立的第三個連鎖區段(形狀對,但那個連鎖區段的 CCF 換算沒有分母); 當成缺失並在兩個家族之間邊際化(統計上正確,成本最高)。 既有實作採第一種,但沒有報告被排除的量 —— 沒有那個量, ν 的分母就是錯的,而且錯得沒有跡象。

連鎖視窗不是固定寬度,是讀序連鎖的傳遞閉包

既有實作的連鎖視窗定義比「固定寬度 20 kb 視窗」精確得多,也更該沿用: 在同一個 內,凡有某條 read 同時覆蓋至少兩個 sSNV,該段即為一個連鎖視窗; 若另一條 read 疊到已連鎖的位點又碰到新的位點,兩段合併成更長的連鎖視窗。三個推論:

  • k 數的是位點不是 read,所以一個由數條 read 接起來的連鎖視窗 可能一條全跨分子都沒有 —— 這正是覆蓋遮罩必須逐條保留的原因;
  • 連鎖視窗不跨 phase set,因此所有狀態比較都在同一個定相框架內 —— 這是「不同 block 的 H1 不是同一條」那條警告的實作形式;
  • 一個連鎖視窗依家族切成至多兩個連鎖區段,所以連鎖區段數大於連鎖視窗數, 兩者不可混用為同一個分母。
兩種「沒看到」:真的沒有那種細胞,與沒有 read 跨得到 左邊是跨越深度隨距離衰減的曲線。 兩個位點靠得愈近,同時蓋到它們的 read 就愈多;距離接近讀長時,跨越深度掉到接近零。 圖上標出真實例子的三個位點對,跨越深度分別是二十、十七與三。 右邊說明問題所在:演算法看到某個狀態沒有出現,有兩種完全不同的原因。 第一種是真的沒有細胞帶著那個組合,那是生物學結論。 第二種是無 read 同時覆蓋該二位點,屬於未觀測。 目前的做法把兩者當成同一件事,於是把看不到當成不存在。 最下方是修正方式:每一個位點對先用自己的跨越深度算檢定力, 檢定力不足的對標成未定,不允許它去約束樹的形狀,並且在報告裡列出來。 讀法是:缺席要有足夠的觀測撐著,才能當成證據。 兩種「沒看到」 跨越深度隨距離掉得很快 兩個位點的距離 → 跨越深度 n=20 n=17 n=3 檢定力門檻 同樣是「這個狀態沒出現」 ① 真的沒有細胞帶著那個組合 這是生物學結論,可以拿來決定樹的形狀。 ② 無 read 同時覆蓋該二位點 這只是看不到,不能拿來決定任何事。 目前的做法把兩者當成同一件事 修正:每一對先過檢定力這一關 用該位點對自己的跨越深度算檢定力;不足的標成「未定」, 不允許它的「缺席」去約束樹,並且在報告裡逐條列出來。 預期效果:目前被歸進「單層無分支」的連鎖區段,會有一部分正確地移到「未解析」。
「此狀態未出現」有兩種成因:該類細胞確實不存在, 或無 read 跨越該對位點。既有實作沒有設連鎖下限,所以兩者混在一起; 似然寫法讓第二種成因自動只貢獻很少的證據,不需要門檻就分得開 —— 但前提是那條 read 有沒有跨過去,必須記下來而不是先併掉。
定義補充:前處理還要交出一個量 —— 作用位點數 q(搜尋成本要用它,不是 k

前處理交出去的不只是連鎖區段本身,還有一個決定推論成本的量, 而它必須在這裡就算出來,因為它只有看得到狀態表的時候算得出來: 作用位點數 q, 即在該家族內真的有變化的位點數。某個位點若該家族每條 read 都是同一個 allele, 它不產生任何座標,故 qk;用 k 估搜尋成本會系統性高估。 本頁凡涉及狀態空間、頂點、遮罩與上限之處,一律以 q 為準。

連鎖率才是真正的閘門,而它逐樣本差很大

中篇以 Poisson 模型推得「約 9.5% 的變異落在多變異連鎖區段」。 實測不是這樣,而且它的變動幅度是這條路線最重要的一個經驗事實。 既有實作在七個資料集上量到:落入任一連鎖視窗的 sSNV 位點比例由 40.5% 到 98.1%,超過兩倍,而且不依癌別排序 —— 四個乳癌資料集自己就橫跨了幾乎整個範圍。

落入任一連鎖視窗的體細胞變異比例,在七個資料集之間差超過兩倍 七條橫向長條,每條是一個資料集,長度是該資料集中落入任一分析連鎖視窗的 體細胞單核苷酸變異位點比例,右側另列該資料集的變異總數。 由低到高分別是:HCC1395_NYGC 四成零五、HCC1395_HKU 四成五七、 H1437 六成九四、H2009 九成二五、HCC1937 九成七七、HCC1954 九成七七、 COLO829 九成八一。最低與最高之間相差超過兩倍,而且不依癌別排序: 四個乳癌資料集自己就橫跨了幾乎整個範圍。 最前面兩條是同一株細胞株經過兩條不同流程的結果,兩者只差 5.2 個百分點, 所以其他資料集之間五十個百分點以上的落差不是技術雜訊。 因此連鎖率必須逐樣本先算再決定要不要跑,它是分層報告的第一個分層變數, 而不是事後的說明。 連鎖率才是閘門,而它逐樣本差很多 資料集 落入任一連鎖視窗的 sSNV 位點比例 比例 sSNV 總數 HCC1395_NYGC 40.5% 79,739 HCC1395_HKU 45.7% 79,687 H1437 69.4% 77,080 H2009 92.5% 154,465 HCC1937 97.7% 18,690 HCC1954 97.7% 22,400 COLO829 98.1% 37,788 0 100% 同一株細胞株、兩條流程,只差 5.2 個百分點 所以其餘五十個百分點以上的落差不是技術雜訊。連鎖率要逐樣本先算,它是第一個分層變數。
同一株細胞株經兩條流程只差 5.2 個百分點, 所以其餘五十個百分點以上的落差不是技術雜訊。 Poisson 模型給的單一數字在這裡沒有用:真正該做的是逐樣本先算這個比例。

連鎖進來之後,多數連鎖區段只有兩個位點

第二個實測事實同樣改變了規格該長什麼樣:k=2 是七個資料集中六個的最大單一類, 但集中程度由 76.7% 到 16.8%,只有 H2009 把 k 一路填到上限 12。 換句話說,這條路線大部分的產出,是一對位點之間的關係,而不是多層系譜。

連鎖區段實際長什麼樣:多數只有兩個位點,多數形狀是鏈 左欄是每個連鎖視窗含幾個體細胞變異位點。 位點數等於二是七個資料集中六個的最大單一類,但集中程度差很多: HCC1395_NYGC 有七成六七的連鎖視窗只有兩個位點,H2009 只有一成六八, 而且只有 H2009 把位點數一路填到上限十二。 因此多數連鎖區段講的是一對位點之間的關係,要談多層系譜得位點數至少三個。 右欄是重建出來的形狀組成。無分支的類別在每個資料集都佔多數, 由七成一七到八成八五,有分支的類別到處都是少數。 原因寫在下方的方塊裡:一條鏈只要一個觀測到的樣式就建得起來, 一個分岔卻要兩個互不包含的樣式, 所以分岔稀少反映的是這個連鎖區段帶了多少不同的樣式證據,不只是底下的結構。 最下方指出這件事限制了什麼、又沒有限制什麼: 它限制了深度,多數連鎖區段只講得出一對位點的先後; 但它沒有限制可偵測性,前面那個證據預算在兩個位點時就成立, 位點數增加買到的是深度,不是分不分得出來。 連鎖區段實際長什麼樣 一個連鎖視窗有幾個位點 k=2 在七個資料集中有六個是最大類 HCC1395_NYGC 76.7% H2009 16.8% 深色 = 只有兩個位點的連鎖視窗 只有 H2009 把 k 一路填到上限 12 多數連鎖區段講的是一對位點的關係 重建出來的形狀 無分支類在每個資料集都佔多數 無分支 71.7%–88.5% 有分支:少數 為什麼分岔這麼少 一條鏈只要一個觀測到的樣式 一個分岔要兩個互不包含的樣式 稀少反映的是樣式證據量 這限制了什麼,又沒有限制什麼 限制了深度:多數連鎖區段只講得出一對位點的先後,談不上多層系譜。 沒有限制可偵測性:前面那個證據預算在 k=2 就成立 —— k 變大買的是深度。
左欄:多數連鎖視窗只有兩個位點,但集中程度差很多。 右欄:無分支的形狀在每個資料集都佔七到九成,而且原因是機械性的 —— 一條鏈只要一個樣式,一個分岔要兩個互不包含的樣式。

這件事必須誠實地放進定位,但它不動搖前面那個證據預算,兩者常被混在一起: k=2 佔多數限制的是深度(多數連鎖區段只講得出一對突變的關係), 不是可偵測性 ——「預期 0.2 條、實際 5 條」在 k=2 同樣成立, 而分辨兩支等值 CCF 的 lineage 本來就只需要一對位點。

逐項對照:k=2 佔多數改變了什麼、沒有改變什麼
k=2 佔多數影響
限制了深度多數連鎖區段只講得出「這兩個突變共不共存、誰在前」,談不上多層局部系譜
沒有限制可偵測性開頭那個「預期 0.2 條、實際 5 條」在 k=2 同樣成立 —— 它比的是「某個共現狀態存在」與「只有錯誤地板」,與位點數無關
REFINES_GLOBAL不影響:分辨兩支等值 CCF 的 lineage 只需要一對位點的共現或互斥
對交付物的描述要改:主要交付物是「全基因體的成對分子關係目錄」,深層局部系譜是其中的少數

連帶的還有兩個直接後果。其一,caller 的局部系譜特徵覆蓋率不是固定的一成 —— 在高連鎖率的樣本上它可以覆蓋大部分候選,在低連鎖率的樣本上則接近無效。 其二,連鎖率是分層報告的第一個分層變數,必須在跑之前先算、 並用它決定這個樣本值不值得跑,而不是事後拿來解釋結果。

推論演算法與計算預算

  1. 前處理。依連鎖區段輸出稀疏狀態表,每列為 (連鎖區段、phase set、位點集合、覆蓋遮罩、字母樣式、計數)。遮罩不得先併掉。
  2. 就地校準。由 germline-only 連鎖區段、matched normal 與已知重複區估 逐位點錯誤率與家族誤標率,成對估計並分層借力。
  3. 全域基準。只用 S1,輸出原子、權重、純度與 φ^, 並斷言與 S2 的位點交集為空。
  4. 候選狀態集合列舉。先取計數高於地板的樣式,再補相容性所需的中間狀態。 狀態空間是 2qq=2 時 4 格,q=12 時 4,096 格 —— 所以上限必須存在。既有實作用的兩個上限與它們的實際行為見下。
  5. 邊際似然。對每個候選,ν 依上述全域頻率先驗積掉。 先驗是 Beta 混合、似然是 multinomial,非共軛, 故以每個候選數十個 quadrature 或 Monte Carlo 點計算並回報數值誤差。 這一步取代既有實作的 read-AF 排序:既有那個分數不只排序,它會先砍掉 30.03% 的最小成本解(見證據節),而且它沒有任何拷貝數校正 —— 當一個連鎖區段的每個位點都落在最高 read-AF 時,分數退化、全部並列。 換成邊際似然之後,不同形狀比較的是對同一組計數的解釋能力, 而且候選整組留著、由後驗質量表達,不先砍。
  6. 全域基準不確定度的傳遞。由全域基準後驗抽 S(ρ^,c^,ω^),逐組重算再平均。 S 過小會低估區間寬度,須在收斂契約中登錄。
  7. 輸出。每個連鎖區段一列,含前若干個 Xu 候選與質量、 節點比例的區間、旗標與有效分子數。
read-AF 差值總和有形狀偏誤:星狀永遠得零分,串接永遠贏 目前排序候選樹的分數,是把樹上每一組「祖先與後代」的 read-AF 相減再全部加起來。 問題在於相加的項數本身由樹的形狀決定。 圖上三個形狀由左到右:三個突變串成一條線、一條線加一個分支、三個都從根長出來的星狀。 它們的祖先後代配對數分別是三、一、零。 因此串接的分數是第一個減第三個的兩倍,中間的形狀只有一項, 而星狀因為沒有任何祖先後代配對,分數恆等於零。 結論寫在下方:只要 read-AF 不完全相等,串接的分數就是正的, 而星狀永遠是零,所以當最小成本候選裡同時有這兩種形狀時,分支永遠贏不了。 觀測到的最多的類別正好是多層無分支,佔三成八到五成三, 這個偏誤剛好往那個方向推。 最下方是替代方案:改用機率模型比較各個形狀解釋同一組 read-AF 的能力, 而不是加總差值。 讀法是:分數要能跨形狀比較,才不會讓形狀自己決定勝負。 分數的形狀偏誤 分數=把樹上每一組「祖先→後代」的 read-AF 相減,全部加起來。項數由形狀決定。 串接 祖先後代配對:3 組 2(a₁ − a₃) 一線加一分支 祖先後代配對:1 組 a₁ − a₂ 星狀(全分支) 祖先後代配對:0 組 恆等於 0 只要 read-AF 不完全相等,串接就是正分,星狀恆為 0 —— 所以最小成本候選裡同時有這兩種形狀時,分支永遠贏不了 觀測到最多的類別正好是「多層無分支」(38–53%),而這個偏誤剛好往那個方向推。 替代方案:用機率模型比較各形狀解釋同一組 read-AF 的能力,而不是加總差值。
三種形狀的祖先後代配對數分別為 3、1、0。 串接得到正分,星狀恆為 0 —— 所以最小成本候選中同時存在此二形狀時,分支形狀恆不獲選。 而分岔正是拆峰能力唯一的來源,所以這個偏誤系統性地移除的, 剛好就是本規格最想留下來的那一類。
局部推論的七步推論流程、兩個上限與實測成本 左側是局部推論的七個步驟,由上而下:輸出稀疏狀態表、就地校準兩個錯誤率、 跑全域基準、列舉候選狀態集合、算邊際似然、把全域基準的不確定度傳下來、輸出。 其中第四步與第五步用深色標出,因為只有這兩步與既有實作不同; 第三步是沿用,不是本規格的貢獻。 右側三張卡分別說明三件會影響實作的事。 第一張是兩個上限:搜尋節點上限一千,實測有一成二的連鎖區段撞到它; 候選家族上限十萬,實測從來不觸發。兩者都是工程設定不是數學結果, 必須寫進 provenance,而撞到上限的連鎖區段要標記棄權並且仍然留在分母裡。 第二張說明第五步取代掉的是既有實作的 read-AF 排序: 那個分數會先砍掉三成的最小成本解,而且沒有任何拷貝數校正; 改成邊際似然之後候選整組留著,由後驗質量表達。 第三張是既有實作量過的成本:九萬多個連鎖區段兩分鐘、記憶體不到四百 MB, 而成本的變異來自作用位點數的分布,不是連鎖區段的總數 —— 跨資料集差約十九倍。 讀法是:這條流程沒有全域取樣包在外層,所以它是尷尬平行的, 成本隨連鎖區段數線性成長。 局部推論的七步,以及成本落在哪裡 深色的兩步才是與既有實作的差異;③ 是沿用,不是貢獻 局部推論的七步 ① 前處理:稀疏狀態表,覆蓋遮罩不得先併掉 ② 就地校準:逐位點錯誤率與家族誤標率,成對估 ③ 全域基準:只用 S₁,斷言與 S₂ 的位點交集為空 ④ 候選列舉:狀態空間 2^q,q=12 時 4,096 格 ⑤ 邊際似然:ν 依先驗積掉,候選整組留著不先砍 ⑥ 傳遞全域基準的不確定度:抽 S ≈ 50 組逐組重算 ⑦ 輸出:候選與質量、節點比例區間、旗標、分子數 ④⑤ 是方法核心;其餘五步既有實作都已具備。 沒有任何一步把全域取樣包在外層。 兩個上限與棄權 κ_node = 1,000 → 12.47% 的連鎖區段撞到(實測) κ_fam = 100,000 → 實測從不觸發;兩者皆為工程設定 ⑤ 取代舊的 read-AF 排序 舊分數先砍掉 30.03% 的最小成本解 而且沒有任何拷貝數校正 新做法:候選整組留著 由後驗質量表達,不先砍 成本:既有實作已經量過 98,955 段 · 122.03 s · 356.7 MB 13,773,565 個搜尋節點,平均 139.2 跨資料集差 19 倍:292.0 對 15.5 要控成本,該控的是 q 的分布,不是連鎖區段總數 —— 成本隨連鎖區段數線性成長。
左欄七步由上而下。只有 ④⑤ 與既有實作不同, ③ 是沿用而非貢獻,其餘四步既有實作都已具備。 右上是兩個上限的實測行為:節點上限有 12.47% 的連鎖區段撞到,家族上限從不觸發 —— 兩者都是工程設定,不是關於 q 的數學結果。 右中是 ⑤ 取代掉的東西:舊的 read-AF 分數會先砍掉 30.03% 的最小成本解且無拷貝數校正。 右下是實測成本;成本的變異來自 q 的分布,不是連鎖區段總數

上限、棄權,以及棄權必須留在分母裡

既有實作用兩個上限:搜尋節點上限 κnode=1,000 與候選家族大小上限 κfam=100,000。實測結果是 只有節點上限真的會觸發 —— 帶變異的連鎖區段中有 12.47% 撞到它。 兩個上限都是這套輸入與這台機器上的工程設定,不是關於 q 的數學結果; 換一台機器或換一個搜尋順序,數字就會移動,所以它們必須寫進 provenance。

撞到上限的連鎖區段要標記並計數,不可以丟掉

這是既有實作做對、而且值得整條抄過來的一件事: 撞上限的連鎖區段得到一個明示的棄權標記,而且仍然佔據每一個比例的分母。 被無聲丟棄的連鎖區段在完全相同的統計量上是隱形的 —— 報告中將無法判斷流程對多少比例的資料拒絕作答。 另有一條連帶的紀律:同一份報告至少有兩個分母 (全部連鎖區段、帶變異的連鎖區段),兩者回答不同的問題, 任何百分比都必須帶著自己的分母出現。

計數補充:同一個候選底下有幾棵等價的樹,不必抽樣(它沿頂點分解)

上限管的是「候選列不列舉得完」;另一件不同的事是列舉完之後, 同一個候選底下有幾棵等價的樹。 這個數目不需要抽樣,因為它沿頂點分解。 給定一個候選的頂點集合 N,每個非根頂點各自獨立地選一個父節點, 可選數就是它在 N 誘導子圖上的入度:

CT(N)=vN,vrootdN-(v)

既有實作用這條式子精確計算並列數。在本規格下它有第二個用途: 它是簡約先驗在給定狀態集合下的正規化常數, 所以「這個候選有多少種等價寫法」不會被誤算成「這個候選有多少證據」。

成本不是這條路線的瓶頸

既有實作已經量過:整個基因體的局部重建是兩分鐘的工作,記憶體不到 400 MB。 本規格在它之外只加了每個候選的積分與全域基準的 S50 次重算, 仍然遠低於任何全域取樣。要注意的只有一件事: 成本的變異來自 q 的分布而非連鎖區段數 —— q 大的資料集吃掉絕大部分節點,所以要控成本,該控的是 q 的分布, 不是連鎖區段總數。

實測數字:98,955 個連鎖區段的秒數、記憶體與跨資料集 19 倍差異

既有實作處理 98,955 個連鎖區段, solver 122.03 秒、census 58.96 秒、峰值常駐記憶體 356.7 MB、 展開 13,773,565 個搜尋節點 —— 平均每個連鎖區段 139.2 個節點, 但跨資料集差約 19 倍(H2009 每連鎖區段 292.0,HCC1395_NYGC 15.5)。 那個 19 倍就是上面「變異來自 q 的分布」的量: H2009 正是唯一把 k 一路填到上限 12 的資料集。

關鍵仍在於沒有全域取樣包在外層,所以整份工作是尷尬平行的, 成本隨連鎖區段數線性成長。這是放棄全域目標換來的直接好處, 也是它與整合篇那條路線在工程上的主要差別。

外部驗證:Somatic caller

局部系譜沒有完整金標準,因此另以 somatic calling 作為具有 truth set 的外部驗證終點。 此路線不參與局部系譜的核心推論;它只檢驗局部 lineage 一致性是否在 caller 既有訊號之外提供增量。

錨點與候選必須分開

這裡有一個明顯的循環:局部系譜要靠可信的 somatic 變異才建得起來, 而我們想幫的正是那些不可信的候選。解法是把兩者分成兩個角色:

角色來源用途
錨點germline het 位點 + 通過嚴格門檻的 somatic 呼叫建構該連鎖區段的局部系譜
候選caller 在寬鬆門檻下的候選集合被評分的對象,不進錨點集合

因此每個候選 m 的特徵,都是對把它拿掉之後建成的局部系譜 Lu(m) 算出來的。這條留一法不是保險,是必要條件: 否則特徵會直接把「這個候選有幾條 ALT read」抄一遍, 在訓練時看起來很有效,在真正的低頻變異上完全沒有幫助。 錨點也不得取自 truth set —— 那是最典型的

錨點與候選的角色分離,以及留一法算出來的特徵 這張圖解決一個循環:局部系譜要靠可信的體細胞變異才建得起來, 而我們想幫的正是那些不可信的候選。 左欄把兩者分成兩個角色。錨點是 germline 雜合位點加上通過嚴格門檻的體細胞呼叫, 它們負責建樹;候選是 caller 在寬鬆門檻下給出的東西,它是被評分的對象, 絕對不能進入錨點集合,否則循環就回來了。 中欄是把候選拿掉之後才建起來的局部系譜,四個節點分別是全零、一零零、一一零、一零一。 候選不在這棵樹裡,所以算出來的特徵不可能抄它自己的資料。 右欄是把候選的 ALT 分子投到這棵樹的節點上之後看到的兩種形狀。 真的低頻體細胞變異來自某一支既有的 lineage, 所以它的支持分子會集中在一個節點上,巢狀對數似然比因而很高。 定序錯誤與嵌合對局部系譜完全無所謂,分子會散落在各節點之間,對數似然比接近零。 讀法是:不做留一,特徵就退化成把「這個候選有幾條 ALT read」抄一遍 —— 訓練時看起來很有效,在真正的低頻變異上完全沒有幫助。 留一法:候選被拿掉之後,才建局部系譜 錨點建樹、候選被評分。兩個角色混用,循環就回來了 ① 兩個角色分開 錨點 germline 雜合位點 + 通過嚴格門檻的 somatic ↓ 只有錨點建樹 候選 m caller 寬鬆門檻下的候選 被評分的對象 候選進錨點集合, 錨點也不得取自 truth set。 後者是最典型的資料洩漏。 ② 拿掉 m 之後建樹 000 100 110 101 這棵樹叫 L(−m) m 不在裡面 所以特徵抄不到它自己 ③ m 的 ALT 分子落在哪 真的低頻 somatic:集中在一個節點 000 100 110 101 llr_nested 高 → 判為真 定序錯誤或嵌合:散落各節點 000 100 110 101 llr_nested ≈ 0 → 判為錯誤 不做留一,特徵等於把「這個候選有幾條 ALT read」抄一遍 —— 訓練時好看,低頻變異上沒有幫助
左欄是角色分離:錨點建樹,候選只被評分, 候選不進錨點集合,否則那個循環就回來了。 中欄是把候選拿掉之後才建起來的 Lu(m) —— 候選不在裡面,所以特徵抄不到它自己的資料。 右欄是把候選的 ALT 分子投到這棵樹上之後的兩種形狀: 真的低頻 somatic 來自某一支既有 lineage,分子集中在一個節點; 定序錯誤與嵌合對局部系譜無所謂,分子散落各節點llrnested 因而接近零。 這就是 llr_nestedlineage_coherence 量的東西。

特徵群與可用範圍

給 somatic caller 的三組特徵,以及各組的覆蓋率與比較基準 三條橫向的帶狀區塊,由上而下是基礎特徵群、單倍型特徵群與局部系譜特徵群。 每一組左邊寫覆蓋率並畫成長條,中間寫它提供什麼,右邊寫它要打敗的基準。 基礎特徵群所有候選都有:把樣本層的 CCF 原子換算成這個位點的期望 VAF 格點, 再加上就地估到的錯誤地板;要打敗的基準是 caller 自己從訓練資料學到的 VAF 分布。 單倍型特徵群是有 germline 錨點的候選,佔多數:ALT 分子集中在哪一條 germline haplotype 上, 以及該單倍型的深度脈絡;要打敗的基準是 ClairS 已經有的相位通道。 局部系譜特徵群只有連鎖進某個連鎖視窗的候選才有,這個比例逐樣本由四成到九成八: ALT 分子與既有 somatic lineage 的一致性、巢狀似然比與四配子相容性; 這一組沒有現成基準,是本規格新增的。 最下方兩個方塊是兩條必須寫進實作的規則。 左邊是留一法:局部系譜只由錨點建成,被評分的候選本身不得列入錨點, 否則特徵會直接把「這個候選有 ALT read」抄一遍。 右邊是缺席不是零:沒有連鎖進連鎖視窗的候選就沒有局部系譜特徵,每一組都要有「這一組不可用」的指示通道, 而且必須證明在不可用的子集上沒有變差;驗收時三組各報一次 PR,不可只報總體。 局部系譜特徵群那條長條畫成一個範圍,淺色是上界九成八,深色是下界四成, 因為這個覆蓋率逐樣本差超過兩倍,不是一個固定值。 三組特徵:覆蓋率不同,要打敗的基準也不同 基礎特徵群 所有候選都有 樣本層的 CCF 原子換算成 這個位點的期望 VAF 格點 以及就地估到的錯誤地板 要打敗的基準 caller 自己學到的 VAF 分布 單倍型特徵群 有 germline 錨點的候選 ALT 分子集中在哪一條 germline haplotype 上 以及該單倍型的深度脈絡 要打敗的基準 ClairS 已經有的相位通道 局部系譜特徵群 連鎖進連鎖視窗的候選 40.5% – 98.1% ALT 分子與既有 somatic lineage 的一致性、巢狀似然比 與四配子相容性 沒有現成基準 這一組是本規格新增的 留一法:候選不進錨點 局部系譜由錨點建成,被評分的候選 本身不得列入錨點;否則特徵會直接 把「這個候選有 ALT read」抄一遍。 錨點 = germline het + 嚴格門檻的 somatic 缺席不是零 沒連鎖進連鎖視窗就沒有局部系譜特徵。每一組 都要有「不可用」的指示通道,而且 必須證明在不可用的子集上沒有變差。 驗收時三組各報一次 PR,不可只報總體。
三組特徵的覆蓋率與要打敗的基準都不同。 單倍型特徵群是 ClairS 已有的相位通道,是基準而不是貢獻; 局部系譜特徵群的覆蓋率逐樣本由 40.5% 到 98.1%,不是固定的一成; 但它是唯一沒有現成替代的特徵群。

局部系譜特徵群的核心是 llr_nested,而它的邏輯與 ClairS 的相位通道相同、 只是改用更局部的分類單位:真的低頻 somatic 變異來自某一支既有的 lineage, 所以它的支持分子應該整齊地落在該節點的後代位置上; 定序錯誤與嵌合則對局部系譜完全無所謂,會散落在各節點之間。 差別在於相位通道分的是兩條 germline 單倍型, 局部系譜特徵分的則是同一條單倍型內部的數支 somatic lineage。

欄位全表:三組特徵的每一個欄位與定義(實作時逐欄對照)
特徵群欄位意義
基礎vaf_grid_dist觀測 VAF 與「全域基準原子 × 該處 CN/multiplicity」所隱含的期望值格點的最近距離,以抽樣標準差為單位
基礎floor_ratioALT 分子數 ÷ 該連鎖區段錯誤地板的期望分子數
基礎puritycn_localphi_stratum樣本與區段層的脈絡量
單倍型hp_concentrationALT 分子集中在單一 germline 單倍型的比例
單倍型hp_depth_ratiohp_untagged_frac該單倍型的深度脈絡與未標記比例
局部系譜lineage_coherenceALT 分子在 Lu(m) 各節點上的集中度:最大節點佔比
局部系譜llr_nested對數似然比:「ALT 分子構成某一節點的巢狀子群」對「ALT 分子依 νu 隨機散布」
局部系譜four_gamete_viol把候選加進 Xu 後是否產生四配子違反,及其超過地板的程度
局部系譜expected_vaf_local最佳配對節點的 ν 換算出的期望 VAF,與觀測值的差
局部系譜n_spank_ustate_entropy證據量與局部複雜度的脈絡量
全部tier0_oktier1_oktier2_ok該特徵群是否可用的指示通道
缺席不是零

沒有連鎖進任何連鎖視窗的候選就沒有局部系譜特徵群,而那個比例逐樣本由 1.9% 到 59.5% (連鎖率的補數)。把缺席欄位填 0 會讓模型學到「0 代表沒有支持」, 而那正好與「這個位點根本沒有可用的連鎖區段」相反。 每一特徵群都必須有獨立的可用性指示通道,訓練資料必須同時包含可用與不可用的兩種樣本, 而且驗收時三組各報一次 precision/recall,並另報不可用子集。 分層報告在這裡不是謹慎,是必要條件:可用比例本身逐樣本就差兩倍以上, 把 COLO829 那種 98% 與 HCC1395 那種 41% 平均起來, 一邊的增益與另一邊的傷害會同時消失。

三種整合方式

方式做法成本風險
A · 事後重新評分以 caller 分數 + 特徵訓練一個小模型,只改排序低,不需重訓 caller受限於 caller 已經丟掉的候選
B · 加成輸入通道把特徵接進 caller 的張量後重訓高,需要完整訓練資料與算力上限最高,但難以歸因是哪一組特徵有用
C · 前置過濾用特徵先砍候選不建議:不可逆,且會安靜地傷害 recall
三種整合方式各自接在 somatic caller 流程的哪一個位置 上排是 somatic caller 本來的流程:產生候選、算特徵與張量、模型給分、輸出 VCF。 三種整合方式的差別就是接在這條流程的哪一個位置,而位置決定了成本與風險。 方式 A 接在模型給分之後,只重新排序,所以不必重訓 caller,成本最低, 但它只碰得到 caller 已經留下來的候選,被前面丟掉的救不回來。 方式 B 把特徵接進張量之後重訓,位置最靠前,上限最高, 代價是需要完整訓練資料與算力,而且很難歸因是哪一組特徵有用。 方式 C 接在產生候選之前,直接用特徵先砍候選。 它便宜,但它是不可逆的:被砍掉的候選不會出現在任何後續指標裡, 所以它會安靜地傷害 recall,圖上因此標為不建議。 讀法是:建議順序是 A 先做,因為 A 可歸因、每一組特徵可以單獨加減; 而如果 A 沒有效果,B 幾乎不可能有 —— A 的失敗代表這些特徵 在 caller 已有的資訊之外沒有增量。 三種接法接在 caller 流程的哪裡 位置決定成本與風險:越靠前上限越高,也越不可逆 產生候選 特徵/張量 模型給分 輸出 VCF C B A A · 事後重新評分 —— 接在給分之後,只改排序。成本低、不必重訓;但只碰得到 caller 已留下的候選。 B · 加成輸入通道 —— 特徵接進張量後重訓。上限最高;需要完整訓練資料與算力,且難以歸因哪一組特徵有用。 C · 前置過濾(不建議) —— 先砍候選。便宜,但不可逆:被砍掉的不出現在任何後續指標裡,會安靜地傷害 recall。 建議順序 A 先做 —— A 沒有效果,B 幾乎不可能有。
上排是 caller 本來的流程,三個箭頭是三種接法的接入位置 —— 位置決定成本與風險。越靠前上限越高,也越不可逆: A 接在給分之後,只改排序,碰不到已經被丟掉的候選; B 接進張量後重訓,上限最高但難以歸因; C 接在產生候選之前,被它砍掉的候選不會出現在任何後續指標裡, 所以它傷害 recall 的方式是安靜的。

建議順序是 A 先做。它便宜、可歸因(每一組特徵可以單獨加減)、 而且如果 A 沒有效果,B 幾乎不可能有 —— 因為 A 的失敗代表這些特徵 在 caller 已有的資訊之外沒有增量。

不論走哪一種接法,訓練與評估的切分有四條不能違反的規則, 其中最容易犯的是用逐變異的隨機切分 —— 同一個連鎖區段裡的候選共用一份局部系譜,隨機切分會讓指標系統性偏高。

切分紀律:四條規則逐條(切分單位、錨點來源、同一條管線、分層驗收)
  • 不可以用逐變異的隨機切分。同一個連鎖區段裡的候選共用一份局部系譜, 彼此高度相關;隨機切分會讓同一個連鎖區段同時出現在訓練與驗證集, 指標會系統性偏高。切分必須以樣本為單位,連鎖視窗層另做一次巢狀檢查。
  • 錨點必須由 caller 自己產生,不得取自 truth set 或 的標註。
  • 訓練與推論時的特徵必須由同一條管線算出;全域基準的實作、 λ、地板估計方式都要寫進 provenance。
  • 驗收須跨純度、突變負荷、平台與 basecaller 分層報告, 以檢查

驗收設計

核心:局部打散的負對照

連鎖區段層級的結論沒有金標準,但有一個乾淨的負對照。 在每個連鎖區段內部打散分子的 somatic–somatic 配對,同時保留: 每個位點的 somatic 邊際計數、每條分子的覆蓋遮罩、 每個位點的 germline–somatic 列聯表、深度與品質分層。 打散之後,資料在所有邊際統計量上與原始資料相同, 唯一被移除的就是共現

比較量什麼結論的讀法
原始 vs 打散REFINES_GLOBAL 的個數差值即本規格的主要效果量;打散提供虛無分布
原始 vs 打散留一分子的預測似然共現是否真的攜帶邊際以外的資訊
逐連鎖區段可置換分子比例、實際改變比例、獨立打散份數三者任一過低時輸出 SHUFFLE_UNDERPOWERED,不得把「沒有差別」解讀為「沒有共現訊號」

其餘驗收項目

其餘十項分成三段:機率核、相容性、地板檢查程式有沒有寫對; 先驗影響、可辨識性、重現性、半合成檢查結論是不是由資料而非旋鈕決定; 下游、留一法、切分檢查外部驗證有沒有洩漏。 每一項都要有「失敗代表什麼」,否則它只是一個會綠的測試。

驗收全表:十個層級各自必須通過的測試與失敗意義(實作時逐列勾)
層級必須通過的測試失敗意義
機率核每個遮罩下的樣式機率加總為 1;部分覆蓋 read 的邊際化結果與顯式加總一致似然未正規化或把未覆蓋位點當成參考型
相容性對隨機狀態集合,四配子檢定的結果與 perfect phylogeny 建構的成敗一致相容性判定與樹建構不同源
地板以 germline-only 連鎖區段(無 somatic 訊號)估到的假狀態率與模型預測一致地板訂錯 —— 訂低會生出假 lineage,訂高會吃掉真的低頻支
先驗影響λ 掃描下 REFINES_GLOBAL 的個數變化須平滑且可解釋結論由先驗而非資料決定
可辨識性刻意合成兩支 CCF 相同的 lineage:僅用邊際的擬合必須無法分開,加入共現後必須分開程式以隱藏的先驗或 bug 假造了可辨識性
重現性同細胞株跨 basecaller、跨機構的連鎖區段分類一致度;與既有實作的 0.909 對照分類是流程雜訊而非訊號
半合成兩株已知細胞株依已知比例混合,在兩者基因型相異的連鎖視窗回收兩支結構局部推論在已知答案上就不對
下游三組特徵各自的 precision/recall 增益,含不可用子集特徵沒有增量,或在多數子集上造成傷害
留一法候選出現在自己的錨點集合時必須直接失敗特徵抄了候選自己的 ALT 計數
切分S2 與全域基準輸入位點的交集為空;訓練/驗證不共用樣本重複計數或資料洩漏
可分析的頻率連鎖視窗:傳統 VAF 擬合區間與譜系內比例區間的比較 兩條橫軸畫的是同一件事在兩條路線上的可用範圍,範圍都以「佔細胞的比例」為單位。 上排是傳統做法:原始研究刻意只在 VAF 零點一二到零點二四之間擬合, 更低的一端混著假陽性,更高的一端已經進入 clonal 峰。 把它換算成細胞比例,在純度零點六的樣本上大約是零點四到零點八,是一段相當窄的區間。 下排是本頁的做法:下界由每一個連鎖區段自己的深度與地板總量決定,不是一個固定常數, 在每個家族六十條分子、地板總量千分之五時大約是零點零五; 上界則由譜系內的 clonal 堆積決定,暫定零點五。 右側的表列出下界怎麼隨分子數與地板總量變化。 底下標出一個重要提醒:上界零點五是全文最弱的一個數字,必須由模擬重新推定。 讀法是:把比例改成在譜系內部量,動態範圍不但沒有變窄,反而變寬了。 可分析的比例連鎖視窗 傳統 VAF 擬合區間 0 0.5 1.0 換算成細胞比例約 0.4–0.8 HFS 譜系內比例區間 0 0.5 1.0 約 0.05–0.5,且下界逐連鎖區段計算 下界隨深度變化 分子數 δ=0.005 δ=0.01 20 0.10 0.12 30 0.08 0.10 60 0.05 0.07 100 0.04 0.05 下界不是常數,要逐連鎖區段算 把比例改成在譜系內部量,動態範圍不但沒有變窄,反而變寬。 但上界 0.5 是本頁最弱的一個數字:它是從傳統區間的比例類推來的, 必須由模擬重新推定,不要當成已知常數引用。
驗收項目裡「地板」那一項要驗的就是這條下界。 圖上兩條軸是兩種比例的可分析區間:上面是傳統做法在細胞比例上量得動的範圍, 下面是本規格在連鎖區段內分子比例上量得動的範圍(圖上寫「譜系內比例」,就是 νu)。 右下那張小表是下界怎麼算出來的:本頁的地板總量 δu 取 1%, 每個家族 60 條分子時下界約 0.07;分子數加倍就往下掉一截,地板減半也會往下掉一截。 注意下界與地板是兩個量δu輸入, 下界則是它在這個分子數之下換算出來的「一支要佔多少才看得見」。 所以下界必須逐連鎖區段算,不能當成固定常數引用。
實作順序(展開查看)
步驟做什麼可單獨驗證的內容不得宣稱之事
前處理稀疏狀態表(含遮罩)與就地錯誤率校準能重現現行分類的計數;地板與 germline-only 連鎖區段一致任何生物學結論
單區段模型單一連鎖區段的局部後驗,先驗用平坦分布機率核、相容性、邊際化三項測試解析度優於全域
全域先驗S1 建立原子先驗與逃逸質量λ 敏感度;合成的等值 CCF 例子可分開真實樣本的準確度
全樣本目錄輸出目錄與 REFINES_GLOBAL 計數打散負對照的效果量與虛無分布細胞層級的群數
Caller 基準特徵基礎與單倍型特徵 + 事後重新評分是否勝過 caller 既有的相位通道局部系譜特徵的貢獻
Caller 局部特徵加入局部系譜特徵並分層報告可用子集上的增益、不可用子集上的無害總體平均掩蓋分層差異
外部重現重現性與癌別關聯;匯出成對關係跨 basecaller 一致度沒有金標準的準確度宣稱

既有資料與文獻邊界

既有實作的資料規模

以下數值來自本實驗室既有實作在七個資料集、六個生物樣本、chr1–22 上的輸出。 在本規格的脈絡下,它們的意義與前一篇不同:不再是「有幾條約束」, 而是「有幾個連鎖區段可以各自輸出一列」。

已經量到的全基因體譜:七個資料集的連鎖視窗拓撲類別組成 七條堆疊長條,每一條是一個資料集,橫軸是佔全部可分析單位的百分比。 每條分成三段:單層無分支、多層無分支,以及其餘(分支類與未解析加起來)。 單層無分支的範圍是一成九點五到四成六點八, 多層無分支的範圍是三成八點一到五成三點三,在七個資料集裡有六個是最大的一類。 右側標出每個資料集的可分析單位數,從四千二百多到兩萬三千多不等。 下方列出重現性:同一個細胞株在不同機構、不同 basecaller 下的組成相似度是零點九零九, 同為乳癌的樣本之間是零點八四到零點九零, 兩個肺癌樣本之間是零點八六,跨癌別則掉到零點五九到零點七八。 一個換了 basecaller 還能維持零點九零九、卻分得開癌別的統計量,帶著真的訊號。 最下方提醒:這張圖尚未針對覆蓋幾何做校正,所以類別比例還不能直接當成演化結論。 讀法是:這已經是一個可重現的全基因體單倍型頻譜,重新設計要建在它上面。 已經量到的全基因體譜 七個資料集、六個生物樣本、chr1–22,每個連鎖區段是「連鎖視窗 × 單倍型家族」。 HCC1395_HKU 34.5% 52.2% 9,130 HCC1395_NYGC 36.0% 52.3% 5,308 HCC1937 28.8% 53.3% 4,245 HCC1954 46.8% 38.1% 5,647 H1437 29.8% 53.2% 13,740 H2009 19.5% 52.2% 23,128 COLO829 42.8% 45.7% 10,757 單層無分支 多層無分支(七個裡有六個是最大類) 分支類 + 未解析 重現性:同細胞株換機構換 basecaller 0.909;乳癌之間 0.84–0.90; 兩個肺癌之間 0.86;跨癌別掉到 0.59–0.78。換了 basecaller 還守得住,代表訊號是真的。 但這張圖還沒針對覆蓋幾何校正,所以類別比例還不能直接當成演化結論。
七個資料集的連鎖視窗分類組成。 在本規格下這張圖量的是局部系譜的形狀分布:印出來的兩段是單層無分支與多層無分支, 第三段(分支類與未解析合計)是剩下來的 11.5%–28.3%,圖上沒有標數字。 把未解析拆掉之後,真正的分支類是下表那個 6%–22%。 而分岔正是全域頻率譜最無能為力的形狀 —— 也就是說,這條路線最想要的那一類, 在既有的分類裡是最薄的一層。
觀測數值在本規格的意義
切出來的連鎖區段總數98,955 個單倍型連鎖區段分母之一:所有比例的最外層
 其中帶至少一個變異等位85,941 個分母之二:棄權率該用的那一個
  候選集合完整列舉75,224 個(87.53%候選狀態列舉真的跑得完的比例
  撞到搜尋節點上限而棄權10,717 個(12.47%標記並留在分母,不是丟掉
  可排序的連鎖區段71,955 個再往下一層的子集,非前者的替代數字
分支類的比例各資料集 6%–22%最可能掛上 REFINES_GLOBAL 的一類
多層無分支的比例38.1%–53.3%先後關係的來源,數量最多
更換 basecaller 的重現性同細胞株跨機構 0.909驗收設計中重現性測試的既有對照值
單一連鎖區段的覆蓋結構194 條 read,覆蓋 3 個位點者僅 3 條遮罩必須留下來的直接依據

三點必須先講清楚。其一,前四個數字是巢狀的子集,不是四個版本的同一件事 —— 所以每一個百分比都必須帶著自己的分母出現。

算法補充:棄權率該用哪一個分母(12.47% 與 10.83% 回答的是不同問題)

98,955 是全部連鎖區段;85,941 是其中帶變異的;75,224 是其中列舉得完的; 71,955 是再往下可排序的。棄權率該用的分母是 85,941(12.47%), 因為不帶變異的連鎖區段根本沒有東西可列舉、也撞不到任何上限; 用 98,955 算會得到 10.83%,那個數字回答的是另一個問題。

其二,形狀分布是一條啟發式規則作用「之後」的結果。 既有實作用 read-AF 分數排序並列的最小成本解,但它並不只是排序 —— 它只保留分數最高者、丟掉其餘,因而在任何結果被指派之前就縮減了候選集合。 七個資料集合計丟掉 972,592 個最小成本頂點集合中的 292,065 個, 也就是 30.03%,並介入了 71,955 個可排序連鎖區段中的 16,830 個。 所以「解到單一拓撲」的比例不是簡約性本身給的: 單就簡約性可歸因的區間是 64.89% 到 88.26%。 這正是推論演算法要把那個分數換成似然的具體理由 —— 問題不在它排得對不對,在它先砍再排

其三,0.909 是重現性,不是準確度,而且它比較的是 兩份已經過上述縮減的組成。它證明分類不是流程雜訊,不證明分類是對的; 改成本規格的推論之後應重算此值並比較。

分岔比例的檢定力限制

分岔是 REFINES_GLOBAL 最可能的來源,也是最稀缺的一類。 既有實作在七個資料集上的形狀組成,無分支類一律佔 71.7%–88.5% (最高的是 COLO829 的 88.5%,最低的是 H2009 的 71.7%)。

逐資料集:七個資料集的無分支比例與已分類連鎖區段數
資料集無分支合計已分類連鎖區段數
COLO82988.5%10,757
HCC1395_NYGC88.3%5,308
HCC1395_HKU86.7%9,130
HCC195484.9%5,647
H143783.0%13,740
HCC193782.1%4,245
H200971.7%23,128

關鍵是為什麼稀少,而這個理由是機械性的: 一條鏈只要一個觀測到的樣式就建得起來,一個分岔要兩個互不包含的樣式。 所以分岔的稀缺,量到的至少有一部分是「這個連鎖區段帶了多少不同的樣式證據」, 而不是「底下的結構有沒有分岔」 —— 既有實作沒有把這兩者分開,本規格必須分開。

分法是現成的:錯誤地板決定了「第二個樣式若真的存在,看得到它的機率」。 所以每個判為無分支的連鎖區段都要附一個檢定力數字 —— 在該連鎖區段的分子數與地板之下,一支佔 5% 的旁支被看到的機率是多少。 檢定力低的無分支連鎖區段應標 BRANCH_UNDERPOWERED, 而不得計入「無分支佔多少」這個比例的分子。 沒有這一步,形狀組成量到的是覆蓋深度,不是演化。

還有一個落差常被接在這一段後面,但它的來源不是檢定力: 單一拓撲的比例由 35.3%(H2009)到 90.6%(HCC1954),差 55 個百分點。 那個排序與 k 的分布同向 —— k 大的資料集並列的候選多、 解到單一拓撲的少,而不是它們的腫瘤比較單純。 也就是說,單一拓撲比例量的是「有沒有第二個樣式」,k 的分布量的是「有幾個位點」, 兩者都不是演化訊號,而且要分開報。

合起來的結論是:庫存那張表裡 6%–22% 的分支類是上限,不是估計值。 判定分岔需要兩個單一狀態皆存在,雙狀態的缺席不是抽樣零也不是錯誤地板 —— 後者正是局部生成模型中錯誤地板要檢驗的對象。

相關工作與新意邊界

既有能力代表方法本規格不可據此宣稱之處
由邊際 VAF 與拷貝數重建細胞層級 clone treePyClone、SciClone、PhyloWGS、Pairtree、DPClust不可宣稱全域樹準確度提升
把中性演化的尾巴與真正的 subclone 分開MOBSTER不可宣稱首次處理「頻率群集不等於 clone」
成對位點的分子狀態(含相位)建 subclone 與樹PairClone、TreeClone不可宣稱把共現寫進似然為新意,也不可宣稱全域方法只吃邊際 —— 差別在可用位點對的數量級
相位輔助的等位/subclonal 拷貝數Battenberg、Refphase、HATCHet2不可宣稱 phased CN 為新意
somatic caller 使用 germline 相位通道ClairS、DeepSomatic不可宣稱單倍型感知呼叫為新意 —— 單倍型特徵群是基準不是貢獻

候選新意因此只剩兩處,而且都必須先做文獻檢索才能使用「首次」二字: 其一,把可變 k 的多位點共現當成估計目標本身(而不是當成全域樹的約束), 並以逐連鎖區段的旗標與打散負對照給出可計數的效果量; 其二,把同一條 germline 單倍型內部的 somatic lineage 一致性做成 caller 的特徵通道。 PairClone 與 TreeClone 處理的是成對位點且目標仍是全域 subclone 結構; ClairS 的相位通道停在兩條 germline 單倍型這一層。

預期結果與限制

結果必須同時通過兩個獨立終點: REFINES_GLOBAL 的數量應明顯高於局部打散所產生的虛無分布; caller 特徵則必須在留一法下,對既有相位通道提供額外的 precision/recall 增益。 這兩項都不能證明局部節點就是真實細胞群,也不能證明全域 clone tree 因此變準。

預期結果模式

資料情境預期輸出正確結論
單一 clone、突變負荷低幾乎全部 GLOBAL_CONSISTENT,打散後無差異局部沒有可加的資訊,這是正確的負結果
兩支 CCF 相同的 lineage,且其變異落在同一批連鎖區段該批連鎖區段掛 REFINES_GLOBAL,打散後消失本規格的主要成立情境
兩支 CCF 相同,但變異散在不同連鎖區段無旗標,與單一 clone 無法區分read 跨距的硬上限,不是模型失敗
家族誤標率偏高INCOMPATIBLE 比例上升,REFINES_GLOBAL 同步上升,但打散後不下降是地板問題,不得解讀為 subclone
kataegis 叢單一連鎖視窗貢獻大量高度相關的連鎖區段整叢降權為一個有效觀測
下游:局部系譜特徵群可用的子集precision 上升而 recall 持平或微升可歸因於 lineage 一致性
下游:局部系譜特徵群不可用的子集指標不變缺席通道有效;若下降則缺席契約寫錯了

尚未解決的問題

十個問題,每一條都是「目前沒有答案」,不是「還沒寫」。 標題那一句就是問題本身;展開看的是它為什麼還沒被回答,以及要回答它得先做什麼。 其中連鎖率為什麼逐樣本差兩倍以上是第一個該回答的 —— 在弄清楚它之前,無法事先判斷一個新樣本值不值得跑。

整條路線尚未經實測。

本頁各項皆有結構性的理由,但都未在真實資料上檢驗。 最小的驗證是驗收設計中等值 CCF 的合成例子:確認僅用邊際的擬合必然分不開, 再量需要多少條跨越分子、地板要估得多準才分得開而不誤拆。

λ 沒有客觀的訂法。

它是這條路線唯一一個靠判斷的旋鈕。 可以掃描與做敏感度分析,但「掃出來最好看的那個值」不是估計。 是否有辦法由資料本身(例如以留一連鎖區段的預測似然)把它定下來,尚未回答。

全域基準的錯誤會整批傳下去。

切斷回饋的代價是局部無法修正全域; 若全域基準的群數少算一個,所有原子都會偏,而局部只會用逃逸質量吸收, 表現為 LOCAL_ONLY_LINEAGE 大量出現。這個失效模式的診斷還沒設計。

連鎖率為什麼逐樣本差兩倍以上,沒有人知道。

它由 40.5% 到 98.1%, 既有實作沒有把它與突變數、突變密度、深度或讀長分布關聯起來, 而技術重複只解釋得了 5.2 個百分點。 在弄清楚機制之前,無法事先判斷一個新樣本值不值得跑, 也無法判斷低連鎖率是生物學(突變稀疏)還是流程(定相破碎、讀長短)造成的 —— 兩者的補救方式完全不同。這是本規格第一個該回答的經驗問題。

連鎖區段的來源有偏性。

它們只來自變異密集的連鎖視窗, 而密集有時並非偶然(kataegis)。降權規則已寫,但降權的強度沒有依據。

甲基化是一個誘人但被綁住的第四層。

既有實作量到, 在有穩定甲基化差異的位點中,51.2%–80.4% 的差異落在單一單倍型的 ALT read 內部 —— 那正是本規格想分開的地方,所以它看起來是局部系譜特徵群之外的另一條通道。 但等位特異甲基化以順式作用,因此它與界定連鎖區段的單倍型切分並非獨立: 一個甲基化分群與 ALT/REF 軸或單倍型軸對齊,機制上本來就會發生, 不需要任何 lineage 解釋。要把它變成證據,得先有一個能把「順式機制」與 「lineage 差異」分開的設計,而那個設計目前不存在。

LOH 區域怎麼辦,只有一個保守答案。

局部生成模型把非中性區段標記並排除, 但這在 CN 變異廣泛的實體腫瘤可能排掉一半以上的連鎖區段。 要放寬就得讓模型表達突變的喪失,而那會破壞四配子相容性 與「給定狀態集合樹即唯一」這兩個讓局部推論便宜的性質。這個取捨還沒有評估。

與整合篇的關係尚未決定。

本規格刻意切斷回饋,整合篇則走完整聯合。 兩者不是替代關係,但如果聯合模型可行,本規格的局部後驗應該是它的一個近似 —— 這個近似有多差,沒有評估。

「首次」尚不可用,而且門檻比原本以為的高。

PairClone 與 TreeClone 已經把成對共現與相位寫進全域似然,所以候選新意不能再宣稱在「使用共現」這件事上, 只能落在「可用位點對多兩個數量級、k 可變、逐連鎖區段交付」這幾點。 Pairtree、CliP、LICHeE 與任何以 read linkage 輔助 subclone 的後續工作仍待系統檢索。

短讀成對共現的實際產量沒有實測過。

開頭那個 0.15%–1.5% 是 Poisson 估計, 不是量出來的;PairClone/TreeClone 論文用的資料集實際有幾對可用, 以及它們在那個產量下對全域結論的改變幅度有多大,會直接決定 「長讀多兩個數量級」這句話值多少。這是說服審稿人最需要的一個數字,目前沒有。

原始文獻與程式碼

本頁「輸入與前處理契約」、「推論演算法與計算預算」的上限與成本數字, 以及「既有實作的資料規模」的全部計數, 均出自本實驗室既有實作的紀錄:廖子游, Subclonal reconstruction using somatic haplotagging and methylation profiles with Nanopore sequencing,國立中正大學資訊工程學系碩士論文,2026 年 7 月。 該實作與本規格的目標一致(局部、分子層級、不重建全域樹), 但推論方式不同:它以 Camin–Sokal 簡約的最小潛在頂點搜尋產生候選, 再以 read-AF 分數縮減候選集合;本規格把後者換成邊際似然,並補上錯誤地板與全域先驗。 凡本頁引用其數值之處,均為該實作實測到的量,不是本規格已驗證的結果。

以 read 上的多位點狀態計數直接建模 subclone,最接近的既有做法是 Zhou T, Sengupta S, Müller P, Ji Y, PairClone: a Bayesian subclone caller based on mutation pairsJ R Stat Soc Ser C 2019;68:705–725 (academic.oup.com); 以及 Zhou T et al., TreeClone: Reconstruction of tumor subclone phylogeny based on genotype pairsarXiv:1703.03853

延伸引用:全域重建路線、下游 caller、切斷回饋與四配子檢定的原始出處

作為對照基準的全域重建路線:SciClone,Miller CA et al., PLoS Comput Biol 2014;10:e1003665;PyClone,Roth A et al., Nat Methods 2014;11:396–398; PhyloWGS,Deshwar AG et al., Genome Biol 2015;16:35 (doi 10.1186/s13059-015-0602-8); Pairtree,Wintersinger JA et al., Blood Cancer Discov 2022;3:208–219 (doi 10.1158/2643-3230.BCD-21-0092), 程式碼在 github.com/morrislab/pairtree; MOBSTER,Caravagna G et al., Nat Genet 2020;52:898–907 (doi 10.1038/s41588-020-0675-5)。 評比數據見 Salcedo A et al., Nat Biotechnol 2024 (doi 10.1038/s41587-024-02250-y)。

下游 caller:ClairS,Zheng Z et al., ClairS: a deep-learning method for long-read somatic small variant callingbioRxiv 2023,doi 10.1101/2023.08.17.553778, 程式碼在 github.com/HKU-BAL/ClairS; DeepSomatic,Park J, Cook DE, Chang PC et al., Accurate somatic small variant discovery for multiple sequencing technologies with DeepSomaticNat Biotechnol 2025 (doi 10.1038/s41587-025-02839-x), 程式碼在 github.com/google/deepsomatic

「切斷回饋」這個做法的統計出處為 Plummer M, Cuts in Bayesian graphical models, Stat Comput 2015;25:37–43 (doi 10.1007/s11222-014-9503-z); 該文同時指出這類後驗不是任何聯合模型的邊際分布,也指出其計算上的陷阱, 是「全域頻率基準如何成為獨立先驗」中「不得寫成聯合估計」的依據。 四配子檢定與 perfect phylogeny 的標準參考為 Gusfield D, Efficient algorithms for inferring evolutionary trees, Networks 1991;21:19–28; 簡約假設的原始出處為 Camin JH, Sokal RR, A method for deducing branching sequences in phylogeny, Evolution 1965;19:311–326。

前處理所依賴的單倍型標記見 LongPhase-S 預印本 (bioRxiv, 2025,doi 10.1101/2025.11.20.689492), 程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-s。 參數名稱與欄位一律以原始碼為準。

本模組術語

Clair3
以深度學習做 germline variant calling 的工具,長 read 上常用。
ClairS
配對 tumor–normal 的 somatic variant caller。tumor-only 版本叫 ClairS-TO。
DeepSomatic
Google 的 somatic variant caller,同樣有 tumor-only 版本。
DeepVariant
Google 開發的 germline variant caller,把 pileup 轉成影像再用 CNN 分類。
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
LongPhase
實驗室開發的長 read phasing 工具,是後續所有工具的共同基礎。輸出 germline haplotype。
LongPhase-S
配對 tumor–normal 版本。做腫瘤 DNA 比例估計(輸出欄位名為 purity)、比例感知的 somatic variant 過濾,以及 somatic haplotagging。
allele-specific copy number(等位特異拷貝數)
把一個區段的總拷貝數拆成兩個親源等位各自的份數,通常記為 major 與 minor。總拷貝數相同而兩個等位不同的狀態(例如 2+0 與 1+1)在深度上完全一致,只有 B-allele frequency 分得開 —— copy-neutral LOH 即為此類。
cancer cell fraction(癌細胞比例)
帶有某個特定突變的腫瘤細胞佔全部腫瘤細胞的比例。用來區分 clonal(1)與 subclonal(<1)突變。不等於 VAF。
clone tree(克隆演化樹)
描述腫瘤內各群細胞祖先關係的樹:節點是一群帶有相同變異組合的細胞,邊代表在祖先之上又多拿到變異。要注意同一組群集常常有多棵樹同時相容。
copy number(拷貝數)
某段基因體在細胞內的拷貝數。多數正常常染色體區段為 2,可再分為 major 與 minor allele copy number。
data leakage(資料洩漏)
訓練或模型選擇階段取得了評估資料的資訊,讓效能被高估。實驗室的做法是按染色體切分,確保同一個位點不會同時出現在訓練、驗證與最終測試中。
distribution shift(分布偏移)
測試資料的組成與訓練資料存在顯著差異(例如正負樣本比例不同),使得模型表現不如預期。
haplotagging
根據已 phase 好的 variants,把每一條 read 指派到 HP1 或 HP2,並把結果寫回 BAM 的 HP tag。
high-confidence region
benchmark 建立者指定的高可信度區間,通常以 BED 檔表示;區間外不宜視為具有相同標註可靠度。
latent node(潛在節點)
建樹時為了讓圖連得起來而補進的中間狀態,沒有被任何 read 直接觀測到。它是模型的產物,不能當成「還沒觀察到的細胞」。
mutation frequency spectrum(突變頻率譜)
把一份樣本裡所有 somatic 變異的 VAF 畫成直方圖後得到的分布。分布上的峰與肩對應不同大小的細胞群,最低頻端的尾巴斜率則被用來判斷有沒有天擇。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。
pigeonhole(鴿籠原理)
由父代與子代的細胞比例限制樹形的算術規則:一個細胞至多屬於父節點底下的一個子節點,所以各子節點的細胞比例加起來不得超過父節點。名稱來自鴿籠原理 —— 東西放進籠子,總量不會憑空變多。在 subclone 重建的文獻中也稱為 sum rule 或 crossing rule。它只能排除樹,不能挑出樹:通過檢查的候選通常仍不只一棵,其餘要靠 parsimony 之類的偏好決定。
單倍型家族(一條 germline 單倍型,加上由它衍生的 somatic 單倍型)
把 read 依 HP tag 分成的兩組之一。家族一HP1 與從它長出來的 HP1-1家族二HP2HP2-1;歸不到任何一條 germline 單倍型的 HP3 不屬於任何一族。叫「家族」是因為它把一條 germline 單倍型與由它衍生的 somatic 單倍型收在同一組裡 —— 分組看的是 germline 那一層,不是有沒有帶 somatic 突變。

在同一個 phase block 內,一個家族對應一條染色體拷貝,所以「兩族」就是那個位置上的兩條同源染色體。但兩件事不成立:其一,軟體判定不出哪一族來自父親、哪一族來自母親(那需要另外定序父母);其二,標號只在該 phase block 內有定義,跨 block 的「家族一」並非同一條染色體。

研究指引 · 純度、倍體與腫瘤 DNA 比例 · Part 1 — why purity, ploidy and copy number are inseparable

上篇:純度、倍體與拷貝數為何只能一起估計

以 ASCAT 與 PURPLE 為對照基準,寫出深度比與等位比例的前向式與反解式,指出純度與倍體的解為何成一個格點族,兩者各以什麼破解它,以及低純度時失效的機制。

建議先修:腫瘤混合體建議先修:LongPhase-S

本模組學習目標

  • 區分 tumour purity、ploidy 與 tumour DNA fraction 三個量,並寫出三者的換算式與其成立條件
  • 寫出 logR 與 B-allele frequency 的前向式與反解式,並說明 germline heterozygous 位點何以構成錨
  • 以代數形式寫出純度與倍體的簡併族,並指出 whole-genome doubling 為其中一個格點
  • 比較 ASCAT 的硬性可行域與 PURPLE 的連續懲罰,說明兩者破解簡併的方式有何不同
  • 說明低純度時純度與倍體何以被一併推高,並區分此現象與量測雜訊

為什麼重要

三個名稱相近而分母不同的量

M8 已建立 的完整關係式,並示範同一個 VAF = 0.20 可由三種不同的細胞狀態產生。 該章將「估計腫瘤細胞比例」列為一個獨立的研究題目,本頁即為該題目的標準解法。

討論之前須先分開三個量,其分母各不相同:

符號名稱分母
p全部細胞
κ腫瘤的 (每個腫瘤細胞的平均拷貝數)
f全部分子
f=p·κp·κ+2·(1p)

分母的兩項即為兩種細胞各自貢獻的 DNA 量:腫瘤細胞每個 κ 份,正常細胞每個 2 份。 κ=2f=p,此即三個量在二倍體之下不易被察覺分家的原因。

沿用 M8 的四倍體例子:p=0.50κ=4f=0.667, 兩者相差 16.7 個百分點。反解式為 p=2fκ(1f)+2f。 M8 的重要區分 #2 已建立此一分家,本頁承接其後果: 凡以 f 為輸出的方法,其結果與以 p 為輸出的方法不可直接比較, 除非同時取得 κ

同一份檢體的三種計數:細胞比例、每細胞份數與分子比例 一份檢體,三層各自計數,分母不同。 第一層是細胞:十個細胞裡五個是腫瘤細胞,所以細胞比例是零點五。 第二層是每個細胞在這個位置有幾份 DNA:正常細胞兩份,腫瘤細胞四份, 所以腫瘤的倍體是四。 第三層是定序池裡的分子:腫瘤細胞貢獻五乘四等於二十份, 正常細胞貢獻五乘二等於十份,於是腫瘤分子佔三十份中的二十份,也就是零點六七。 三個數字描述的是同一份檢體,差別只在計數的對象。 最下方給出換算式,並指出倍體等於二時第一層與第三層才會相等。 讀法是:把細胞比例當成分子比例使用,在非二倍體的腫瘤上會有十六點七個百分點的落差。 同一份檢體的三種計數 十個細胞,其中五個為腫瘤細胞;此處每個腫瘤細胞有四份 DNA,每個正常細胞兩份。 ① 細胞層 分母:全部細胞 正常細胞 5 腫瘤細胞 5 p = 0.50 5 ÷ 10 ② 每細胞的份數 此處的拷貝數 正常細胞 2 份 腫瘤細胞 4 份 κ = 4 正常細胞恆為 2 ③ 分子層 分母:全部分子 腫瘤 5×4 = 20 份 正常 5×2 = 10 份 0.667 0.333 f = 0.667 20 ÷ 30 換算式為 f = pκ ÷ (pκ + 2(1−p)),分母兩項即為上圖第三層的兩段長條。 κ = 2 時 f = p —— 二倍體之下三個數字重合,故此一分家在一般敘述中不易被察覺。
同一份檢體的三層計數。細胞層有一半是腫瘤細胞,故 p = 0.50; 每個腫瘤細胞在此處有四份 DNA、每個正常細胞兩份,故分子層的腫瘤佔比為 0.5×4 ÷ (0.5×4 + 0.5×2) = 0.667三個量描述同一份檢體,只是計數的對象不同。

此換算式沒有任何一篇文獻將其列為編號式。它是 ABSOLUTE 所定義的 D=α·τ+2(1α)(樣本平均拷貝數)與該文 「the smallest possible value is 2(1−α)/D … corresponds to the fraction of DNA from normal cells」 一語的直接推論:正常細胞所貢獻的 DNA 比例為 2(1p)/D,其補數即為 f。 同一個 D 在 ASCAT 記為 ψ,在 PURPLE 為 normFactor 的倒數的兩倍。

互動元件(列印版保留說明;數位版可操作)
觀察右側兩列數值。total CN 為 2 時 tumor cellular puritytumor DNA fraction 恆相等;調至 3 或 4 之後兩者分離, 且分離幅度隨拷貝數增加。左側曲線為 VAF,其分母與 DNA fraction 的分母為同一個量。

本頁的範圍

以下以 ASCAT 與 PURPLE 為對照基準,兩者皆自 與定序深度 同時估計純度、倍體與 。 所要建立的並非其操作流程,而是四件事:前向式的形式、反解式、 解為何不唯一,以及兩者各以什麼手段選出其中一個。

最後一項為本頁的重點,亦為下篇的起點: 簡併不是估計精度的問題,而是可辨識性的問題,兩者的改善途徑完全不同。

概念與互動

一、兩條觀測軌道

兩者的輸入皆可化約為沿基因體排列的兩條軌道。

為同一位點上腫瘤與正常樣本的 read 深度比取以 2 為底的對數。 ASCAT 的實作(ascat.prepareHTS.Rascat.getBAFsAndLogRs) 在取對數之後,再以全基因體比值的算術平均重新置中。

解讀補充:置中後的 logR=0 不代表二倍體

置中之後的 0 並不代表兩份拷貝, 它只代表「與全基因體平均相同」。ASCAT 因此在擬合完成後, 以擬合所得的拷貝數輪廓重新計算倍體,而不採用網格搜尋時所用的那個值。

僅在 germline heterozygous 位點計算。 germline homozygous 位點在腫瘤與正常樣本中皆為 0 或 1,對純度零資訊,故予以剔除。 兩個等位的 A/B 標號逐位點隨機決定selector = round(runif(len)))—— ASCAT 刻意不做相位,因此其等位軌道對稱於 0.5,PURPLE 的 AMBER 則取兩者較大值,值域為 [0.5,1]。此設計選擇在下篇會再度出現。

深度比與等位比例兩條軌道:總拷貝數相同而等位拆分不同的區段,只有等位比例分得開 沿一條染色體的三個區段,上下兩條軌道。 第一段的兩個等位各一份,第二段是一份被丟掉之後另一份被複製, 第三段是其中一份多了一份。 上面那條是深度比:第一段與第二段的總拷貝數都是二, 所以兩段的深度比完全一樣,畫出來是同一個高度,看不出任何差別; 第三段的總拷貝數是三,深度才抬高。 下面那條是等位比例:第一段兩個等位一樣多,落在零點五; 第二段只剩一種等位,落在一附近;第三段落在中間。 於是第一段與第二段在下面這條軌道上分得很開。 讀法是:深度只承載總拷貝數,等位怎麼拆分完全落在另一條軌道上, 這就是只看覆蓋度會漏掉拷貝數不變的異型合子性喪失的代數成因。 兩條軌道各自承載什麼 同一條染色體的三個區段,腫瘤細胞的等位特異拷貝數如最下方所示。純度固定,僅拷貝狀態不同。 深度比軌道 承載總拷貝數 1.0 0.5 1.00 1.00 1.50 兩段完全相同 等位比例軌道 承載等位的拆分方式 1.0 0.5 0.50 0.94 0.72 同兩段,在此分開 1 + 1 2 + 0 2 + 1 正常 拷貝數不變的 LOH 單一等位增加 深度式的分子只有 n_A + n_B,故 2+01+1 對它是同一個輸入;等位比例式的分子只取其中一個等位。
沿染色體的三個區段。1+1 與 2+0 的深度完全相同 —— 兩者的總拷貝數皆為 2,故深度比軌道上看不出任何差異;只有等位比例軌道分得開。 此即 M8 所述 copy-neutral 僅依 coverage 難以辨識的代數成因: 深度只承載總拷貝數,等位的拆分方式落在另一條軌道上。

深度單獨可決定的量

深度軌道對每個區段給出一條式子 Li=ρ·ni+2(1ρ), 其中 ni 為該處的總拷貝數。但 Li 本身只能讀到相差一個未知的正規化常數 (前述的重新置中),故實際可得的是 ni 的一個仿射像: 斜率為 ρ、截距為 2(1ρ),兩者皆未知。

凡能將這批數值落到整數上的一組(斜率, 截距)皆可接受。 第五節的格點族即為這類變換的全體。等位比例的作用,即在於為這條仿射線提供一個已知點。

二、前向式

ρ 為純度、ψt 為腫瘤倍體、 nAnB 為某區段上兩個等位在腫瘤細胞中的拷貝數。 樣本的平均倍體為 ψ=2(1ρ)+ρ·ψt。前向式為:

ri=γ·log2ρ·(nA+nB)+2·(1ρ)ψ
bi=ρ·nB+(1ρ)ρ·(nA+nB)+2·(1ρ)

分母為該處讀到的 DNA 總量,由腫瘤的 ρ·(nA+nB) 與正常細胞的 2(1ρ) 共同組成; 與 M8 的 VAF 關係式為同一個分母。γ 只出現在深度式中,等位比例式不含此參數。

前向式的分子與分母:兩條軌道共用同一個分母,差別只在分子取哪一部分 把兩條前向式拆成看得見的分子與分母。 中間畫的是這個位置讀到的全部 DNA:腫瘤細胞每個貢獻兩個等位加起來的份數, 正常細胞每個貢獻兩份。兩者相加就是分母,兩條式子共用它。 左邊是深度式:分子取全部,也就是整個分母本身,再除以全樣本的平均倍體並取對數, 平台常數只出現在這裡。 右邊是等位比例式:分子只取其中一個等位, 腫瘤的部分是純度乘上該等位的拷貝數,正常細胞的部分恰好是一份,也就是它兩份中的一半。 正常細胞貢獻的那個一,就是等位比例之所以能反推純度的來源。 讀法是:兩條軌道不是兩批獨立資料,它們是同一個分母的兩種取分子方式。 前向式的分子與分母 中間為此位置讀到的 DNA 總量,兩條式子共用它作為分母;差別在於分子取其中的哪一部分。 共用的分母 腫瘤細胞 正常細胞 ρ · (n_A + n_B) 2 · (1 − ρ) 深度式:分子取全部 分子涵蓋範圍 全部 r = γ · log₂ [ 分母 ÷ ψ ] 分子即為整個分母,故此式只承載總拷貝數 γ 與 ψ 只出現在這裡,設錯將使拷貝數整體縮放。 等位比例式:分子只取一個等位 分子涵蓋範圍 兩段各取一半 b = (ρ·n_B + (1−ρ)) ÷ 同一個分母 正常細胞的兩份中恰有一份屬於這個等位, 故分子帶著已知的 (1−ρ) —— 錨即在此 兩條軌道並非兩批獨立的觀測,而是同一個分母的兩種取分子方式;此亦為兩者必須一併擬合的原因。
前向式的分子與分母各由誰貢獻。 分母為該處所讀到的 DNA 總量:腫瘤細胞每個貢獻 n_A + n_B 份、 正常細胞每個貢獻 2 份。深度式與等位比例式共用這個分母, 差別僅在分子 —— 深度式取全部,等位比例式只取其中一個等位, 而正常細胞在該等位上恰好貢獻一半。 γψ 只出現在深度式,故等位比例不受平台常數與正規化的影響。

γ 為平台常數,其操作定義為「純樣本中單一拷貝缺失所造成的深度比下降量」。 SNP 陣列取 0.55,定序資料一律取 1。它以 2r/γ 的形式進入反解, 故設錯將使所有拷貝數整體縮放。

來源補充:ASCAT 反轉換式與文獻符號的對照

其一,ASCAT 原始文獻中的三條編號式在公開版本上為影像而非文字, 上列兩式取自參考實作 ascat.runAscat.RrBacktransformbBacktransform,與該文對 ρψγ 的文字定義自洽。

其二,文獻中的 ψ樣本平均倍體,但 R 程式碼中名為 psi 的變數是 ψt,即腫瘤倍體;程式碼在需要 ψ 之處一律展開寫成 ((1-rho)*2+rho*psi)。兩者相差一個與 ρ 有關的項,混用將使拷貝數整體偏移。

三、反解式

Li=2ri/γ·ψ,即去正規化之後該處的 DNA 總量,則

n^A=(1bi)·Li(1ρ)ρ,n^B=bi·Li(1ρ)ρ

兩式的結構相同:先由 Libi 得出該等位的總量, 減去正常細胞所貢獻的一份,再除以 ρ 還原為每個腫瘤細胞的份數。

整數拷貝數由 max(round(n^),0) 得出。 關鍵在於:ρψt 為輸入而非輸出。 反解式對任一組 (ρ,ψt) 皆給得出一組 n^, 唯有這組 n^ 恰好落在整數附近時,該組 (ρ,ψt) 才被視為合理。 擬合的目標即為此「與整數的距離」。

四、等位比例何以能定出純度

關鍵在等位比例式分子中的 (1ρ) 一項。 混入的正常細胞在 germline heterozygous 位點上的等位比例恆為 0.5, 且該值與 ρ 無關 —— 它是一個已知常數,故構成錨。兩個可直接反推純度的特例:

區段狀態等位比例反解
clonal hemizygous loss(1+0)b=1ρ2ρρ=12b1b
copy-neutral LOH(2+0)b=1+ρ2ρ=2b1

兩式皆不需要深度資料。PURPLE 對高度非整倍體樣本的重新擬合門檻 2×0.921 即為第二式的直接應用:取等位比例 0.92 之處反推純度。

等位比例的錨來自正常細胞:純度趨近一時錨消失 同一個區段,兩個等位在腫瘤細胞中是一份與零份,左右兩欄只有純度不同。 左欄純度零點四:這個位置的分子有一部分來自正常細胞, 而正常細胞在這裡兩個等位各一份,所以被丟掉的那個等位仍然收得到分子。 等位比例因此不是零而是零點三七五, 那個離開零的位移量完全由正常細胞造成,反解回去就得到純度。 右欄純度等於一:沒有正常細胞,被丟掉的等位一個分子也收不到, 等位比例落回零。 而零同時相容於一加零、二加零、三加零這些狀態, 因為它們的比值都是零 —— 位移量消失,純度資訊也跟著消失。 讀法是:等位比例之所以能反推純度,靠的是正常細胞在這裡的已知值零點五; 樣本越純,這個錨越弱,方向和一般預期相反。 錨的來源與其消失的條件 同一個區段,腫瘤細胞的等位特異拷貝數皆為 1 + 0;左右兩欄僅純度不同。 純度 0.40 此位置的分子來源 腫瘤 0.4×1 正常 0.6×2 其中屬於被丟掉的那個等位 0 份 0.6 份 0 0.5 0.375 位移量承載純度:ρ = (1−2b) ÷ (1−b) = 0.40 純度 1.00 此位置的分子來源 腫瘤 1.0×1,無正常細胞 其中屬於被丟掉的那個等位 0 份 0 0.5 0 位移量為零,純度資訊隨之消失 等位比例式的分子為 ρ·n_B + (1−ρ)承載純度的是後一項,而它屬於正常細胞。 ρ → 1 時該項趨於零,式子退化為 n_B ÷ (n_A + n_B) 的純比值 —— 樣本越純,錨越弱
同一個 1+0 區段,左右僅純度不同。 左側 ρ=0.40:正常細胞的分子把等位比例由 0 拉高到 0.375, 該位移量即承載純度資訊。右側 ρ=1.00:正常細胞為零,等位比例落回 0, 而 0 同時相容於 1+0、2+0、3+0 —— 位移量消失,純度資訊隨之消失

五、簡併的代數形式

變換式

(ρ,ψt,n) 為一組解,其中 n 為區段的總拷貝數。 取整數 k1 與整數 m,令每個等位的拷貝數變為 k·nA+mk·nB+m,故總拷貝數變為 n=k·n+2m,倍體隨之為 ψt=k·ψt+2m

深度式為 n 的仿射函數,且兩個解皆將各自的倍體映至 1 (代入 n=ψt 即得),故兩者相等的唯一條件為斜率相同: ρ·k/ψ=ρ/ψ。解出 ρ

ρ=ρk(1ρ)+ρ(1m),ψt=k·ψt+2m

此變換式為由前向式推導所得,並非引自文獻。等位比例式亦隨之不變: 其分子與分母在此變換下同乘一個常數。k=1m=0ρ=ρ,即恆等變換。

亦即:(ρ,ψt) 的解成一個由 (k,m) 索引的格點族, 族中每一點對深度與等位比例給出完全相同的觀測值。三個具體的格點:

(k,m)意義ρ可否由資料排除
(2,0)ρ2ρ 不可,若所有等位特異拷貝數皆為偶數
(1,+1)各處各等位各加一份ρ1ρ 可,若觀測到零拷貝的區段
(1,1)各處各等位各減一份ρ1+ρ 可,由 n0 排除
同一組觀測的三種解讀:格點族上的三個點給出恆等的深度比與等位比例 三欄並排,每一欄是同一份資料的一種解讀。 上半是觀測值:四個區段的深度比與等位比例。 三欄的這八個數字完全相同,一位數都沒有差別,因為它們本來就是同一份資料。 下半是參數:純度、腫瘤倍體,以及每個區段兩個等位各有幾份。 左欄是原解,純度零點四、倍體二。 中欄把每個等位的拷貝數乘以二,這是全基因體加倍的解讀,純度變成零點二五、倍體變成四。 右欄把每個等位各加一份,純度變成零點六七、倍體也是四。 三組參數代入前向式之後,算出來的深度比與等位比例逐格相同。 最下面一列是辨識依據:右欄原本零拷貝的那個等位被抬升成一份, 所以只要在基因體上觀測到任何一個完全缺失的等位,右欄就被排除。 中欄沒有對應的辨識依據,因為它的拷貝數全部是偶數, 它和左欄互為加倍關係,任何一條軌道都看不出兩者的差別。 讀法是:深度與等位比例決定的不是一組參數,是一整族參數。 同一組觀測的三種解讀 四個區段。上半為觀測值,三欄逐格相同;下半為各自的參數。純度記為 ρ,腫瘤倍體記為 ψ_t 觀測值 深度比 1.00 1.00 0.80 1.20 等位比例 0.50 0.70 0.63 0.58 深度比 1.00 1.00 0.80 1.20 等位比例 0.50 0.70 0.63 0.58 深度比 1.00 1.00 0.80 1.20 等位比例 0.50 0.70 0.63 0.58 三欄的八個數字逐格相同 參數 原解 (k, m) = (1, 0) ρ = 0.40 ψ_t = 2.00 各區段的等位拷貝數 1+1 2+0 1+0 2+1 有零拷貝的等位 全基因體加倍 (k, m) = (2, 0) ρ = 0.25 ψ_t = 4.00 各區段的等位拷貝數 2+2 4+0 2+0 4+2 有零拷貝的等位 各等位各加一份 (k, m) = (1, +1) ρ = 0.67 ψ_t = 4.00 各區段的等位拷貝數 2+2 3+1 2+1 3+2 全無零拷貝的等位 辨識依據 無辨識依據 拷貝數全為偶數,與左欄互為加倍 可排除 只要觀測到任一零拷貝的等位
三種解讀同一組觀測。上排的深度比與等位比例三欄逐格相同, 不同的只有下排的參數:純度、倍體與各區段的等位特異拷貝數。 中欄為全基因體加倍的解,右欄為各等位各加一份的解。 右欄的辨識依據在最下方 —— 零拷貝的區段被抬升為一份,故觀測到 homozygous deletion 即可排除它。 中欄則沒有對應的辨識依據。

圖中三欄的數值可逐項驗算。以左欄的 ρ=0.40ψt=2.00 為例, ψ=2(10.40)+0.40×2.00=2.001+0 的區段其深度比為 (0.40×1+1.20)÷2.00=0.80, 等位比例為 (0.40×1+0.60)÷(0.40×1+1.20)=0.625。 中欄的 ρ=0.25ψt=4.002+0 代入後給出同樣的 0.800.625

加倍為何不可辨識

(k,m)=(2,0)ρ=ρ/(2ρ)。 代入 ρ=1ρ=1一個全部拷貝數皆為偶數的純四倍體樣本, 與一個純二倍體樣本,在深度與等位比例上逐點相同。 兩者並非近似相等,而是恆等,故任何以這兩條軌道為輸入的方法皆不可能區分。 ASCAT 原始文獻在 79 例的驗證中有 10 例(12.7%)落於此點,該文亦明白寫出此限制。

數學補充:解可加倍,但不一定能對半

任何一組解皆可再加倍,但只有各處拷貝數皆為偶數的解可以對半。 因此格點族在加倍方向上無界,實際的界限來自倍體的上限與簡約性偏好, 而非來自資料。

此處與上一節的錨相互印證:ρ=1 時正常細胞的錨消失, 而正是在該處加倍的簡併最為徹底。

零拷貝的區段何以定住整體平移量 上下兩排是同一份資料的兩種解讀,四個區段的等位特異拷貝數畫成方塊的堆疊。 上排是原解,第三段的較小等位是零份,也就是那個等位完全缺失。 下排是每個等位各加一份之後的解,同一段的較小等位變成一份。 兩排的深度比與等位比例完全相同,所以這兩條軌道分不出上下。 差別只有一處:上排的基因體上存在完全缺失的等位,下排一個都沒有。 因此只要在真實資料上觀測到任何一個完全缺失的區段,下排就被排除, 平移量也就被定住了。 這正是那道零拷貝比例門檻所檢驗的東西。 讀法是:定住平移量的不是統計上的擬合優度,是一個具體的生物學觀測。 零拷貝的區段何以定住平移量 同一份資料的兩種解讀。每個區段畫成兩個等位的方塊堆疊,方塊數即該等位的拷貝數。 原解 ρ = 0.40 ψ_t = 2.00 1 + 1 2 + 0 1 + 0 2 + 1 兩處有完全缺失的等位 各等位各加一份 ρ = 0.67 ψ_t = 4.00 2 + 2 3 + 1 2 + 1 3 + 2 全無完全缺失的等位 兩排的深度比與等位比例完全相同;唯一的差別是上排有零拷貝的等位而下排沒有 —— 辨識依據只有這一項
m 何以被零拷貝的區段定住。上排為原解,其中一段的等位特異拷貝數為 1+0;下排為各等位各加一份之後的解,同一段變為 2+1。 兩者的深度比與等位比例相同,但下排整個基因體不存在任何零拷貝的等位。 故「觀測到 homozygous deletion」即為排除下排的依據 —— ASCAT 的 percentzero 門檻所檢驗者即為此。

六、ASCAT:以硬性可行域選解

ASCAT 在 (ρ,ψt) 的二維網格上(純度步長 0.01、倍體步長 0.05) 逐點計算反解,並取下式為距離:

d(ρ,ψt)=ii·wi·(n^min,imax(round(n^min,i),0))2

n^min 為該區段兩個等位中較小者,i 為該區段所含的 heterozygous 位點數, wi 在等位比例為 0.5 時取 0.05、其餘取 1 —— 無等位失衡的區段幾乎不參與判定。

此處有三項與原始文獻的敘述不一致,須以原始碼為準: 現行版本僅使用較小的等位且取平方,文獻所述為兩個等位的絕對值之和; 擬合優度定為 (1d/dmax)×100,而 dmax 以線性的 0.25 累計 —— 分子取平方而分母不取,故所報告的百分比不在文獻所述的尺度上,且系統性偏高。 引用該數值時應說明其定義。

格點族在此曲面上表現為多個深度相近的局部極小。 ASCAT 取 7×7 鄰域內的嚴格極小為候選,再以四道硬性條件篩選:

  • 倍體須落於 [1.5,5.5]
  • 純度須不低於 0.20(常數 MINRHO
  • 零拷貝的區段須佔全基因體 2% 以上 —— 即上一節用以定住 m 的條件
  • 擬合優度須不低於 80

四道皆不通過時,ASCAT 回傳 NA 而非一個勉強的解。 其原始文獻報告 112 個樣本中有 21 個(19%)如此,並將成因歸於深度軌道的殘差過大。 此一設計值得留意:回報失敗與回報一個錯誤的數值,其下游後果不同, 前者會使分析停下來,後者不會。

權重 0.05 的後果:接近二倍體的樣本

距離式中的 wi 對等位比例為 0.5 的區段取 0.05, 其理由是這類區段對任何一組 (ρ,ψt) 都給出接近整數的 n^min=0 或 1, 不具鑑別力。但其後果是:一個接近二倍體、拷貝數變異稀少的腫瘤, 其絕大多數區段的權重皆為 0.05,距離曲面沿 ρ 的方向近乎平坦, 沒有可供辨識的極小。

ASCAT 對此設有明確的判定:等位失衡的區段比例不足 3% 且最大的失衡區段不足 0.5% 時,樣本被標記為非異常, 前兩輪的解全數不予採用。此為第八節末兩列所述「全基因體皆為 1+1 時純度不可辨識」 在實作上的具體對應 —— 這不是實作的缺陷,而是可辨識性的邊界被正確地偵測到了。

PURPLE 對同一情形的處置方向相反:它不停下來,而是改用另一種資料 (見下一節的 somatic 擬合退路)。兩者在此處的分歧,正是各自失效模式的來源。

純度與倍體網格上的距離曲面:局部極小沿格點族排成一條曲線,選解靠切割而非最佳化 橫軸是純度,縱軸是腫瘤倍體,每一點代表一組候選參數。 點的大小代表反解出來的拷貝數離整數有多遠,小的表示擬合得好。 擬合得好的點不是散布在整個平面上,而是沿著一條由左下往右上的曲線排列, 那條曲線就是前一節的格點族:族上每一點對同一份資料給出相同的觀測。 四道硬性條件各自切掉平面的一片: 倍體下限與上限切掉曲線的兩端,純度下限切掉左側一段, 零拷貝比例的門檻切掉曲線上那些解讀成各等位各加一份的點, 擬合優度門檻則切掉整體不合的區域。 剩下的那一點就是輸出,一點都不剩就回報失敗。 讀法是:這個步驟的性質是切割可行域,不是在一個有唯一谷底的曲面上找最低點。 距離曲面上的局部極小排成一條線 橫軸為純度、縱軸為腫瘤倍體。圓點為候選解,圓越小表示反解所得的拷貝數越接近整數。 純度 ρ 0.0 0.2 0.4 0.6 0.8 1.0 1.0 2.0 3.0 4.0 5.0 腫瘤倍體 ψ_t 純度下限 0.2 倍體上限 唯一通過四道條件者 ρ 過低 零拷貝比例不足 零拷貝比例不足 倍體過高 格點族 擬合優度不足 曲線上各點的距離值相近,故此步驟的性質為切割可行域;剩一點即輸出,剩零點即回傳失敗而非勉強的解。
(ρ,ψt) 網格上的距離曲面示意。 局部極小並非散布,而是沿一條曲線排列 —— 該曲線即前一節的格點族。 四道硬性條件各自切掉曲面的一片:倍體界限切掉兩端,純度下限切掉左側, 零拷貝門檻切掉「各等位各加一份」的那一段,擬合優度切掉整體不合的區域。 選解因此是切割而非最佳化 —— 剩下一點即輸出,剩下零點即回報失敗。

七、PURPLE:同一組代數,連續的先驗

模型部分完全相同

PURPLE 的 PurityAdjuster.expectedFrequency 展開之後即為前述的等位比例式:

modelBAF=(1p)+p·nmajorp·CN+2·(1p)

深度側為 ratio=ν·p·CN+2(1p)2, 其中 νnormFactor,對應 ASCAT 的 2/ψ。 換言之,PURPLE 的觀測模型與 ASCAT 相同,取 γ=1ν=2/ψ。 兩者的差別完全落在目標函數上。

score(p,ψt)=(rwr·Er)×(rwr·Dr)+SomaticPenalty

wr 為該區段的 heterozygous 位點數佔全基因體的比例。 須注意運算次序:兩個加權平均先各自算完再相乘,而非逐區段相乘後取平均。

事件懲罰:連續的簡約先驗

Er=1+0.4·min(|nmaj1|+|nmin1|,1+|nmaj2|+|nmin2|)

兩項分別為「由 1+1 出發所需的事件數」與「先加倍再由 2+2 出發所需的事件數」, 後者的 +1 即加倍事件本身的代價。此式取代了 ASCAT 的硬性倍體界限: 它不禁止高倍體的解,而是要求該解在其他方面補回這筆代價。

連續的簡約先驗與硬性的倍體界限:兩種限制高倍體解的方式 左邊是連續的事件懲罰。橫軸是一個區段的較大等位有幾份,縱軸是該區段要付的代價。 兩條 V 形折線分別以一加一與二加二為底: 前者代表從正常狀態出發,一份一份改變所需的事件數; 後者代表先做一次全基因體加倍再從二加二出發, 它的底部比前者高一格,那一格就是加倍事件本身的代價。 實際採用的是兩條折線的下包絡,也就是同一個狀態的兩種來歷之中比較省的那一種。 兩條 V 交會的地方,就是解釋成加倍反而比較省的分界。 右邊是硬性的倍體界限:界內完全不計代價,界外一律不可行, 中間沒有過渡。 讀法是:兩者都在偏好簡約的解,差別在於一個是連續的、可以被證據推翻的代價, 另一個是不可協商的邊界。 連續的代價與硬性的界限 兩種限制高倍體解的方式。橫軸皆為拷貝數,縱軸為該解所付的代價。 連續的事件懲罰 0 1 2 3 4 5 較大等位的拷貝數 1.0 1.4 1.8 由 1+1 出發 先加倍再出發 兩條交會處 底部高一格 =加倍本身的代價 硬性的倍體界限 0 1 2 3 4 5 腫瘤倍體 界內:代價一律為零 不可行 不可行 沒有過渡地帶 兩者皆偏好簡約的解。差別在於左側的代價可被足夠強的證據推翻,右側的界限不可協商。
事件懲罰隨等位特異拷貝數的變化。 兩條 V 形分別以 1+12+2 為底, 實際採用者為兩者的下包絡。兩條 V 的交會處即為「解釋成加倍較省」的邊界。 右側對照 ASCAT 的做法:倍體界限是一道垂直的牆,界內不計代價、界外一律不可行。

偏離懲罰:對雜訊敏感

δ(a)=2·Φ(|around(a)|·max(1.5,p·ν2σ))1+max(0.5a,0)

Φ 為標準常態的累積分布函數;σ 預設 0.05。區段的偏離懲罰為 Dr=(δminor+δmajor)·br

p·ν/2 為相鄰整數拷貝數之間在深度比上的間距,除以 σ 之後即為 「每一份拷貝相當於幾個標準差」。因此同樣 0.25 的整數偏離, 在高純度樣本上幾乎必然來自 subclonal 拷貝數,在低純度樣本上則落於雜訊之內。 下限 1.5 使此一放寬在 p·ν0.15 之下停止。

ASCAT 沒有這一層:它在純度 0.2 與 0.9 上採用同一個絕對容差。 此為兩者在低純度樣本上表現分歧的機制之一。

偏離懲罰對純度的依賴:同一個整數偏離在高低純度下的意義不同 橫軸是反解出來的拷貝數離最近整數有多遠,從零到零點五;縱軸是該偏離所付的代價。 左邊畫兩條曲線。純度零點九那一條上升得很快, 因為高純度時相鄰兩個整數拷貝數在深度上隔得很開, 零點二五的偏離已經是好幾個標準差,幾乎確定不是雜訊,代價接近上限。 純度零點二那一條上升得慢,同樣零點二五的偏離仍在雜訊範圍內,代價不高。 兩條曲線在橫軸零點二五處被同一條垂直線切過,兩個交點的高度差就是這件事的全部內容。 右邊是不含純度的對照:一條固定的平方曲線, 在任何純度下對同一個偏離都給出同一個代價。 讀法是:把偏離換算成幾個標準差之後再罰, 與直接罰偏離本身,這兩種做法在低純度樣本上會得到不同的解。 偏離懲罰是否隨純度調整 橫軸為反解所得的拷貝數與最近整數的距離,縱軸為代價。兩側的橫軸刻度相同。 換算成標準差之後再罰 0 0.25 0.50 0 1 純度 0.90 純度 0.20 同一個 0.25 高純度:幾乎確定為結構 低純度:仍在雜訊範圍 直接罰偏離本身 0 0.25 0.50 0 1 同一個 0.25 曲線與純度無關 —— 純度 0.20 與 0.90 得到同一個代價 故低純度樣本上的 subclonal 訊號 與雜訊被同等看待 關鍵量為 p·ν ÷ 2σ —— 相鄰整數拷貝數在深度上的間距,折合成幾個標準差。此值隨純度下降而縮小。
偏離懲罰對整數距離的反應,兩條曲線分別為 p=0.90p=0.20橫軸上同一個 0.25 在高純度時落在曲線的平坦頂端 (近乎確定為結構),在低純度時仍位於上升段(尚在雜訊範圍)。 右側為 ASCAT 的對照:一條與純度無關的平方曲線。

somatic 變異提供的兩種約束

PURPLE 另有一項 ASCAT 完全不具備的輸入:somatic 變異的 VAF。它以兩種方式使用。

其一為懲罰項。由候選解換算每個 somatic 變異的變異拷貝數, 若其超出該區段主要等位所能容納的二項上界,則計入 SomaticPenalty。 PURPLE 的文件明白寫出此設計的目的:低純度低倍體的候選解往往能擬合拷貝數資料, 卻蘊含大量超出主要等位拷貝數的變異,而該情形在生物學上不合理。 此即一個針對格點族設計的排除機制。

其二為退路。當候選解高度二倍體(比例 0.97) 且有效純度範圍寬達 0.15 以上時 —— 即拷貝數資料本身不足以定出純度 —— PURPLE 轉而直接使用 somatic 變異的 VAF。 在 1+1 區段上,一個 clonal、multiplicity 為 1 的 heterozygous somatic 變異,其期望 VAF 為

VAF=p·1p·2+2·(1p)=p2

故以核密度估計找出 VAF 的最高峰,取其兩倍為純度。 此模式下倍體被逕行設為 2,因為該路徑本身不含倍體資訊。

somatic 變異的 VAF 峰作為純度錨,以及此錨的適用範圍 左邊是一批 somatic 變異的 VAF 直方圖。 在兩個等位各一份的區段上,一個所有腫瘤細胞都帶有、且只佔一份拷貝的變異, 它的期望 VAF 恰好是純度的一半。 所以直方圖上最高的那根峰落在零點二五時,純度就是零點五。 這個錨與拷貝數輪廓無關,它來自另一種資料, 因此可以切斷純度與倍體之間的那一族解。 右邊說明它的界線。這條關係式的分母含有兩條單倍型的拷貝數, 所以只有在該區段確實是兩個等位各一份時才成立。 右邊畫了另外兩種區段:一個等位被刪掉的,以及一個等位多了兩份的。 同樣的純度零點五,在這兩種區段上讀到的 VAF 分別是零點三三與零點二, 乘以二之後得到零點六七與零點四,都不是零點五。 所以這個錨必須先確認區段是二倍體才能用, 而腫瘤基因體上的二倍體區段往往不是多數。 讀法是:這個錨很有力,但它的分母把它綁在二倍體區段上。 somatic 變異的 VAF 峰與其適用範圍 左為錨的用法,右為其成立條件。兩側的純度皆為 0.50,變異皆為 clonal 且 multiplicity 為 1。 在 1+1 區段上 0 0.25 0.50 somatic 變異的 VAF 峰 0.25 VAF = p ÷ 2 純度 = 2 × 0.25 = 0.50 同一個純度,其他拷貝狀態 0 0.25 0.50 somatic 變異的 VAF 0.20 2+1 0.33 1+0 乘以二之後得到 0.400.67 兩者皆非真值 0.50 關係式的分母含兩條單倍型的拷貝數,故此錨僅在二倍體區段成立 —— 而該類區段在腫瘤基因體上往往不是多數。
somatic 變異的 VAF 直方圖與其峰。 1+1 區段上 clonal 變異的期望 VAF 為純度的一半,故峰位置乘以二即為純度估計。 右側標出此路徑的適用範圍:關係式 VAF = p/2 的分母含兩條單倍型的拷貝數, 故僅在該區段確為 1+1 時成立。PURPLE 因此將此估計限於推得的拷貝數落於 1.82.2 且較小等位不低於 0.5 的區域。

非整數的拷貝數與 subclonality

ASCAT 的模型嚴格為 clonal:全部腫瘤細胞在每個區段上共用同一組拷貝數。 subclonal 的拷貝數變異因此表現為真正非整數的 n^,直接推高距離, 並可能使極小點位移。ASCAT 的說明文件亦建議改用其他工具處理 subclonal 拷貝數。

PURPLE 亦未在擬合中建立 subclonal 的混合模型,但它允許輸出非整數的拷貝數, 並另行回報兩個量:多克隆比例(與整數相距超過 0.25 的區段所佔的比例), 以及每個 somatic 變異的變異拷貝數

VCN=VAF·(p·CN+2·(1p))p

此即 M8 的 VAF 關係式反解為 μ·c。PURPLE 回報的是 VCN 本身, 而非 —— 兩者相差一個 multiplicity。

再以峰值分解在 VCN 的分布上找出各峰,將峰值低於 0.85 者標記為 subclonal。 此處要留意其位階:subclonality 是在純度與倍體確定之後才被處理的, 並未回頭參與擬合。若真實樣本的 subclonal 拷貝數變異範圍甚廣, 則 (p,κ) 的估計已先受其影響,而該影響不會出現在多克隆比例之外的任何指標上。

相關常數(以程式碼為準):純度搜尋下限 0.08、步長 0.01; 倍體搜尋範圍 [1.0,8.0];事件懲罰係數 0.4σ=0.05、下限 1.5; 等位比例的模糊門檻 0.535;somatic 擬合的純度下限 0.17;品質警示門檻為純度低於 0.20。 其公開文件在事件懲罰係數、基礎偏離量與純度步長三處與程式碼不一致,引用時以程式碼為準。

兩種選解策略:切割可行域與重新加權曲面 兩欄對照同一件工作 —— 從一族給出相同觀測的候選解中選出一個。 左欄的做法是切割:先把全部候選列出來,再用四道是非條件逐一淘汰, 倍體要落在界內、純度不得低於零點二、零拷貝的區段要佔到一定比例、擬合優度要達標。 剩下一個就輸出,剩下零個就回報失敗。 這個做法的性質是透明而脆弱:它不會給出勉強的答案,但它經常什麼都不給。 右欄的做法是重新加權:不淘汰任何候選, 而是給每個候選加上兩種連續的代價,一種偏好簡約的拷貝數, 一種依純度調整對整數偏離的容忍度,然後取總分最低者。 右欄另外多一條左欄沒有的東西:一個來自另一種資料的約束, 也就是 somatic 變異的 VAF。 那條約束不沿著這一族解的方向變化,所以它能真正把族切開。 讀法是:兩者的觀測模型完全相同,分歧全部落在選解的依據上。 兩種選解策略 兩者的觀測模型相同,皆為前述的深度式與等位比例式;分歧全部落在如何自格點族中選出一點。 切割可行域 列出全部局部極小 倍體須落於界內 純度不得低於 0.20 零拷貝區段須佔 2% 以上 擬合優度須達 80 剩一點即輸出 剩零點即回傳失敗 重新加權曲面 保留全部候選,逐一評分 事件懲罰:偏好簡約的拷貝數 偏離懲罰:容忍度隨純度調整 somatic 變異的 VAF 來自另一種資料,不沿格點族的方向變化 故可真正切開該族 取總分最低者 並回報族內其餘候選的範圍 左側透明而脆弱:不給勉強的答案,但經常什麼都不給。右側較穩健,惟其常數係由特定隊列調校而得。
兩種破解簡併的方式並排。 左側 ASCAT:先列出全部局部極小,再以四道硬性條件切割可行域,剩一則輸出、剩零則回報失敗。 右側 PURPLE:以連續的懲罰對整個曲面重新加權,並引入一條來自另一種資料的約束 (somatic 變異的 VAF)。兩者的差別不在模型,在於選解的依據

八、可辨識與不可辨識的量

是否可由深度與等位比例決定所需的額外條件
相對拷貝數輪廓(各區段的高低關係)
各區段是否存在等位失衡
m(整體平移量)條件成立時可基因體上存在零拷貝的區段
k=1/2(可否再對半)存在奇數的等位特異拷貝數
k=2(是否加倍)不可任何解皆可再加倍;須靠簡約先驗或樣本外量測
ρ(全基因體皆為 1+1 時)不可需要樣本外的量測或另一種資料
k=2(全部拷貝數皆為偶數時)不可同上

末兩列即為此路線的邊界。可用以跨越該邊界的錨依強度排序如下:

  1. somatic 變異的 VAF。變異的拷貝數須為不超過主要等位的正整數, 且 clonal 變異在 1+1 區段的 VAF 恆為 p/2。 此為同一份資料之內最強的錨。惟其對加倍簡併的作用是有條件的: 起作用的並非 VAF 的數值本身(該值在加倍變換下不變), 而是「變異拷貝數須為不超過主要等位的正整數」這條約束 —— 它使「把拷貝數對半」在需要半整數 multiplicity 時不可行。 因此它只在存在加倍之後才發生的變異、或對變異發生時序另有假設時才定得下模式。 下篇第七節以代數證明此點。
  2. 零拷貝的證據。定住 m,但對 k 無作用。
  3. 簡約性偏好與群體先驗。PURPLE 的事件懲罰、ASCAT 的倍體界限皆屬此類。 其性質為偏好而非證據,樣本落在偏好之外時即失效。
  4. 樣本外的量測。流式細胞術的 DNA 指數、FISH、病理判讀的腫瘤細胞比例。 可靠但需另行取得,且多數研究資料不具備。

第一項的形式值得留意:它之所以有效,是因為 somatic 變異的存在本身 對「這些分子來自腫瘤細胞」給出一個與拷貝數無關的計數。 但其可用範圍受限於 VAF=p/2 一式的成立條件 —— 該式的分母含兩條單倍型的拷貝數,故僅在二倍體區段成立, 而腫瘤基因體上二倍體區段往往不是多數。下篇處理的正是這個限制。

真實資料與證據

在 in silico 混合上的實測

LongPhase-S 的研究在 8 個 ONT 與 6 個 PacBio 細胞株資料集上, 以 M8 所述的方式(依實測 coverage 抽樣後合併)合成腫瘤 DNA 比例 0.2/0.4/0.6/0.8/1.0 的混合樣本,腫瘤側 50×、正常側 25×, 並將各估計器的輸出換算至同一個 f 的尺度上比較:

方法MAER2備註
LongPhase-S(三種設定)0.03約 0.98 資料集層級交叉驗證:MAE 0.0401 ± 0.0178、R2 0.9603 ± 0.0333
ASCAT0.19約 0.08 六個資料集在期望值 0.2 時預測為 1.0;一個資料集在期望值高於 0.4 時無法產出結果
PURPLE 該研究未報告數值,其敘述為預測值大致接近期望值
Battenberg 未能在合理時間內完成,未納入比較

低純度失效的機制

「期望值 0.2 而預測為 1.0」的偏差量遠大於任何合理的量測雜訊, 其成因為結構性的,可由前述兩節直接導出。

ASCAT 的純度下限 MINRHO = 0.2硬性條件, 自動搜尋在結構上不可能回傳低於此值的解。而格點變換的兩式 ρ=ρ/(k(1ρ)+ρ(1m))ψt=k·ψt+2m m 同向m 增加時前者的分母減小、後者直接增加, 故純度與倍體一併上升

兩者相合的後果是:真值低於下限時,族中最接近而仍屬可行的解, 是 m 較大的那一個,而它的純度與倍體同時高於真值。

因此純度與倍體是被一併推高的,而非各自帶有雜訊。 兩者的偏誤同向且相關,此為判別此類失效與量測誤差的依據: 量測誤差在重複實驗中會改變方向,格點跳躍不會。

真值落在純度下限之外時:純度與倍體被一併推高 橫軸是純度,縱軸是腫瘤倍體。斜線上的一串點是那一族給出相同觀測的候選解, 沿著這條線走,純度與倍體是一起增加的。 真值那一點落在左下角,位在純度下限之外,也就是搜尋不會回傳的區域。 搜尋只能挑線上位於可行區內的下一點, 而那一點的純度與倍體同時高於真值 —— 兩個參數的偏誤方向相同。 右邊把這種偏誤和量測雜訊放在一起比。 量測雜訊是連續的、每次重複都會換方向、兩個參數各自獨立; 格點跳躍是離散的、重複做還是跳到同一點、兩個參數同向。 所以看到一個估計器在低純度樣本上系統性地把純度和倍體一起報高, 該懷疑的是可辨識性而不是雜訊。 讀法是:偏誤的形狀本身就是診斷依據。 真值落在可行域之外時的行為 橫軸為純度、縱軸為腫瘤倍體。斜線上的點為格點族,沿線移動時兩個參數同向變化。 0.0 0.2 0.4 0.6 0.8 1.0 純度 1 2 3 4 倍體 下限之外 真值 回傳值 族內其餘候選 純度與倍體同時被推高 與量測雜訊的區別 量測雜訊 · 連續,幅度隨深度縮小 · 重複實驗時方向會改變 · 兩個參數各自獨立 格點跳躍 · 離散,幅度與深度無關 · 重複實驗時跳到同一點 · 兩個參數同向偏移 · 加深定序不改善 偏誤的形狀即為診斷依據:低純度樣本上純度與倍體被系統性地一併報高,所指向的是可辨識性而非雜訊。
真值落在純度下限之下時的行為。 橫軸為純度、縱軸為倍體,斜線上的各點即格點族。真值一點位於可行域之外(左下的灰色區), 搜尋只能回傳線上位於可行域內的下一點 —— 而該點的純度與倍體同時高於真值。 右側標出此現象與雜訊的區別:格點跳躍為離散的、可重現的、兩個參數同向的偏移。

兩個純度下限,數值不同

「此方法可偵測到多低的純度」一問有兩個答案,兩者皆屬實,適用的敘述不同。

方法演算法下限可信下限
ASCAT0.20(MINRHO,自動搜尋不回傳更低的值)同上
PURPLE0.08(MIN_PURITY_DEFAULT0.20(低於此值即標記品質警示)

PURPLE 原始研究的隊列即以 20% 為界:純度低於此值的 385 個樣本被排除, 理由是可靠而完整的 somatic 變異偵測在該純度之下不可行 —— 此與 M8「低 purity 對 somatic variant detection 的影響」一節所述為同一件事。 其說明文件亦指出,將搜尋步長由 1% 降至 0.5% 以下, 有可能在 0.08 之下取得擬合。兩個數字須分別引用: 談「演算法能回傳什麼」時用前者,談「結果可否採信」時用後者。

此一區別對本主題的重要性在於:LongPhase-S 所報告的優勢集中在 腫瘤 DNA 比例 0.2 及其以下的區間,而該區間恰為兩個對照方法各自的下限附近。 比較結果因此有一部分反映的是對照方法的設計範圍,而非其模型能力。

三項須注意的事項

其一,PURPLE 沒有數值,因此不能宣稱勝過它。 上表中 PURPLE 一列為空白,該研究對其表現的敘述僅為定性。 在跨平台的部分,PacBio 資料集上 PURPLE 與 LongPhase-S 皆能追蹤期望值, ASCAT 與 Battenberg 則否。可支持的結論是「優於 ASCAT」,而非「優於現行所有方法」。

其二,此比較的對象並非各方法原本的輸出。 ASCAT、PURPLE、Battenberg 輸出的是 (p,κ),經 f=pκ/(pκ+2(1p)) 換算後才進入比較。換算式假設正常細胞為二倍體, 且把兩個各自帶有不確定性的量合併為一個; 倍體估計的偏誤會經此式傳遞至 f。上表的 0.19 因此同時包含純度與倍體兩處的偏誤。

其三,真值為 f 而非 p 依 read 比例合成的混合樣本,所控制的量是分子比例。 以此資料評比一個以細胞比例為輸出的方法時,須先將真值換算為 p, 而該換算需要來源細胞株的倍體。此點在下篇展開。

預測與結果檢視

ASCAT 在六個資料集上,於期望值 0.2 時預測為 1.0。 若更換 somatic 變異的 caller、將定序深度自 50× 提高至 200×、 或改用位點數多一個數量級的等位軌道,此一偏差可否改善?

展開答案

皆不可,因為這不是精度問題。

資料量僅透過目標函數影響結論,而目標函數沿格點族的方向為常數 —— 族中各點對深度與等位比例給出恆等的期望值。 增加深度使各點的估計更精確,但不改變「這些點彼此無法區分」這件事。

此處須區分兩個概念。精度指兩種情形已可區分之後,量測是否準確, 它隨資料量改善。指資料原則上能否區分兩種情形, 它不隨資料量改善。上述偏差屬於後者,另加一道硬性下限所造成的截斷。

可改變結果的只有一件事:改變可行域。 放寬 MINRHO 可使搜尋觸及低純度區,但這只是把截斷移開, 並未解決族內選點的問題;真正的解法是引入一個不沿格點方向變化的約束, 即前述四類錨之一。PURPLE 的 somatic 懲罰與 somatic 擬合退路即為此類設計。

此一論證形式在本教材中並非首次出現: subclone 重建中「兩群細胞比例相等時增加定序深度無助於分群」屬於同一類。 兩處的共同結構是似然沿某個方向為常數,而資料量只作用於似然。

與下篇的銜接

本頁的結論可歸為三句:深度與等位比例決定的是一個格點族而非一組解; 族內選點必須依賴錨或偏好;而同一份資料之內最強的錨是 somatic 變異的 VAF, 且其對加倍簡併的作用取決於整數 multiplicity 的約束,並非無條件成立。

該錨的限制已在第七節指出:VAF=p/2 的分母含兩條單倍型的拷貝數, 故僅在二倍體區段成立,PURPLE 因而只能在推得拷貝數落於 1.8 至 2.2 的區域使用它。

下篇處理的問題由此而生。當 read 已帶有單倍型標記時, 同一個 somatic 訊號可以在單一條單倍型之內計數 —— 分母因而不含另一條單倍型,上述限制隨之消失。 下篇先由原始碼寫出 LongPhase-S 現行統計量的閉式, 說明它與本頁的等位比例式為同一個形式,再據以建立聯合估計式。

原始文獻與程式碼

ASCAT:Van Loo P et al., Allele-specific copy number analysis of tumors, PNAS 2010;107:16910–16915(doi 10.1073/pnas.1009843107); 多樣本分割見 Ross EM et al., Allele-specific multi-sample copy number segmentation in ASCAT, Bioinformatics 2021;37:1909–1911(doi 10.1093/bioinformatics/btaa538)。 程式碼在 github.com/VanLoo-lab/ascat。 本頁的前向式、反解式、距離函數與四道硬性條件的常數,均取自 ASCAT/R/ascat.runAscat.RASCAT/R/ascat.prepareHTS.R

PURPLE:Priestley P et al., Pan-cancer whole-genome analyses of metastatic solid tumours, Nature 2019;575:210–216(doi 10.1038/s41586-019-1689-y)。 程式碼與說明文件在 github.com/hartwigmedical/hmftoolspurple 之下。本頁的擬合分數、事件懲罰、偏離懲罰與各項常數,取自 PurityAdjuster.javaPloidyDeviation.javaFittedPurityFactory.javaPurpleConstants.java

f 的換算式源自 ABSOLUTE:Carter SL et al., Absolute quantification of somatic DNA alterations in human cancer, Nat Biotechnol 2012;30:413–421(doi 10.1038/nbt.2203)。 Battenberg 見 Nik-Zainal S et al., The life history of 21 breast cancers, Cell 2012;149:994–1007(doi 10.1016/j.cell.2012.04.023)。

「真實資料與證據」一節的實測數值出自 LongPhase-S 的預印本 (bioRxiv, 2025,doi 10.1101/2025.11.20.689492), 程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-s。 參數名稱、欄位與常數一律以原始碼為準

本模組術語

B-allele frequency(B 等位頻率)
在 germline heterozygous 位點上,兩個等位其中一個所佔的 read 比例。腫瘤樣本中混入的正常細胞在此值上恆為 0.5,該常數即為反推純度所依據的錨。ASCAT 與 PURPLE 皆刻意不做相位,故其標號在各位點之間獨立。
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
VAF(變異等位基因頻率)
在某個位點上,支持 alt allele 的 read 佔全部 read 的比例。VAF 不等於帶有這個突變的細胞比例
allele-specific copy number(等位特異拷貝數)
把一個區段的總拷貝數拆成兩個親源等位各自的份數,通常記為 major 與 minor。總拷貝數相同而兩個等位不同的狀態(例如 2+0 與 1+1)在深度上完全一致,只有 B-allele frequency 分得開 —— copy-neutral LOH 即為此類。
cancer cell fraction(癌細胞比例)
帶有某個特定突變的腫瘤細胞佔全部腫瘤細胞的比例。用來區分 clonal(1)與 subclonal(<1)突變。不等於 VAF。
identifiability(可辨識性)
資料在原則上能否區分兩組不同的參數值。若兩組參數對任何可能的觀測給出相同的機率,則兩者不可辨識,增加深度、變異數目或更換工具皆無作用 —— 須改變的是可行域,例如加入外部約束或錨。此性質與精度不同:精度指可區分之後量得準不準。
logR(深度比對數)
同一位點上腫瘤與正常樣本的 read 深度比取以 2 為底的對數。ASCAT 再以全基因體比值的平均重新置中,因此 0 並不代表兩份拷貝 —— 倍體須由擬合結果另行推算。單獨的 logR 只能決定拷貝數輪廓至一個仿射變換。
ploidy(倍性)
細胞內染色體套數。多數正常常染色體為 2(diploid);腫瘤可呈現 3、4 或其他非整倍體狀態。
tumour DNA fraction(腫瘤 DNA 比例)
樣本 DNA 中源自腫瘤的比例。與 tumor purity(細胞比例)在 aneuploid 或 WGD 的情況下會不一樣。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。
whole-genome doubling(全基因體加倍)
腫瘤演化過程中整套基因體複製一次的事件,使各處拷貝數同時加倍。其重要後果是可辨識性:若加倍後所有等位特異拷貝數皆為偶數,則該解與未加倍的解對深度與等位比例給出完全相同的觀測;純度為 1 時兩者逐點相同。

研究指引 · 純度、倍體與腫瘤 DNA 比例 · Part 2 — the closed form and three channels

中篇:單倍型失衡的閉式與三個觀測通道

先界定現行迴歸的四項限制 —— 輸出只有 DNA 比例、兩種成因壓在同一個數上、折疊偏移進入特徵、係數含突變負荷;再由原始碼寫出單倍型失衡的閉式,並給出一個對另一條單倍型免疫的純度訊號。

建議先修:純度與倍體的聯合估計

本模組學習目標

  • 說明現行迴歸的輸出何以只能是 tumour DNA fraction,且此為模型形式所決定而非實作選擇
  • 寫出 GHIR 的無雜訊值,說明它與上篇的等位比例式同形,以及它為何不是有限深度下的期望值
  • 說明 max() 的折疊效應如何同時作用於 GHIR 分布的中位數與四分位距
  • 以位點層級的四格表定義單倍型內 somatic 佔比,並說明它只對另一條單倍型的拷貝數免疫
  • 界定該錨所解決與未解決的兩種不可辨識性,並說明全基因體加倍為何仍需外部依據
  • 說明合成混合樣本何以不能直接作為 cellular purity 的真值,且該誤用會改變方法之間的排名

為什麼重要

先把現行流程估的量講清楚

M12 已完整教過 LongPhase-S 的四個階段。此處只需要第二階段的一句話摘要: 把全基因體的 分布收成中位數與四分位距兩個數字, 再以一條二次多項式迴歸換成一個純量。

那個純量是 f, 不是 p。理由不在實作,在模型形式:

訓練標籤是 f 合成樣本依 read 數混合,控制的是分子的比例(上篇第三節;重要區分 #18)。 迴歸學到的是「兩個特徵 → 這個標籤」,故其輸出恆在 f 的尺度上
模型裡沒有 κ 換算式 p=2f/(κ(1f)+2f) 需要倍體,而流程不做拷貝數分段、 不估等位特異拷貝數、也沒有任何參數對應倍體。缺了 κ,換算跑不動

兩者相合的結論是:現行流程在原理上就不可能輸出 p。 子指令名為 estimate_purity、輸出欄位寫 Tumor purity:, 是命名與量不一致,不是模型少估了一個數(M12 的重要區分 #21)。

此點須先講,因為它決定了本頁後續每一句話的位階: 現行迴歸在 f 上的實測成績(MAE 0.03)成立且不受此影響; 本頁與下篇要換掉的不是它的準確度,而是它的輸出集合

現行迴歸的四項限制

除了輸出集合之外,這條迴歸另有三項可由代數直接看出的限制。 四項並列如下,每一項在本頁的哪一節導出亦一併列出:

限制內容本頁何處導出
輸出集合只給 fpκ 與各段拷貝數皆不在輸出之中,且無法由 f 反推上一小節;第二節第三個 h4
兩種成因壓在同一個數上GHIR 的偏移同時來自 somatic 掏空與拷貝數失衡。單一個 GHIR 值分不開兩者 —— 二倍體 clonal 的位點與等位特異拷貝數 1+3 的位點可給出完全相同的值第二節末
折疊偏移進入兩個特徵max 使真實平衡的位點在有限深度下不給出 0.5。中位數與四分位距兩者皆同時受純度與深度影響,故不是兩個獨立訊號;換深度設定即須重新訓練第三節
係數有一部分在描述突變負荷GHIR 的標籤是整條 read 的判定,故一條 read 在跨距內任一處帶 somatic 等位就離開 germline 計數。固定純度之下 GHIR 隨突變負荷下降,方向與純度降低相同第二節第四個 h4

四項的性質不同,值得分開看。第一項是不可能(模型形式所決定), 第三、四項是可檢驗的混淆(兩者皆不需要新資料即可驗證), 第二項則是可辨識性問題 —— 它不隨資料量改善,只能靠改變量測方式解決。 第二項也正是接下來三節的出發點。

上篇留下的限制

上篇的結論為:深度與等位比例所決定的是一個格點族, 族內選點須依賴錨或偏好,而同一份資料之內最強的錨是 somatic 變異的 VAF。 該錨的限制亦已指出 —— 其關係式 VAF=p/2 的分母含兩條單倍型的拷貝數, 故僅在二倍體區段成立。PURPLE 因此將此估計限於推得拷貝數落於 1.8 至 2.2、 且較小等位不低於 0.5 的區域。

腫瘤基因體上符合該條件的區域往往不是多數, 而不符合的區域(LOH、單一等位擴增、非整倍體)恰是腫瘤最具資訊的部分。 錨最有力之處,正是它被排除之處。

單倍型標記改變了分母

當 read 已帶有單倍型標記時,同一個 somatic 訊號可以在單一條單倍型之內計數: 分子為該單倍型上帶有 somatic 等位的分子數,分母為該單倍型的全部分子數。 另一條單倍型完全不進入這個比值,前述的限制隨之消失。

本頁的內容即為此一觀察的展開,順序與上面那張表一致: 先由原始碼寫出現行統計量的閉式,把四項限制逐一導出來(第一至三節); 再據以勾勒一個可同時輸出 cellular purity 與 ploidy 的估計式(第四、五節), 使 tumour DNA fraction 由 pκ 導出,而非由一條擬合曲線直接給出。

本頁的位階:機制假說與原型,尚不是已完成的估計器

以下各節建立的是機制與代數關係,並指出現行流程把哪兩件事壓在同一個統計量裡。 它尚未構成一個可用的 purity/ploidy/拷貝數聯合估計器, 亦不宣稱優於現行的 DNA 比例迴歸 —— 後者在其所針對的量上已有 MAE 0.03 的實測成績。

距離一個可宣稱改善的估計器,至少還差四件事,各見其所在的節次: 位點層級的四格表尚未產生(第一、五節); cμ 為自由參數時純度只有下界(第五節); 分段不能沿用 phase block(下篇第三節); 偵測與標記誤差尚未進入似然(下篇第二節與第六節)。

現行流程與本頁所建立的流程:輸出的量不同 三排流程並列。 最上排是現行的做法:把每個 somatic 位點的單倍型失衡收成一個分布, 取中位數與四分位距兩個數字,再用一條擬合出來的曲線換成腫瘤 DNA 比例。 輸出只有一個純量,細胞比例與倍體都不在裡面。 中排是本頁要建立的做法:三個觀測通道分別量在生殖系異型合子位點、 整個視窗、以及體細胞變異位點上, 一起估出細胞比例與每一段兩個等位各有幾份, 倍體是各段拷貝數的加權平均,DNA 比例再由細胞比例與倍體換算出來。 輸出因此有四個量,而且每一個都有物理意義。 最下排是上篇的兩個對照方法:它們輸出細胞比例與倍體, 要進到同一個尺度上比較時,還得先經過那條換算式。 讀法是:三排的差別不在準確度,在於輸出了什麼。 三種流程的輸出 同一份腫瘤與正常配對資料,三種處理方式。差別不在準確度,而在輸出的量。 現行 GHIR 分布 每個 somatic 位點一個值 中位數與四分位距 擬合而得的曲線 輸出:DNA 比例 f 純度與倍體不在輸出之中 本頁 germline 位點的深度比 視窗的總深度比 somatic 位點的錨 聯合估計 輸出:純度 p、每段的等位特異拷貝數 倍體 κ 為各段拷貝數的加權平均 DNA 比例 f 由 p 與 κ 換算 四個量,皆有物理意義 上篇 深度與等位比例 → 純度 p 與倍體 κ 換算式 方可與上排比較 三排皆可給出 f。差別在於中排的 f導出量,其誤差可追溯至 pκ 兩者。
上排為現行流程:GHIR 分布經中位數與四分位距兩個特徵, 以迴歸給出 tumour DNA fraction 一個純量;純度與倍體不在輸出之中。 下排為主題二所要建立者:三個觀測通道分別量在 germline 位點、視窗全體與 somatic 位點上, 聯合估計純度與每段的等位特異拷貝數,倍體與 DNA 比例由兩者導出本頁只處理三個通道各自量到什麼,合成一條估計式屬下篇。 右側對照上篇:ASCAT 與 PURPLE 輸出純度與倍體之後,須以換算式才進入同一個尺度。

現行實作已有的原料,以及還缺的一格

現行實作在每個 somatic 位點上,已將覆蓋該位點的 read 依標籤分入 H1H2H1-1H2-1H3 五個計數 (SomaticVarCaller.cppReadHpCount), 並已算出三個比值:germlineHaplotypeImbalanceRatio(即 )、 allelicImbalanceRatiosomaticHaplotypeImbalanceRatio

但這五個計數是read 層級的標籤(見第一節的說明框), 不是位點層級的等位計數,因此不能直接相除當作任何單一位點的等位比例。 下文所需的三個觀測通道之中,只有總深度比可由現有輸出直接取得; 單倍型深度比需在 germline heterozygous 位點上另行彙總, 而單倍型內 somatic 佔比需要一張目前尚未產生的位點層級四格表。

可容許的說法是:原料(每條 read 的單倍型歸屬與逐位點等位)已經在管線裡variantsHPtumorPosReadCorrBaseHP), 缺的是彙總方式與模型;不可說成「只要把既有的兩個數字相除」。

本頁討論範圍限於單一樣本的 cellular purity、ploidy 與等位特異拷貝數; subclonality 僅作為混淆項出現,其重建屬另一主題。

概念與互動

一、GHIR 的定義,以原始碼為準

GHIR(i)=max(RCH1(i),RCH2(i))RCH1(i)+RCH2(i)

i 為一個候選 somatic 位點;RCH1RCH2 為該位點上標為 H1H2 的 read 數。實作見 HaplotagStrategy.hcalculateHaplotypeImbalanceRatio

實作補充:GHIR 分母只含 H1 與 H2

分母只有 H1H2 兩個計數。 H1-1H2-1H3 與未標記者皆不在分母之內。 這一點決定了後續整個閉式的形狀,且與「涵蓋該位點的總 read 數」一語不同; 以式子與原始碼為準。

帶有 somatic 等位的 read 不會落入 H1H2 標記程序先判定該 read 是否帶有 somatic 等位(tumorMaxHPcount != 0), 帶有者才進入 H1-1H2-1H3 的分支; 兩個 germline 計數僅收未帶 somatic 等位的 read

這五個計數是 read 層級的標籤,不是該位點的等位計數

hpResult 每條 read 只算一次,其依據是該 read 整條上的 somatic 證據;隨後 for(auto pos : tumorSnpPosVec) ReadHpCount[hpResult]++ 把這個標籤記到該 read 覆蓋的每一個 somatic 位點上。

後果是:位點 iReadHpCount[H1-1] 計的是 「在 i 上、且在這條 read 的某處帶有 somatic 等位」的 read, 不必然在 i 這個位置帶有 ALT。 一條 read 若在別處帶 somatic 變異、而在 i 是 REF,它仍被計入 iH1-1,且同時被計入 iH1

因此這組計數可以支持「這個區域的單倍型是否失衡」, 但不足以定義任何單一位點的等位比例。第五節據此重寫。

實作補充:GHIR 的折疊與邊界值

max() 使值域為 [0.5,1]。 這是一個折疊統計量,與上篇所述 AMBER 取兩個等位較大者的做法同型。 邊界情形另有規定:兩個計數皆為零時回傳 0,僅其一為零時回傳 1, 前者被後續濾波當作哨兵值排除。

一個 somatic 位點上的五個計數,以及 GHIR 的分母只含其中兩個 一個體細胞變異位點,覆蓋它的分子依標籤分成五堆。 兩堆是生殖系的:來自單倍型一而沒有帶體細胞等位的,以及來自單倍型二的。 兩堆是體細胞子單倍型的:帶著體細胞等位而且能追溯到單倍型一或單倍型二的。 最後一堆是無法歸屬單倍型的。 虛線框圈出單倍型失衡比的分母,裡面只有前兩堆, 體細胞的那兩堆與無法歸屬的那一堆都不在分母裡。 右邊標出關鍵的一步:一個分子只要帶著體細胞等位, 判定程序就會先把它送進體細胞的分支,所以它不會留在生殖系那一堆裡。 單倍型一的分子因此被搬走一部分,單倍型二則原封不動。 讀法是:這個統計量的偏移,來自其中一堆被搬空,而不是來自兩堆本身的大小。 一個 somatic 位點上的五個計數 覆蓋此位點的分子依標籤分堆。虛線框即為 GHIR 的分母 H1 單倍型 1,未帶 somatic H2 單倍型 2 H1-1 單倍型 1,帶 somatic H2-1 單倍型 2,帶 somatic H3 無法歸屬 0 條 GHIR 的分母 H1 + H2 = 4 + 6 = 10 不在分母之內 H1-1 = 3  H2-1 = 0  H3 = 2 GHIR = max(4, 6) ÷ 10 = 0.60 判定程序先看該分子是否帶有 somatic 等位:帶有者一律進入右側三堆,不會留在 H1H2 因此純度上升時 H1搬空H2 不變 —— 這就是 GHIR 隨純度上升的機制,下一張圖展開。
一個 somatic 位點上的 read 依標籤分入五個計數。 虛線框標出 GHIR 的分母:只有 H1H2。 右側標出關鍵的一步 —— 帶有 somatic 等位的分子離開 H1 進入 H1-1, 因此 H1 被掏空,而 H2 不變。

二、理想化焦點統計量的無雜訊值

三個計數的分子數

本節先處理一個理想化的量:假設該 read 跨距之內 只有焦點這一個 somatic 變異。此假設使「這條 read 帶不帶 somatic 等位」 等同於「它在焦點位點帶不帶 ALT」,五個計數因而可以直接寫成焦點位點的函數。 下一小節說明放掉此假設之後會變成什麼。

設 somatic 變異位於 germline 單倍型 1。令 p 為 cellular purity、 n1n2 為該處腫瘤細胞的等位特異拷貝數、 c 為帶有此變異的腫瘤細胞比例、μ 為 multiplicity。 正常細胞在兩條單倍型上各一份。各計數所對應的分子數為:

計數分子數來源
H1-1p·c·μ帶有 somatic 等位的腫瘤分子
H1p·(n1c·μ)+(1p)單倍型 1 上帶 somatic 等位者,含全部正常細胞的一份
H2p·n2+(1p)單倍型 2 的全部分子
GHIR=max(p(n1cμ)+(1p),p·n2+(1p))p(n1+n2cμ)+2(1p)

此式與上篇的等位比例式為同一個形式。 將上篇的 nB 代換為 n1cμ、總拷貝數代換為 n1+n2cμ, 兩式逐項對應。差別僅在兩處:分子外多一層 max(折疊), 以及腫瘤側的拷貝數被 somatic 的 cμ 扣掉一塊。

理想化焦點統計量的無雜訊值與等位比例式逐項對應 兩條式子上下對齊,逐項比對。 上面是上篇的等位比例式:分子是純度乘上某一個等位的拷貝數, 再加上正常細胞貢獻的那一份;分母是這個位置讀到的全部 DNA。 下面是理想化焦點統計量的無雜訊值,也就是假設這條 read 的跨距內只有焦點這一個體細胞變異時的值:分子的第一項一樣是純度乘上單倍型一的拷貝數, 但要先扣掉被體細胞等位佔走的那一塊,也就是帶原細胞比例乘以多重度; 加上正常細胞那一份;分母同樣是全部 DNA,同樣扣掉那一塊。 差別只有兩處:被扣掉的那一塊,以及最外面多了一層取較大值。 因為形式相同,上篇建立的整套機制都可以直接接上來: 反解式、那一族給出相同觀測的參數、以及以離整數多遠為目標的擬合方式。 讀法是:這不是一個新的統計量,它是舊的那一個,只是量在體細胞變異的位置上。 兩式逐項對應 上為上篇的等位比例式,下為本頁 GHIR 的期望值。四欄由左至右對齊比較。 外層 分子的腫瘤項 分子的正常項 分母 等位比例 ρ · n_B (1 − ρ) ρ(n_A+n_B) + 2(1−ρ) 理想化焦點 統計量 max( · ) p(n₁ − cμ) (1 − p) p(n₁+n₂−cμ) + 2(1−p) 完全相同 差異一:被扣掉的 帶有 somatic 等位的分子離開了 germline 計數, 故腫瘤側的拷貝數要扣掉這一塊。 差異二:外層的 max 折疊,使值域為 0.5 至 1。作用與上篇隨機化 等位標號相同,代價見下一節。
兩式逐項對齊。左為上篇的等位比例式,右為 GHIR 的無雜訊值。 分母的兩項完全對應;分子的差別只有 somatic 所扣掉的 與外層的 max形式相同的後果是:上篇整套機制可直接接上來 —— 反解式、格點族、以及以整數距離為目標函數的擬合方式皆然。

二倍體、clonal、multiplicity 為 1 的特例

代入 n1=n2=1c=1μ=1H11pH21,故

GHIR=12p,p=21GHIR

p=0 時為 0.5,p=1 時為 1.0,區間內單調遞增。

p0.00.20.50.91.0
GHIR0.5000.5560.6670.9091.000
純度上升時 H1 被搬空而 H2 不變,故 GHIR 單調上升 三格是同一個體細胞變異位點在三種細胞比例之下的樣子, 每格都是二十份分子,變異是所有腫瘤細胞都帶有、而且每個帶原細胞只佔一份拷貝。 左格細胞比例零點二:二十份分子裡有兩份來自腫瘤細胞的單倍型一, 這兩份都帶著體細胞等位,所以被搬到體細胞那一堆; 留在單倍型一的剩八份,單倍型二仍是十份。 中格細胞比例零點五:搬走五份,單倍型一剩五份,單倍型二仍是十份。 右格細胞比例零點九:搬走九份,單倍型一只剩一份,單倍型二仍是十份。 單倍型二從頭到尾沒有變過,因為變異不在它上面。 取兩者較大的除以兩者之和,三格分別是零點五五六、零點六六七、零點九零九, 正好等於一除以二減細胞比例。 讀法是:現行流程用迴歸去擬合的那條曲線,其實有閉式,而且閉式就寫在圖上。 純度上升時發生了什麼 同一個 somatic 位點,三種純度。每格 20 份分子;變異為 clonal,multiplicity 為 1,拷貝數為 1 + 1 純度 0.20 H1(單倍型 1,未帶變異) 8 H2(單倍型 2) 10 H1-1(已搬離 H1) 2 GHIR = 10 ÷ 18 = 0.556 純度 0.50 H1(單倍型 1,未帶變異) 5 H2(單倍型 2) 10 H1-1(已搬離 H1) 5 GHIR = 10 ÷ 15 = 0.667 純度 0.90 H1(單倍型 1,未帶變異) 1 H2(單倍型 2) 10 H1-1(已搬離 H1) 9 GHIR = 10 ÷ 11 = 0.909 H2 三格完全沒有變(變異不在其上);被純度改變的只有 H1,它的分子持續被搬往 H1-1 H1 = 1 − p  H2 = 1  GHIR = 1 ÷ (2 − p)  p = 2 − 1 ÷ GHIR 現行流程以迴歸擬合的正是這條曲線,而它有閉式
三格純度階梯,同一個 somatic 位點。 純度上升時,單倍型 1 的分子H1 遷移至 H1-1H1 因而被掏空,而 H2 全程不變。 GHIR 取兩者較大者除以兩者之和,故隨純度單調上升 —— 三格的值分別為 0.556、0.667、0.909。 此即現行迴歸所擬合的那條曲線,而它有閉式。

式中的 p 是 cellular purity,而迴歸的標籤是 DNA 比例

上式須逐字讀:GHIR=1/(2p) 的自變數是 p, 即該位點所在處細胞的腫瘤佔比。它之所以是細胞比例而非分子比例, 可由第二小節的三行計數直接看出 —— 每個正常細胞在兩條單倍型上各貢獻一份, 每個腫瘤細胞按其 n1n2 貢獻。分母裡沒有任何一項是 f

而迴歸擬合的標籤是 f(上篇第三節)。 兩者不是同一個量,也不是同一個層級p 逐位點成立、f 是全基因體的單一數。 以來源細胞株的倍體 κ 為變數,看同一個 1+1 位點在各混合樣本上實際給出什麼:

來源細胞株的 κ2.0(二倍體)3.24.0
標籤 f=0.20 對應的 p0.2000.1350.111
該樣本 1+1 位點的 GHIR0.5560.5360.529
標籤 f=0.60 對應的 p0.6000.4840.429
該樣本 1+1 位點的 GHIR0.7140.6600.636

末列的跨度為 0.078。此量值得與本節與下一節的另外兩個數並排: 突變負荷 50/Mb 所造成的位移為 0.089,深度 20 時的折疊偏移為 0.088。 三者同一個數量級,且皆非模型的自由參數。

迴歸的標籤與統計量的自變數不是同一個量 三段由左到右。 左段是一個混合樣本的兩層計數:六個細胞裡兩個是腫瘤細胞,故細胞比例是零點三三; 倍體為四時,分子層的腫瘤佔比變成零點五,那是 DNA 比例。 兩層之間隔著的就是腫瘤的倍體。 中段是單倍型失衡比在一個兩個等位各一份的位置上量到什麼: 每個正常細胞在兩條單倍型上各貢獻一份,每個腫瘤細胞按拷貝數貢獻, 所以式子裡的自變數是細胞比例,分母裡沒有任何一項是 DNA 比例。 右段是迴歸擬合的目標:合成樣本依 read 數混合, 所以標籤是 DNA 比例,學到的曲線輸出的也是 DNA 比例。 中段與右段之間刻意畫成兩個不同的量,中間隔著倍體這個模型裡不存在的參數。 最下方是同一個兩個等位各一份的位置在三種來源倍體之下實際給出的值: 標籤同為零點六時,二倍體來源給零點七一四,四倍體來源給零點六三六, 跨度零點零七八,與突變負荷和折疊偏移同一個數量級。 讀法是:迴歸能擬合得很好,是因為一條曲線同時吸收了兩段關係, 代價是係數裡含有訓練面板的倍體組成。 標籤是 f,自變數是 p 同一條迴歸的兩端量的不是同一件事,中間隔著一個模型裡不存在的參數。 一份混合樣本 ① 細胞層 p = 2/6 = 0.33 p × 倍體 κ ② 分子層 f = 0.50(此例 κ = 4 f 腫瘤細胞每個貢獻 κ 份,正常細胞 2 份 GHIR 在 1+1 位點上量到什麼 每個正常細胞在兩條單倍型上各一份 每個腫瘤細胞按 n₁n₂ 貢獻。 H1 1 − p H2 1 GHIR = 1 ÷ (2 − p) 分母裡沒有任何一項是 f 迴歸擬合的標籤 合成樣本依 read 數混合, 所以已知的那個數字是分子的比例。 f GHIR 的中位數與四分位距 → 同一個 1+1 位點,標籤同為 f = 0.60,來源細胞株的倍體不同 來源 κ = 2.0 p = 0.600 → GHIR 0.714 來源 κ = 3.2 p = 0.484 → GHIR 0.660 來源 κ = 4.0 p = 0.429 → GHIR 0.636 跨度 0.078,與突變負荷的 0.089 及深度 20 的折疊偏移 0.088 同一個數量級。 一條曲線吸收得了這段落差 —— 代價是係數裡含有訓練面板的倍體組成
迴歸的兩端量的不是同一件事。 左段為一份混合樣本的兩層計數,細胞層與分子層之間隔著倍體 κ。 中段為 GHIR 在 1+1 位點上量到的東西 —— 正常細胞在兩條單倍型上各一份,故分母裡沒有任何一項是 f。 右段為迴歸擬合的標籤,而合成樣本控制的是 read 數,故標籤是 f。 最下方是同一個 1+1 位點在三種來源倍體之下實際給出的值。

此表只變動一個變數,故須說明其人工之處:一個 κ=4 的基因體上, 1+1 的區段本來就不是多數,其餘區段的 GHIR 另有偏移 —— 那正是本節末的第二項限制。 表的用途不是預測某個樣本的 GHIR,而是證明標籤與自變數不是同一個量

迴歸仍能在同一批細胞株上取得 MAE 0.03,並不與此矛盾: 給定 κ 之後 fp 單調相關,故一條擬合曲線可以同時吸收 「p 到 GHIR」與「fp」兩段關係。 代價是所得的係數裡含有該訓練面板的倍體組成,而該組成不是模型的參數, 也不隨新樣本更新。

此項可檢驗,且不需要新的定序資料

把訓練面板的目標值由混合標籤 f 改為逐細胞株換算而得的 pκ 由公開的核型或既有的拷貝數分析取得),重新擬合同一條二次多項式。 若現行係數確實只在描述 f,兩組係數應有可量測的差距, 且該差距隨面板的倍體分散度增大。

此檢驗與本節末「依突變負荷分層後重擬合」為同一類: 兩者都是在問「係數裡混進了什麼」,都只需要重跑既有資料。 兩項若皆為真,其效應方向可能相消或相加,故應一併分層而非各自單獨檢驗。

放掉理想化假設之後:實際的 GHIR 還依賴突變負荷

第一節已指出 hpResult整條 read 的標籤。 因此一條 read 只要在跨距內任何一處帶有 somatic 等位,就會離開 germline 計數 —— 與它在焦點位點是不是 ALT 無關。上式因而不是實際 GHIR 的閉式

λ 為一條 read 的跨距內其他可偵測 somatic 變異的期望數。 二倍體、clonal、焦點變異位於單倍型 1 時:單倍型 1 的腫瘤分子全部帶有焦點變異, 故 H1 只剩正常細胞;而單倍型 2 的腫瘤分子亦被其他變異掏空

H1=(1p),H2=p·n2·eλ+(1p)

λ=0 時退回上式。λ 越大,H2 越小,GHIR 越接近 0.5 —— 方向與純度下降相同。

突變負荷(read 跨距 20 kb)05/Mb20/Mb50/Mb
λ00.100.401.00
p=0.50 時的 GHIR0.6670.6560.6260.578

末欄與理想化的 0.667 相差 0.089,大於低純度區間的整段訊號p 由 0 到 0.2 時 GHIR 只由 0.500 走到 0.556)。

此依賴的方向,對現行迴歸有直接後果

固定純度之下,GHIR 隨突變負荷下降;而下降的方向與純度降低所造成的方向相同。 現行流程以中位數與四分位距為特徵、跨細胞株擬合迴歸, 而各細胞株的突變負荷差異甚大

後果是該迴歸的係數有一部分在描述突變負荷,而非純度。 此點可直接檢驗:把資料集依突變負荷分層後重擬合, 若係數隨負荷系統性移動,即為此效應。此檢驗不需要新資料。

因此本節的結論須分兩句陳述: 理想化的焦點統計量在二倍體 clonal 之下為一條已知的一元函數; 而現行的 GHIR 不是該函數,它另外依賴 read 跨距、突變負荷、偵測率與 clonality。 第五節所建立的焦點四格表即為取回前者的方式。

兩種歸因是同一條式子的兩項

GHIR 的偏移可歸因於 somatic read 的過度呈現, 亦可歸因於拷貝數變異、LOH 與非整倍體所造成的等位失衡。 上式顯示兩者是同一個分子裡的兩項cμ 一項為 somatic 所造成的掏空,n1n2 一項為拷貝數所造成的失衡。 二倍體時只剩前者;有拷貝數變異時兩者相加。

而單一個 GHIR 值無法分開兩者。 p=0.50 時,二倍體 clonal 的位點給出 GHIR=0.667; 而一個該處無 somatic 變異、但等位特異拷貝數為 1+3 的位點, 其 GHIR 同樣為 0.667。這正是 一詞所涵蓋的兩種成因。

同一個 GHIR 值的兩種成因:somatic 掏空與拷貝數失衡 兩欄的單倍型失衡比刻意設成完全相同的零點六六七,細胞比例也同樣是零點五, 差別只在成因。 左欄的兩個等位各一份,失衡完全來自體細胞掏空: 單倍型一的腫瘤分子帶著體細胞等位而被搬走,剩下五份,單倍型二有十份。 右欄這個位置沒有體細胞變異,失衡完全來自拷貝數: 單倍型一在腫瘤細胞裡一份、單倍型二三份, 算下來單倍型一收到十份、單倍型二收到二十份,比值同樣是零點六六七。 兩欄的長條高度比刻意畫成一樣,因為重點正是「光看這個數字分不出來」。 下方指出分開兩者的方法: 體細胞掏空只出現在體細胞變異的位置上, 拷貝數失衡則在整段區域的生殖系異型合子位點上都看得到。 所以要分開,就得在不同的位置分別量。 讀法是:現行流程把這兩項壓在同一個數字裡,然後用兩個矩去概括它。 同一個 GHIR,兩種成因 兩欄的純度同為 0.50,GHIR 同為 0.667。差別只在偏移的來源。 成因一:somatic 掏空 拷貝數 1 + 1,此處有 clonal 變異 H1 5 H2 10 H1-1 5 單倍型一原有 10 份,其中 5 份被搬走 GHIR = 10 ÷ 15 = 0.667 成因二:拷貝數失衡 拷貝數 1 + 3,此處無 somatic 變異 H1 10 H2 20 H1-1 0 單倍型二在腫瘤細胞裡有三份 GHIR = 20 ÷ 30 = 0.667 兩欄的長條高度比刻意畫成相同 —— 重點正是「只看這一個數字分不出來」。 分開的依據是量測位置:somatic 掏空只出現在 somatic 位點上; 拷貝數失衡在整段區域的 germline heterozygous 位點上都看得到,且該處沒有掏空。
兩欄的 GHIR 刻意設為完全相同的 0.667,純度同為 0.50。 左欄的偏移全部來自 somatic 掏空(拷貝數為 1+1), 右欄全部來自拷貝數失衡(1+3,該處無 somatic 變異)。 只看一個 GHIR 值分不出兩者 —— 要分開,須在不同位點分別量測這兩項。

三、折疊效應:為何上式不是期望值

上一節的式子是把期望分子數代入比值所得, 即 max(E[H1],E[H2])/(E[H1]+E[H2])。 由於 max 為非線性函數,它不等於比值的期望值 E[max(H1,H2)/(H1+H2)]。兩者的差距在低深度下並不小: p=0.20、跨越深度 20 時,前者為 0.556,後者為 0.599。 故上式應稱為無雜訊值或漸近值,不可稱為期望值 —— 任何以它反解純度的做法,在有限深度下都帶有系統性偏誤。

max 使 GHIR 恆不小於 0.5,因此即使真實情形完全平衡n1=n2 且無 somatic 變異),有限深度下的樣本 GHIR 期望值仍高於 0.5。 其偏移量隨跨越深度下降而增大:

覆蓋該位點的 germline read 數10204060100
平衡位點的實際期望值0.6230.5880.5630.5510.540
與真值 0.5 的偏移0.1230.0880.0630.0510.040

此表的數值可與訊號本身相比:p=0.20 的二倍體位點, 其無雜訊值為 0.556,訊號量為 0.056。而深度 20 時的折疊偏移為 0.088,大於該訊號。 在低純度區間,折疊所造成的位移可以超過純度所造成的位移。

折疊效應:真實平衡的位點在有限深度下仍給出高於 0.5 的值 左邊上下兩張直方圖。 上面是折疊之前:一個真實平衡的位點,兩個生殖系計數的比例對稱地散布在零點五的兩側, 重心就落在零點五。 下面是取較大值之後:整個左半被翻折到右半疊上去, 分布的重心因而被推到零點五的右邊,即使真實值就是零點五。 右邊是偏移量對深度的曲線:深度十時偏移零點一二三, 深度二十時零點零八八,深度六十時零點零五一,深度一百時零點零四。 深度越低,偏移越大。 圖上另外畫一條虛線,標出細胞比例零點二的位點其真實值零點五五六, 也就是訊號本身只有零點零五六。 在深度二十的時候,折疊造成的偏移比這個訊號還大。 讀法是:這個統計量的中位數與四分位距同時被純度和深度影響, 所以它們不是兩個獨立的訊號。 折疊之後,平衡的位點也不落在 0.5 左為機制,右為偏移量隨深度的變化。左側兩張圖的橫軸刻度相同。 折疊前:兩個計數的比例 0.0 0.5 1.0 重心在 0.5 max 之後 0.0 0.5 1.0 重心右移 左半被翻折過去 偏移量隨深度變化 10 20 40 60 100 覆蓋該位點的 germline read 數 0.50 0.55 0.60 0.65 平衡位點的實際期望值 p = 0.20 的真實 GHIR = 0.556 深度 20 時,折疊偏移 0.088 已大於該訊號的 0.056 中位數與四分位距兩者皆同時受純度與深度影響,故不是兩個獨立的訊號;更換深度設定即須重新訓練。
上排為折疊前:平衡位點的兩個計數對稱分布於 0.5 兩側。 下排為取 max 之後:整個左半被翻折到右半,分布的重心因而落在 0.5 之上。 右側兩條曲線顯示偏移量隨深度的變化 —— 深度越低,偏移越大。 虛線標出 p = 0.20 的真實 GHIR,可與偏移量直接比較。

四、三個觀測通道

要把 pn1n2cμ 分開, 須在不同位點分別量測,而非壓在單一個統計量上。 已標記的 read 提供三個通道:

通道量測位置期望值含哪些參數
單倍型深度比 D1/D2germline heterozygous 位點 p·n1+(1p)p·n2+(1p)p,n1,n2
總深度比 Rs視窗全體 p(n1+n2)+2(1p)ψp,n1+n2,ψ
單倍型內 somatic 佔比 ssomatic 位點 p·c·μp·n1+(1p)p,c,μ,n1

此處的關鍵區分在於量測位置。GHIR 量在 somatic 位點上, 故其分子同時混入 cμn1n2; 而第一個通道量在 germline heterozygous 位點上,該處無 somatic 掏空, 所以只承載拷貝數。兩者分開量測,前一節所述的兩項即分離。

現行流程並未使用第一個通道 —— 它把等位失衡與 somatic 掏空 壓在同一個 GHIR 上,再以分布的兩個矩概括之。

三個觀測通道的量測位置與各自的分母 中間畫一段染色體,上面標出兩類位置: 生殖系異型合子位點很密,體細胞變異位點很稀疏。 左邊的通道量在生殖系位點上。 那裡沒有體細胞等位,所以沒有分子被搬走, 兩條單倍型的深度比只承載拷貝數,不含體細胞的項。 右邊的通道量在體細胞位點上,而且分母只算單倍型一自己的分子, 另一條單倍型完全不進來。 中間偏下是現行的單倍型失衡比:它量在體細胞位點上, 但分母涵蓋兩條單倍型,所以兩種成因都混在裡面。 最下面還有一個通道,是整個視窗的總深度比,它承載的是兩條單倍型的拷貝數之和。 讀法是:三個通道分別在不同的位置量,才把混在一起的參數拆開; 現行流程只用了中間那一個。 三個通道量在不同的位置上 中央為一段染色體上兩類位點的分布。通道的差別在於量在哪裡,以及分母涵蓋什麼 染色體 germline heterozygous 位點(密) somatic 位點(稀) 通道一:單倍型深度比 量在 germline 位點 (p·n₁ + 1−p) ───────────── (p·n₂ + 1−p) 無 somatic 掏空 —— 只承載拷貝數 通道三:單倍型內 somatic 佔比 量在 somatic 位點 p · c · μ ───────────── (p·n₁ + 1−p) 分母只含一條單倍型 —— 不含 n₂ 現行:GHIR 量在 somatic 位點 max(H1, H2) ───────────── H1 + H2 分母涵蓋兩條單倍型 —— 兩種成因混在一起 通道二:視窗的總深度比 —— 承載 n₁ + n₂,即該段的總拷貝數;作用與上篇的深度軌道相同。 現行流程只用了中間那一個通道。三個通道分別量在不同位置,混在一起的參數才分得開。
三個通道的量測位置與各自的分母。 中央為一條染色體上兩類位點的分布:germline heterozygous 位點遠多於 somatic 位點。 左側通道量在前者上,故不含 somatic 項;右側通道量在後者上,且分母限於單一條單倍型。 現行的 GHIR 落在中間 —— 它量在 somatic 位點上,但分母涵蓋兩條單倍型。

五、單倍型內的 somatic 佔比

先把計數定義清楚

承第一節的警告:現行的五個計數是 read 層級的標籤,不能直接相除。 此處所需的是位點 i四格表 —— 每條覆蓋 i 的 read 同時給出兩件事:它來自哪一條單倍型,以及它在 i 這個位置是 REF 還是 ALT。

read 的單倍型來源i 為 REFi 為 ALT
單倍型 1R1,refR1,alt
單倍型 2R2,refR2,alt
工程現況:四格表原料已存在,但尚未彙總

此表在現行實作中尚未被彙總,但其原料已經存在: variantsHP 記錄了每條 read 在每個位點的等位類別, 且 tumorPosReadCorrBaseHP[pos][readID] 已將其逐位點、逐 read 保留下來。 分子側另有一個確為逐位點的計數 somaticReadHpCount —— 它只在該 read 於該位點帶有 somatic 等位時才累加,故可直接充當 R1,alt。 缺的是分母側:ReadHpCount[H1] 會漏掉「在別處帶 somatic 變異、在此處為 REF」的 read。

s(i)=R1,altR1,alt+R1,ref=p·c·μp·n1+(1p)

分母為單倍型 1 在該位點的全部分子數,與該 read 在其他位置的 somatic 狀態無關。

n1=μ=1c=1s=p

代入即得 s=p·1/(p+1p)=p。 與上篇 PURPLE 所用的 VAF=p/2 相比,此處沒有那個 2。 成因在分母:VAF 的分母涵蓋兩條單倍型,故正常細胞貢獻 2 份; s 的分母只涵蓋一條,正常細胞只貢獻 1 份。

式中不含 n2

這是此路線的主要論據,但其範圍須精確界定。 s 消去的只有 n2;它仍直接依賴帶有變異的那一條單倍型的拷貝數 n1, 以及 cμ

因此正確的說法是「侷限於另一條單倍型的變化不影響它」, 而非「LOH、擴增與非整倍體皆不影響它」。落在帶有變異那一條上的事件全部有影響: copy-neutral LOH、該條的擴增、變異發生於擴增之前或之後(決定 μ), 以及該條本身被刪除(此時 s 無定義)。 以 p=0.50n1=1 固定、僅改變 n2 為例:

該區段的狀態2×VAF(PURPLE 的錨)s(本路線)
1+1(二倍體)0.5000.500
1+0(LOH)0.6670.500
1+3(單一等位擴增)0.3330.500

PURPLE 之所以將 somatic 擬合限於推得拷貝數 1.8 至 2.2 的區域,理由即在第二、三列: 在該範圍之外,2×VAF 的偏誤達三成。s 不需要這道限制。

此亦為 LongPhase-S 原始文獻中一項假說的機制。 該文推測其估計在 LOH 與非整倍體之下仍穩健,係源於 phase-aware 的估計方式, 但未給出機制。上式即為該機制:分母限於單一條單倍型,另一條的拷貝數因而消去。

兩個比值的分母範圍:涵蓋兩條單倍型與只涵蓋一條 同一個體細胞變異位點,兩種計數方式,差別在分母框住多少東西。 左邊是變異等位頻率乘以二,也就是上篇那個錨。 它的分母把兩條單倍型都框進去,所以正常細胞在裡面貢獻兩份, 而且另一條單倍型的拷貝數也在裡面。 要抵消那兩份,才需要乘以二;而另一條單倍型的拷貝數一旦不是一份, 乘以二就不對了。 右邊是本頁的比值。分母只框住單倍型一自己, 正常細胞在裡面只有一份,另一條單倍型整條不在式子裡。 所以在兩個等位各一份、變異是所有腫瘤細胞都帶有、且只佔一份拷貝的情形下, 這個比值直接等於細胞比例,不需要乘以二,也不需要知道另一條有幾份。 要注意消去的只有另一條那一份:這個比值仍然依賴變異所在那一條的拷貝數, 也依賴帶原細胞比例與多重度。 下方點明:消失的那個二,和消失的另一條單倍型,是同一件事的兩個後果。 讀法是:換分母,就換掉了適用範圍。 兩個比值的分母範圍 同一個 somatic 位點。純度 0.50,拷貝數 1 + 1,變異為 clonal 且 multiplicity 為 1。 2 × VAF:分母涵蓋兩條單倍型 單倍型 1 5 + 5 單倍型 2 10 分母 = 20 VAF = 5 ÷ 20 = 0.25 2 × VAF = 0.50 正常細胞在分母裡貢獻兩份 故須乘以 2 才抵消;且 n₂ 也在分母裡。 s:分母只涵蓋一條單倍型 單倍型 1 5 + 5 單倍型 2 10 分母 = 10 單倍型 2 不在框內 s = 5 ÷ 10 s = 0.50 = p 正常細胞在分母裡只有一份 故不需要那個 2;式中不含 n₂,但仍含 n₁ 消失的那個 2,與消失的 n₂,是同一件事的兩個後果 —— 兩者都來自「另一條單倍型不在分母裡」。 前者只是省掉一個係數,後者移除了「該區段須為二倍體」這一項限制,見下一張圖。
兩個比值的分母範圍。 左為 2 × VAF:分母涵蓋兩條單倍型,故正常細胞貢獻 2 份, 且另一條單倍型的拷貝數在其中。 右為 s:分母只涵蓋一條,正常細胞貢獻 1 份,另一條完全不在式內。 那個消失的 2,與那個消失的 n₂,是同一件事的兩個後果。
改變另一條單倍型的拷貝數:VAF 的錨隨之偏移,單倍型內的比值不動 三格的細胞比例都固定在零點五,變異所在的那條單倍型也都是一份, 唯一改變的是另一條單倍型有幾份:分別是一份、零份、三份。 上排是變異等位頻率乘以二。 一份時是零點五,正確; 零份也就是異型合子性喪失時變成零點六六七,高估三成; 三份也就是單一等位擴增時變成零點三三三,低估三成。 下排是單倍型內的體細胞佔比。三格都是零點五,一格都沒有變。 原因寫在下排每一格的分母上:那個分母裡從頭到尾沒有另一條單倍型。 最右邊標出上篇所述的因應方式: 既然這個錨只在兩個等位各一份時準,那就只在推得拷貝數接近二的區域使用它。 而下排不需要這道限制。 讀法是:三格的真值都是零點五,上排三個數字都不一樣,下排三個都一樣。 改變另一條單倍型的拷貝數 三格的純度皆為 0.50n₁ 皆為 1,變異皆為 clonal 且 multiplicity 為 1。僅 n₂ 不同。 1 + 1 二倍體 1 + 0 LOH 1 + 3 單一等位擴增 2 × VAF 分母含 n₂ 5 ÷ 20 0.500 5 ÷ 15 0.667 5 ÷ 30 0.333 高估三成 低估三成 s 分母不含 n₂ 5 ÷ 10 0.500 5 ÷ 10 0.500 5 ÷ 10 0.500 三格的分子與分母皆未改變 上篇所述的因應方式:把中、右兩格排除在錨的適用範圍之外,只在推得拷貝數 1.8 至 2.2 的區域使用。下排不需要這道限制。
純度固定為 0.50,改變另一條單倍型的拷貝數。 三格的 n₂ 分別為 1、0、3。 下排的 s 三格完全相同;上排的 2 × VAF 由 0.500 變為 0.667 與 0.333。 右側標出 PURPLE 的因應方式:把後兩格排除在錨的適用範圍之外。

LOH 區段:錨與深度訊號同時最強

LOH 區段上單倍型深度比隨純度急遽上升,而錨在該處同樣成立 左邊比較兩種區段上的單倍型深度比隨細胞比例的變化。 兩個等位各一份的區段,這個比值恆為一,一條水平線,對細胞比例毫無資訊。 異型合子性喪失的區段,也就是另一條單倍型被刪掉的地方, 那一條只剩正常細胞貢獻的一份,所以比值等於腫瘤那一份加正常那一份, 再除以正常那一份,也就是一除以一減細胞比例,隨細胞比例急遽上升: 零點二時是一點二五,零點六時是二點五,零點八時是五。 右邊指出這件事的範圍。 受限的是 PURPLE 在高度二倍體樣本上啟用的那條變異頻率退路: 它的分母含兩條單倍型,所以只能用在拷貝數接近二的區域。 而異型合子性喪失對兩個方法的主要擬合並不是障礙 —— 上篇第四節已經示範,拷貝數不變的異型合子性喪失給出的是最乾淨的純度讀數之一。 讀法是:本頁的錨取代的是那條退路的區域限制,不是取代整個方法。 LOH 區段:訊號最強而錨仍成立 左為單倍型深度比隨純度的變化,右為此一性質與錨相合的後果。 0.0 0.2 0.4 0.6 0.8 1.0 純度 p 1 2 3 5 10 D₁ / D₂ 1 + 1:恆為 1,對純度無資訊 1.25 2.5 5.0 1 + 0(LOH) D₁/D₂ = (p·n₁ + 1−p) ÷ (1−p) 受限的只有一條路徑 PURPLE 的 somatic VAF 退路分母含 兩條單倍型,故限於 CN 1.8–2.2。 兩者的主要擬合(深度+等位比例) 在 LOH 上反而資訊量高。 對本頁的路線 同一批區域同時具備兩件事: ① 單倍型深度比的訊號最強 ② 錨照樣成立(分母不含 n₂) 故其為此路線資訊最密之處, 亦不需排除在錨之外。 可宣稱的是取代該退路的區域限制,不是「在對照方法失效之處仍可用」—— 它們在此並未失效。
LOH 區段(n₂ = 0)上,H2 只剩正常細胞的一份, 故單倍型深度比 D₁/D₂(p·n₁ + 1 − p) ÷ (1 − p), 隨純度急遽上升。而錨在此處同樣成立,因其分母不含 n₂

LOH 對上篇的兩個方法並非不利 —— 受限的只有 PURPLE 的一條退路

上篇第四節已示範:copy-neutral LOH 給出 b=(1+ρ)/2, 即 ρ=2b1是等位比例路線上最乾淨的純度讀數之一。 故 LOH 對 ASCAT 與 PURPLE 的主要擬合(深度加等位比例)不但不是障礙,資訊量反而高。

受拷貝數 1.8 至 2.2 限制的,只有 PURPLE 在高度二倍體樣本上啟用的 somatic VAF 退路。本頁的錨與該退路對應, 故可宣稱的是「取代該退路的區域限制」, 不可宣稱「在 ASCAT 與 PURPLE 失效之處仍然可用」—— 它們在 LOH 上並未失效。

梳齒:s 在各 (n1,μ) 之下取離散值

s=p 僅在 n1=μ=1c=1 時成立。 一般情形下,由於 μ 為不超過 n1 的正整數, s 的可能值構成一組離散的位置 —— 以 p=0.50 為例:

(n1,μ)(1,1)(2,1)(2,2)(3,1)(3,2)(3,3)
sc=10.5000.3330.6670.2500.5000.750

c<1s 由該齒向下移動,故每一齒實為一個上界。 表中 (1,1)(3,2) 給出相同的值,說明盲目地在 s 的分布上找峰並不可行

可行的做法是先分層n1 由第一、二通道就地取得, 故各位點可依其所在區段的 n1 分組,組內的齒位是已知的有限集合。 在 n1=1 的組內 μ 只能為 1,故 s=p·c

此通道給出的是純度的下界,不是純度

ci 若為自由參數,則 si=p·ci任何 pmaxi(si) 皆可完美擬合 —— 取 ci=si/p 即可,且全部落在 [0,1] 之內。 故資料所決定的是 pmaxi(si) 這個下界,而非一個點估計。

「取上包絡即得 p」另外預設了四件事,沒有一件是自動成立的: 至少存在一個真正的 truncal 變異;該變異落在 n1=1 的分層裡; 它被偵測到且標記正確;以及它的觀測值未被抽樣雜訊推高 (取極大值本身即為向上偏誤的估計量)。

可行的處置有二:對 ciμi 設先驗, 以階層式的 clonal/subclonal 混合模型將其積分掉; 或直接回報區間而非點估計。下篇第四節採前者,並在輸出中保留後者。

單倍型內 somatic 佔比的可能值構成一組齒,依拷貝數分層之後才對得上 細胞比例固定在零點五。 上排是不分層的情形:把所有體細胞變異位點的佔比畫在同一條軸上。 因為多重度必須是不超過該單倍型拷貝數的正整數, 佔比只能落在幾個特定位置,形成一排齒,分別是零點二五、零點三三、 零點五、零點六七與零點七五。 但不同拷貝數的齒混在一起,而且拷貝數一份多重度一份的那一齒, 和拷貝數三份多重度兩份的那一齒,恰好都落在零點五,兩者重合。 所以直接在這條軸上找最高峰,找到的不一定是細胞比例。 下排是分層之後:拷貝數由前兩個通道就地取得, 位點依所在區段的拷貝數分成三層。 每一層的齒位是已知的有限集合,重合消失。 最上面那一層拷貝數是一份,多重度只能是一份, 所以佔比就等於細胞比例乘上帶原細胞比例。 由於帶原細胞比例是未知的自由參數,這一層的上包絡只給出細胞比例的下界; 要把它當成細胞比例本身,得先假設其中至少有一個變異是主幹的、 而且它被偵測到、標記正確、又沒有被抽樣雜訊推高。 每一齒往左的灰色拖尾,是帶原細胞比例小於一的次群變異。 讀法是:先分層再讀,不要直接找峰。 先分層,再讀 s 的上包絡 純度固定為 0.50。齒位由 (n₁, μ) 決定,其中 μ 為不超過 n₁ 的正整數。 未分層:三種拷貝數的齒混在同一條軸上 0 0.25 0.50 0.75 1.00 此齒為兩組重合 n₁ 分層:各層的齒位為已知的有限集合 n₁ = 1 唯一的齒,其上包絡為純度的下界 n₁ = 2 兩齒:μ 為 1 或 2 n₁ = 3 三齒:μ 為 1、2 或 3 0 0.50 1.00 灰色拖尾為 c < 1 的 subclonal 變異,故每一齒實為上界n₁ 由通道一與通道二就地取得,不需另行猜測。
s 的可能值在 n₁ 相同時構成一組齒。 上排未分層:三個 n₁ 的齒混在同一條軸上,且有兩齒重合(0.500)。 下排依 n₁ 分層之後,各層的齒位為已知的有限集合。 n₁ = 1 一層只有一齒,其上包絡即為純度。 灰色的下拖尾為 c < 1 的 subclonal 變異。

六、接下篇

以上建立的是可以量到什麼:三個通道各自量在哪些位點上、 各自承載哪些參數,以及單倍型內的 somatic 佔比為何對另一條單倍型免疫。

尚未回答的是怎麼把三者合成一個估計式。 下篇處理該問題,並逐一補上本頁指出的四個缺口: 位點層級的四格表、cμ 的處置、 拷貝數分段與相位定向的分工,以及偵測與標記誤差如何進入似然。

下篇同時界定此規格未能解決的部分 —— 全基因體加倍仍不可辨識 —— 並給出加倍未定時的輸出格式與實作分期。

回到本頁開頭的四項限制,可以說清楚下篇要換掉的是哪一項。 第三、四項(折疊偏移、突變負荷)是可檢驗的混淆,兩者都不需要新資料就能量出來; 第二項(兩種成因壓在同一個數上)由本頁的第四、五節解決 —— 分開量測位置即可。 而第一項是唯一非改模型不可的pκ 要成為輸出, 就必須有參數代表它們,也必須有一個能同時擬合三個通道的似然。下篇處理的正是這件事。

真實資料與證據

原料的現況

下列數值皆出自 LongPhase-S 的原始文獻與其原始碼, 在本頁的脈絡下構成可用原料的清單。

觀測數值在本頁的意義
現行估計的準確度MAE 0.03、R2 約 0.98下篇的規格在 f 上須達到的基準
資料集8 個 ONT、6 個 PacBio;腫瘤 50×、正常 25×三個通道的可用深度
germline 區塊 N50中位數約 1.19 Mb(257.6 kb 至 4.39 Mb)相位定向的可用跨距;不等於拷貝數區段,見下篇第三節
somatic 標籤的準確度8 個資料集中有 6 個的 F1 不低於 0.98四格表第一列的可靠度
H3 的表現F1 0.746、recall 0.596無法貢獻四格表的位點比例
read 層級評比的涵蓋率全部 read 的 3.5% 至 25%評比僅涵蓋跨越可信 somatic 位點者,非全基因體
尺度補充:N50 相近不代表斷點對應

區塊 N50 與拷貝數區段的尺度相近, 但尺度相近不蘊含斷點對應。此點在下篇第三節展開。

預測與結果檢視

某個 somatic 位點量到 GHIR=0.667。 可否據此推論該處的 cellular purity 為 0.50

展開答案

不可,有三個獨立的理由,而且它們的方向不同。

其一,GHIR=1/(2p) 只在二倍體、clonal、multiplicity 為 1 時成立。 第二節已示範:p=0.50 的二倍體位點與一個等位特異拷貝數為 1+3、 該處無 somatic 變異的位點,兩者的 GHIR 同為 0.667。 單一個數值分不開 somatic 掏空與拷貝數失衡。

其二,該式是無雜訊值,不是期望值。 max 為非線性,故有限深度下觀測值的期望高於式子所給的數 —— p=0.20、深度 20 時,兩者分別為 0.5560.599。 以觀測值直接反解會系統性高估純度。

其三,GHIR 量在 somatic 位點上,而該處的計數是 read 層級的標籤。 一條在別處帶 somatic 變異、在此處為 REF 的 read 仍被計入 H1-1, 故這組計數不足以定義任何單一位點的等位比例

三者之中,前兩項可由模型與分布形式處理,第三項須改變計數方式。 下篇的第二節即由此開始。

還有一件事不在這三項之內,但方向相反,值得一併記住。 上面三項說的是「單一個 GHIR 值推不出 p」; 而現行流程整條跑完之後所輸出的那個數,也不是 p —— 它的訓練標籤是混合比例,故其尺度為 f。 換言之,就算把這三項全部修好、把 GHIR 反解得完美無誤, 只要模型裡沒有 κ,輸出仍然停在 f這兩件事要分開講:前者是估計的困難,後者是模型形式的界線。

原始文獻與程式碼

本頁的計數定義與閉式,均以 LongPhase-S 的原始碼為準: GHIR 的定義見 src/haplotag/HaplotagStrategy.hcalculateHaplotypeImbalanceRatio; 五個計數與其填入條件見 src/somatic_haplotag/SomaticVarCaller.cpp, 其中 hpResult 每條 read 只計算一次,再記入該 read 覆蓋的每一個 somatic 位點。 程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-s, 方法與實測數值見其預印本 (bioRxiv, 2025,doi 10.1101/2025.11.20.689492)。

前身工具見 Lin J-H et al., LongPhase: an ultra-fast chromosome-scale phasing algorithm for small and large variants, Bioinformatics 2022;38:1816–1822 (doi 10.1093/bioinformatics/btac058)。

本模組術語

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 跨距內的突變密度、標記錯誤與抽樣不足都會使它偏移。
haplotype imbalance(單倍型失衡)
指派至兩條親源單倍型的 read 數不相等。其成因有二:該處兩條單倍型的拷貝數不同,或其中一條的分子被改標至 somatic 子單倍型。兩者在數值上形式相同,僅憑一個失衡值無法區分。
tumour DNA fraction(腫瘤 DNA 比例)
樣本 DNA 中源自腫瘤的比例。與 tumor purity(細胞比例)在 aneuploid 或 WGD 的情況下會不一樣。
tumour purity(腫瘤純度)
樣本中腫瘤細胞所佔的比例。purity 越低,somatic 訊號被正常細胞稀釋得越嚴重,偵測越困難。

研究指引 · 純度、倍體與腫瘤 DNA 比例 · Part 3 — specification of the joint estimator

下篇:聯合估計式的規格,以及它還不能宣稱什麼

把三個通道寫成單一個似然而非懲罰與似然的混合,逐層攤開由參數到計數的生成模型,處理 c 與 μ 這兩個 nuisance,並界定它解決與未解決的不可辨識性、失效模式與實作分期。

建議先修:失衡的閉式與通道

本模組學習目標

  • 寫出聯合估計式的完整形式,並說明為何它必須是單一個似然而非懲罰項與似然的混合
  • 逐層寫出由全域參數到觀測計數的生成模型,並指出每一層各引入哪些 nuisance 參數
  • 說明拷貝數分段與相位定向為兩件不同的工作,以及混用兩者會扭曲哪幾個通道
  • 界定此估計式所解決與未解決的不可辨識性,並說明加倍未定時的輸出格式
  • 列出實作分期,並說明每一期各自可以單獨驗證什麼

為什麼重要

中篇留下的四個缺口

中篇建立了機制:單倍型失衡有閉式,其形式與上篇的等位比例式相同; somatic 掏空與拷貝數失衡是同一個分子裡的兩項,須在不同位點分別量測; 而單倍型內的 somatic 佔比提供一個對另一條單倍型免疫的純度訊號。

中篇同時指出四個缺口,本頁逐一處理:

缺口本頁處理之處
位點層級的四格表尚未產生第二節的第四層,以及第八節第一期
cμ 為自由參數時純度只有下界第四節:以先驗積分掉,並回報區間
分段不能沿用 第三節:兩件不同的工作
偵測與標記誤差尚未進入似然第二節的第四層與第六節

本頁的位階:規格,不是已驗證的方法

以下所寫的是一個可實作、可反駁的規格 —— 每一層的參數、每一個通道的分布形式、每一期可單獨驗證什麼。 它尚未在任何真實或模擬資料上執行過,因此不宣稱優於現行的 DNA 比例迴歸; 後者在其所針對的量上已有 MAE 0.03 的實測成績。

此處要求的判準與教材模組不同:看的不是結論是否漂亮, 而是每一項假設是否寫得夠明確、足以被實測推翻。

概念與互動

一、完整的估計式

先寫出目標,其餘各節都是在拆解它。參數分三類: 全樣本單一的 cellular purity p;每個拷貝數區段兩個整數 (n1,n2)s; 以及每個 somatic 位點的 (ci,μi),後者為 nuisance,由先驗積分掉。

logL=logLdepth+logLgermline+logLsomatic+logP(CN,WGD)

四項相加,且皆為對數機率 —— 尺度一致,可比較,亦可算資訊量。 第四項為簡約性先驗,對應上篇 PURPLE 的事件懲罰。

為何不能沿用上篇的分數形式

上篇的 PURPLE 分數為兩個加權平均相乘再加一個懲罰。 把中篇的 somatic 通道接上去時,最直接的寫法是再加一個對數似然項 —— 但那樣寫在統計上不自洽,理由有三:

  • 尺度無關。懲罰項隨區段數與權重增長,似然項隨變異數與深度增長, 兩者之間沒有任何係數校準相對影響力。
  • 資料組成會改變解。高突變負荷的腫瘤上,整個目標函數被 somatic 項主導; 拷貝數變異密集而突變稀少的腫瘤上則相反。同一個方法在兩種腫瘤上等於兩個方法。
  • 無法給出不確定性。懲罰不是機率,故其最小值附近的曲率不對應任何區間。

改寫為單一似然之後,簡約性偏好進入先驗而非進入分數, 三個通道各為一項,相對權重由各自的分布與樣本數自動決定,不需人為係數。

懲罰乘積加似然 vs 四項相加的對數機率 左邊是上篇那種分數的形狀:兩個加權平均相乘,再加上一個尺度無關的似然項。 三塊的高度隨資料組成而變 —— 突變多的腫瘤上,體細胞那一塊會把另外兩塊壓掉; 拷貝數變異多而突變少的腫瘤上則相反。 所以同一個方法用在兩種腫瘤上,實際上等於兩個不同的方法。 右邊是本頁的形式:四項都是對數機率,直接相加, 每一項的份量由它自己的樣本數與分布決定,不需要人為給係數。 簡約性偏好從分數裡搬到先驗那一項。 最下面標出最實際的差別:右邊的最大值附近有曲率,所以給得出區間; 左邊的懲罰不是機率,最小值附近的形狀不對應任何不確定性。 讀法是:能不能給出區間,取決於目標函數是不是一個機率。 目標函數的兩種寫法 左為沿用上篇的分數再加一項,右為改寫為單一似然。兩側的橫軸皆為資料組成。 懲罰乘積 + 似然 (Σ w·E) × (Σ w·D) + log L 突變少、拷貝數變異多 懲罰主導 突變多、拷貝數變異少 似然主導 兩塊的相對高度隨資料組成而變 而兩者之間沒有任何係數校準。 同一個方法 = 兩個方法 四項對數機率相加 log L_depth + log L_germ + log L_som + log P 突變少、拷貝數變異多 突變多、拷貝數變異少 各項的份量由其樣本數與分布自動決定, 不需人為係數;簡約偏好搬到最後一項的先驗。 尺度一致,可相加也可比較 最實際的差別在不確定性:右式的最大值附近有曲率,故給得出區間、給得出多峰。 左式的懲罰不是機率,其最小值附近的形狀不對應任何區間 —— 只能回報一個點。
左為上篇的分數:兩個平均相乘,再加一個與其無關尺度的項; 三塊的高度刻意畫成隨資料組成變動。右為本頁的形式:四項皆為對數機率, 相加即可,且每一項的份量由其樣本數與分布自動決定。 下方標出最實際的差別:右側的最大值附近有曲率,故給得出區間;左側沒有。

二、生成模型:從參數到計數

似然的三項各自對應一條由參數到觀測的路徑。 把三條路徑攤開,即為下圖的五層 —— 每一層只做一件事, 且除了第四層之外,中間沒有自由參數

生成模型:從一個純度到三個通道的觀測計數 五層由上而下,每一層只做一件事。 第一層是全樣本唯一的細胞比例,整份檢體只有這一個數。 第二層是每一個拷貝數區段的兩個整數,也就是兩條單倍型各有幾份, 它們是自由參數,但只能取整數。 第三層把前兩層換算成這個區段的分子組成: 每個腫瘤細胞按它的拷貝數貢獻,每個正常細胞在兩條單倍型上各貢獻一份, 所以兩條單倍型的分子數分別是細胞比例乘以拷貝數再加上一減細胞比例。 這一層沒有自由參數,它完全由上面兩層決定。 第四層是三個觀測通道,各自從第三層抽樣: 總深度比量整個視窗,用負二項; 單倍型深度比量生殖系異型合子位點,用貝他二項; 單倍型內體細胞佔比量體細胞位點,也用貝他二項。 所有的干擾參數都在這一層進入,包括帶原細胞比例、多重度、標記錯誤率與偵測機率, 前三層完全沒有這些東西。 第五層是實際數到的計數,也就是似然真正對上的資料。 右側是導出量:倍體是第二層各段拷貝數以可呼叫長度加權的平均, 腫瘤 DNA 比例再由倍體與第一層的細胞比例算出。 兩者都不是自由參數,所以它們的誤差可以一路追回到第一層與第二層。 讀法是:要判斷一個估計值可不可信,就看它依賴的是哪幾層。 生成模型:一個純度 → 每段拷貝數 → 分子組成 → 三個通道 → 計數 五層由上而下,每一層只做一件事。干擾參數全部集中在第四層,前三層沒有。 ① 全域參數 全樣本唯一,不隨區段變動 p cellular purity ② 每段參數 自由參數,惟須為整數 n₁ n₂ 每個拷貝數區段一組 ③ 分子組成 由上兩層決定 此層無自由參數 M₁ = p·n₁ + (1−p) M₂ = p·n₂ + (1−p) 深色為腫瘤細胞的貢獻,淺色為正常細胞的一份 ④ 三個觀測通道 干擾參數全部在此進入 總深度比 量:整個視窗 負二項 離散度、GC 偏差 單倍型深度比 量:germline het 位點 beta-binomial 參考偏差、標記錯誤 單倍型內 somatic 佔比 量:somatic 位點 beta-binomial c、μ、標記錯誤、偵測機率 ⑤ 觀測計數 似然真正對上的資料 視窗深度  列和  四格表 後兩者目前尚未彙總 導出量 不是自由參數 κ ②各段以長度加權平均 f 由 κ 與 ① 算出 為何要分層 一個估計值可不可信, 取決於它依賴到第幾層。 ① ② ③ 只有整數與比例, 錯了看得出來。 ④ 的參數需另行校準。 現行流程只用第④層最左邊那一格的一部分,再把 GHIR 分布壓成兩個矩 —— ②③ 兩層整個沒有被寫出來
五層。第一層是全樣本唯一的純度; 第二層是每個拷貝數區段的兩個整數,它們決定第三層的分子組成 —— 腫瘤細胞按其拷貝數貢獻,正常細胞每條單倍型各一份。 第四層是三個觀測通道,各自從第三層抽樣,nuisance 參數全部在這一層進入: somatic 通道帶 cμ、標記錯誤率與偵測機率。 第五層是實際數到的計數。右側為導出量:倍體是第二層的加權平均, DNA 比例再由它與第一層算出。倍體與 DNA 比例都不是自由參數。

第三層:分子組成

一個區段上,每個腫瘤細胞在單倍型 1 貢獻 n1 份、單倍型 2 貢獻 n2 份; 每個正常細胞各貢獻 1 份。故該區段的分子組成為:

M1=p·n1+(1p),M2=p·n2+(1p)

此為中篇三個通道期望值的共同來源。三個通道的差別只在於它們從這兩個量的 哪一部分抽樣,以及抽樣時 somatic 等位如何切分 M1

第四層:三個通道各自的分布

通道量測位置分布此處進入的 nuisance
logLdepth視窗全體 負二項(非卜瓦松 —— 深度有過離散)離散度、GC 與可對應性偏差
logLgermlinegermline heterozygous 位點 beta-binomial(非二項 —— 參考偏差與標記誤差造成過離散)參考偏差、標記錯誤率、phase switch
logLsomaticsomatic 位點的四格表 beta-binomial,成功率為 siciμi、標記錯誤率、偵測機率

同一條 read 上的多個位點不是獨立觀測

三個通道的分布若一律取二項,等於假設每個位點各自獨立。 但長讀的一條分子會跨越多個位點,其標記錯誤與家族誤標一次作用於整條分子, 使同一條 read 上的位點高度相關。

後果是有效樣本數被高估,區間因而過窄、 似然比檢定過度自信 —— 而這不會在點估計上顯現。 取 beta-binomial 是最低限度的處置;更完整的做法是以分子為單位建模, 如中篇所述的 multinomial 形式。

第五層:四格表

中篇已指出現行的五個計數是 read 層級的標籤,不能直接相除。 本層所需的是每個 somatic 位點的四格表 —— 每條覆蓋該位點的 read 同時給出 「來自哪一條單倍型」與「在此位置是 REF 還是 ALT」:

read 的單倍型來源i 為 REFi 為 ALT
單倍型 1R1,refR1,alt
單倍型 2R2,refR2,alt

此表同時餵三件事:列和給出單倍型深度比(通道一)、 第一列的內部比值給出 si(通道三)、 而 R2,alt 一格若非零,即為標記錯誤或該變異並非單一單倍型所獨有的訊號。 現行實作沒有這張表,但其原料(variantsHPtumorPosReadCorrBaseHP)已在管線裡。

三、分段與定向是兩件不同的工作

中篇曾以 的 N50 與拷貝數區段的尺度相近為由, 主張可直接以 block 分段。該論證不成立:尺度相近不蘊含斷點對應。

拷貝數邊界與相位區塊邊界不對齊,故分段與定向是兩件工作 上排是拷貝數的真實邊界,這一段染色體分成三個狀態。 中排是相位區塊的邊界,兩排的邊界刻意畫成不對齊。 圖上標出兩種錯配。 第一種是一個拷貝數斷點落在某個相位區塊的中間, 於是那個區塊橫跨兩個不同的拷貝數狀態, 它的兩個等位拷貝數就不是一組整數,三個通道會同時被扭曲。 第二種是同一個拷貝數狀態橫跨好幾個相位區塊, 而區塊之間的單倍型標號各自獨立決定, 所以不能把它們直接串成一條連續的軌道。 下排是正確的做法:先用深度與生殖系等位計數獨立分段,並納入結構變異的斷點, 得到的邊界與上排一致;相位區塊只在每個區段之內提供哪一條是哪一條的定向。 兩者回答的是不同的問題,一個決定邊界在哪,一個決定邊界之內兩條怎麼配對。 讀法是:N50 尺度相近不代表斷點對應,這兩件事不能互相代替。 分段與定向是兩件不同的工作 同一段染色體。上排為拷貝數的真實邊界,中排為相位區塊的邊界,兩者不對齊 拷貝數狀態 1 + 1 2 + 0 2 + 1 相位區塊 B1 B2 B3 B4 B5 錯配一:B2 橫跨兩個狀態 其 (n₁, n₂) 不是一組整數 錯配二:一個狀態橫跨 B4 B5 兩區塊的標號各自獨立 正解:兩件工作分開做 ① 分段 依深度、germline 等位與結構變異斷點 —— 邊界與上排一致 ② 定向 相位區塊只在每個區段之內指出哪一條是 H1 兩者回答不同的問題:分段決定邊界在哪,定向決定邊界之內兩條怎麼配對。N50 尺度相近不蘊含斷點對應。
上排為拷貝數的真實邊界,下排為相位區塊的邊界,兩者刻意畫成不對齊。 中間標出兩種錯配:一個拷貝數斷點落在 block 之內(該 block 橫跨兩個狀態, 其 (n₁, n₂) 不是一組整數), 以及一個拷貝數狀態橫跨數個 block(相位標號在 block 之間各自獨立,故無法直接串起來)。 下方為正解:以深度與等位獨立分段並納入結構變異斷點, 相位區塊只在每個區段之內提供 H1/H2 的定向。
拷貝數分段相位區塊
回答的問題邊界在哪裡邊界之內,兩條怎麼配對
依據深度、germline 等位、結構變異斷點germline heterozygous 位點的連鎖
混用的後果block 橫跨兩個拷貝數狀態時,(n1,n2) 非整數,三個通道同時被扭曲
文獻補充:PURPLE 也將分段與平滑分開

PURPLE 將分段與平滑列為獨立步驟,其依據為深度、等位比例與結構變異支持, 而非相位長度。此處沿用同一個分工。

四、nuisance 參數:cμ 與兩種錯誤

中篇指出:ci 若為自由參數,則 si=p·ci 對任何 pmaxi(si) 皆可完美擬合,資料只給下界。 本節的處置是不把它們當自由參數,也不把它們固定,而是設先驗後積分掉。

P(sip,n1)=μiP(μin1)P(ci)·BetaBin(R1,alt;R1,·,si(p,n1,ci,μi),φ)dci

μi 為不超過 n1 的正整數,故其和為有限項,可直接列舉。 ci 的先驗取自 subclone 的階層模型:一個由 clonal 尖峰與 subclonal 連續成分構成的混合。

兩個干擾參數的處置方式不同,以及三種做法給出的輸出 左邊說明兩個干擾參數為什麼要分開處理。 多重度是離散而且有上界的,它不能超過該單倍型的拷貝數, 所以可能的取值是一個有限的集合,直接逐一列舉即可。 帶原細胞比例是連續的,落在零到一之間,所以給它一個先驗再積分掉。 右邊比較三種做法在同一批觀測上的輸出。 把帶原細胞比例固定成一,得到一個過低的點估計,因為次群變異被當成主幹變異。 讓它完全自由,似然從觀測值的最大值開始一路向上都是平的, 任何更大的純度都能靠調小帶原細胞比例來擬合,所以只給得出一個下界。 給先驗之後,後驗有一個峰也有寬度。 三者的差別不只在中心位置,更在於它能不能給出區間。 讀法是:先驗沒有創造資料裡沒有的資訊,它只是把常識寫成可檢驗的形式, 而且後驗的寬度會誠實反映資料到底支持多少。 兩個干擾參數,兩種處置 左為處置方式,右為三種做法在同一批觀測上的輸出。 μ:離散且有界 不超過該單倍型的拷貝數 n₁ = 3 → μ ∈ {1,2,3} 逐一列舉,和為有限項 c:連續 落於 0 與 1 之間 給先驗後積分 三種做法的輸出 0 max(s) 1 純度 p 固定 c = 1 點估計,且過低 c 全自由:平坦,只給下界 設先驗:有峰,也有寬度 先驗沒有創造資料裡沒有的資訊 —— 樣本若無 clonal 變異,後驗會退回接近先驗,而這由寬度看得出來
兩個 nuisance 參數的處置方式不同。 μ 是離散且有界的(不超過該單倍型的拷貝數),故逐一列舉c 是連續的,故給先驗後積分。 右側對照三種做法在同一批觀測上的輸出:固定 c = 1 給出一個過低的點估計; c 全自由給出一條由 max(s) 起始、向上無界的平坦似然; 設先驗給出一個有峰、有寬度的後驗 —— 三者的差別不在中心位置,在於它是否給得出區間。

此處要說清楚的是先驗承擔了什麼: 它並未創造資料裡沒有的資訊,而是把「腫瘤含有一批 clonal 變異」這個生物學上的常識 寫成可檢驗的形式。若某個樣本實際上沒有 clonal 變異(例如極低純度導致 truncal 變異全數未被偵測), 後驗會退回接近先驗,而這一點可由後驗的寬度直接看出來 —— 這正是點估計做不到的事。

五、解決與未解決的不可辨識性

解決:無等位失衡時純度不可辨識

上篇第八節列出的第一項不可辨識為「全基因體皆為 1+1 時 ρ 不可辨識」。 此時深度與等位比例兩條軌道皆為常數,對純度零資訊; ASCAT 將此類樣本標記為非異常並拒絕輸出,PURPLE 則轉用二倍體區段的 VAF 峰。

而此情形下 n1=1 處處成立,somatic 通道仍然作用, 故 p 的後驗不會退化為平坦。此項不可辨識因而被解除 —— 但只是條件性的。

須同時成立的條件有四項,缺一則模型僅為部分可辨識, 後驗退回第四節所述的「由 maxi(si) 起始的下界」:

  • 至少存在一個真正 truncal(c=1)的 somatic 變異;
  • 該變異落在 n1=1 的分層之內;
  • 它被 caller 偵測到,且單倍型標記正確;
  • 其觀測值未被抽樣雜訊推高(取極大值本身即為向上偏誤的估計量)。

四者皆非自動成立,且第三項在低純度時系統性變差(第六節第二列)。 因此輸出必須是後驗而非點估計 —— 條件不成立時,後驗的寬度會顯示出來, 點估計不會。

未解決:全基因體加倍

將上篇的格點變換施於 somatic 通道:(k,m)=(2,0)n12n1,而發生於加倍之前的變異其 μ 亦隨之加倍。代入 s

s=ρ·c·2μρ·2n1+(1ρ)

ρ=0.40n1=μ=1 為例:原式 s=0.400; 加倍後 ρ=0.25n1=2μ=2,代入仍得 s=0.400

錨在加倍變換下不變,故不能單獨破解加倍簡併。 可用以定下模式的證據有三類,但三者的作用方式不同

  • 奇數的等位特異拷貝數 —— 只擋一個方向。它使該解無法再對半, 但任何解皆可再加倍:含奇數拷貝數的解,其加倍版本全為偶數, 且對深度與等位比例給出逐格相同的觀測。 故奇數只是把該解定為此族中最小的一個;真正排除加倍解的是簡約先驗,不是資料。
  • 加倍之後才發生的變異 —— 這一項才是資料證據。μ 不隨拷貝數加倍, 故兩個模式對它預測不同的 s。惟須另行判定該變異的發生時序。
  • 樣本外的量測:流式細胞術的 DNA 指數、核型或 FISH。
此錨解除兩種不可辨識,但未解除全基因體加倍 三欄,各是一種原本無法由深度與等位比例分辨的情形,以及本頁的錨對它做得到什麼。 左欄是整個基因體都沒有等位失衡的樣本。 這時深度比處處相同、等位比例處處是零點五,對細胞比例完全沒有資訊, 上篇的兩個方法一個拒絕輸出、一個改用二倍體區段的變異頻率。 但這種樣本每一段的單倍型都是一份,所以錨處處成立。 這一項因而解除,不過是有條件的: 得先有一個真正主幹的變異落在這一層、被偵測到、標記正確,而且沒有被雜訊推高。 中欄是錨本身的區域限制。 上篇那個錨的分母含另一條單倍型,所以只能用在拷貝數接近二的區域; 本頁的錨分母只有一條單倍型,異型合子性喪失與擴增區段都能用。這一項也解除。 右欄是全基因體加倍。 把拷貝數全部乘二,發生在加倍之前的變異其多重度也跟著乘二, 代進去之後錨的值一模一樣。所以這一項沒有解除, 仍然要靠簡約偏好或樣本外的量測;奇數拷貝數只能擋住「再對半」,擋不住「再加倍」。 讀法是:把做得到與做不到分開講,是這條路線能不能被採信的前提。 解除兩項,未解除一項 三種上篇所列的不可辨識,以及本頁的錨對各項的作用。 全基因體無等位失衡 深度比處處相同, 等位比例處處為 0.5。 上篇:一者拒絕輸出, 一者改用二倍體區段的 VAF。 此時 n₁ = 1 處處成立, 故 s = p · c 惟須有 truncal 變異,見下篇第五節。 條件性解除 錨的區域限制 上篇的錨分母含 n₂ 故只能用於拷貝數近 2 的區域。 而 LOH 與擴增區段 正是腫瘤最具資訊的部分。 本頁的錨分母只含一條, s = p·cμ ÷ (p·n₁ + 1−p) 式中不含 n₂,故全基因體可用。 解除 全基因體加倍 拷貝數全部乘二時, 加倍前發生的變異其 μ 亦乘二。 代入後 —— ρ = 0.40 → s = 0.400 ρ′ = 0.25 → s′ = 0.400 錨在此變換下不變 仍須靠簡約偏好或樣本外量測。 未解除 可宣稱:純度的估計不再要求區段為二倍體;無等位失衡的樣本在條件成立時亦可估計。 不可宣稱:解決了純度與倍體的簡併。把做得到與做不到分開講,是此路線能否被採信的前提。
三種不可辨識的處置對照。 左欄「全基因體無等位失衡」:兩條軌道皆為常數,但 n₁ = 1 處處成立,故錨仍給出純度 —— 解除。 中欄「錨的區域限制」:s 的分母不含另一條單倍型,故 LOH 與擴增區段皆可用 —— 解除。 右欄「全基因體加倍」:拷貝數與 multiplicity 一同加倍時 s 不變 —— 仍未解除, 須另以簡約先驗或樣本外量測處理。

輸出格式:加倍未定時保留兩個模式

上述三類證據皆不成立時,後驗為雙峰。 此時回報單一組 (p,κ) 會把一個雙峰的後驗壓成一個看似確定的數字, 且兩個峰所對應的 κ 相差一倍 —— 這在臨床解讀上不是小差異。

加倍未定時的後驗是雙峰,壓成一個數字會丟掉什麼 三欄。 左欄是後驗的實況:兩個峰,一個在細胞比例零點四、倍體二,另一個在零點二五、倍體四。 兩者對深度與等位比例給出完全相同的期望值,所以資料無法分辨它們, 而且第五節已證明體細胞那個錨在加倍變換下也不變,所以它也分不出來。 中欄是常見的做法:取最高的那個峰,回報一組數字。 另一個峰連同它的機率一起消失,讀報告的人看不出這裡本來有兩個答案, 而兩個答案的倍體差了一倍。 右欄是本頁要求的輸出:兩個模式各自附上機率, 並列出三類可以用來定案的證據,以及它們在這個樣本上的狀態 —— 有沒有加倍之後才發生的變異、有沒有樣本外的量測,以及有沒有奇數的等位拷貝數 —— 最後這一項只能擋住「再對半」,擋不住「再加倍」,所以它靠的是簡約偏好而不是資料。 讀法是:把雙峰壓成一個數字,丟掉的不是精度,是「這裡還沒有定論」這件事。 加倍未定時的輸出格式 同一份資料。兩個模式對深度與等位比例給出相同的期望值,體細胞錨亦不能分辨。 後驗的實況 0.25 0.40 純度 p κ = 4.0 κ = 2.0 兩個峰 取最高峰回報一個數 0.40 純度 p κ = 2.0 另一個峰 連同機率一起消失 倍體差一倍,看不出來 本頁要求的輸出 p 0.40 κ 2.0 機率 0.6 p 0.25 κ 4.0 機率 0.4 可用以定案的證據 · 加倍後才發生的變異 · 樣本外的量測 · 奇數拷貝數(僅擋對半) 本樣本:三者皆無 壓成一個數字所丟掉的不是精度,是「這裡還沒有定論」這件事 —— 而兩個模式的倍體相差一倍。
同一份資料的後驗。左為雙峰的實況: 兩個模式的 (p, κ) 分別為 (0.40, 2.0)(0.25, 4.0), 兩者對深度與等位比例給出相同的期望值。 中為「取最高峰回報一個數」的結果:另一個模式連同它的機率一併消失。 右為本頁要求的輸出:兩個模式各自附機率,並列出可用以定案的三類證據及其在本樣本上的狀態。

六、失效模式

失效機制處置
H3 與無 germline 錨的位點 無法歸屬單倍型的 somatic read 進不了四格表。原始文獻報告 H3 的 F1 為 0.746、recall 僅 0.596 單倍型繼承程序可救回一部分;救不回者應排除該位點,不得計為零
低 DNA 比例時的 recall 下降 somatic 標籤的 recall 在比例 0.2 時降至約 0.6,使 R1,alt 被系統性低估,p 隨之低估 偵測機率須進入第四層的似然,並以有真值的資料集估計其對 VAF 與深度的依賴
取樣偏誤 somatic 位點由 caller 挑選,其靈敏度隨 VAF、深度、序列脈絡、平台與純度而變, 故納入模型的位點不是隨機樣本,而是偏向高 VAF 者 與上一列為同一組參數;僅把 H3 排除並不足夠,因為其缺失亦非隨機
subclonality s=p·c,單一位點分不開 pc 第四節的先驗;並回報 s 的多峰結構,其本身即為 subclone 的訊號
標記錯誤與參考偏差 phase switch、reference bias 與 mapping bias 皆壓縮或扭曲等位失衡 分支專屬的靈敏度與偽陽性參數;R2,alt 一格提供其就地估計
跨 phase block H1/H2 的標號逐 block 獨立(M13 的重要區分 #13),故 (n1,n2)配對只在單一 block 內有定義 κ 不受影響(僅用 n1+n2);沿染色體的等位特異拷貝數軌道需跨 block 連結,此為硬上限
正常樣本內含腫瘤時,正常側的深度正規化與濾波門檻皆偏移 現行的正常樣本 VAF 門檻處理其一;對本模型的影響須另行評估
哪些 somatic 位點無法貢獻單倍型內的佔比 上排是可用的情形:體細胞變異位點附近有生殖系異型合子位點, 而且同一條分子同時覆蓋兩者, 所以這條分子能被追溯到哪一條單倍型,可以進到體細胞子單倍型那一堆。 下排是三種不可用的情形。 第一種是附近沒有生殖系異型合子位點,分子上只有體細胞等位,無從歸屬。 第二種是分子太短,只蓋到體細胞變異而蓋不到旁邊的生殖系位點。 第三種是兩個位點落在不同的相位區塊,區塊之間的標號各自獨立, 所以就算兩個都蓋到,也不能把它們接起來。 三種都使該分子被標成無法歸屬。 最下面是一句必須遵守的規則: 這些位點應該整個排除,不可以把它們當成零計進分母裡, 因為那會讓分子偏小,細胞比例被系統性低估。 讀法是:可用的位點少,是這條路線的成本;把不可用的當成零,是錯誤。 哪些 somatic 位點無法貢獻 s 上排為可用者,下排為三種不可用者。實心圓為 somatic 位點,空心圓為 germline heterozygous 位點。 可用 read 同時覆蓋 兩類位點 可追溯至單倍型 → 進入 H1-1 不可用 ① 附近無錨 分子上只有 somatic 等位 ② read 過短 蓋不到旁邊的 germline 位點 ③ 跨 phase block 兩區塊的標號各自獨立,不可接續 三者皆使該分子被標為無法歸屬。此類位點須整個排除,不可計為零 —— 計為零會使分子偏小,純度被系統性低估。
哪些 somatic 位點無法貢獻四格表的第一列。 上排為可用者:該位點附近有 germline heterozygous 位點,且 read 同時覆蓋兩者。 下排為三類不可用者:附近無 germline 錨、read 過短無法同時覆蓋、 以及位於 phase block 邊界。三者皆使 read 落入 H3這些位點不得計入分母而以零充數 —— 那會使純度被系統性低估。

七、與現行方法的對照

與現行迴歸:同一條資料路線之內

項目現行:兩個矩加多項式迴歸本頁的規格
輸出f 一個純量pκ、每段 (n1,n2)f 為導出量
係數來源由合成混合樣本擬合而得不需純度迴歸的監督式訓練;式中的量皆有物理意義。惟偵測機率、標記錯誤率與平台校準參數仍須估計
跨平台ONT 訓練、PacBio 直接轉移(原始文獻已驗證可行) 不含平台特定的迴歸係數;惟錯誤率、標記正確率與偵測機率仍須逐平台校準 —— 「不需訓練係數」不等於「平台無關」
深度依賴折疊偏移進入兩個特徵,故隱含於係數之中折疊可顯式建模為二項分布
不確定性後驗給出區間;加倍未定時給出兩個模式
拷貝數變異與 LOH視為干擾,以「經驗上穩健」處理顯式建模,成為輸出的一部分
已驗證程度8 個 ONT 與 6 個 PacBio 資料集,MAE 0.03尚未執行

末列是本頁最重要的一列。上表前六列是設計目標,不是已達成的狀態; 現行迴歸在 f 上的成績已相當好,本規格在該項上不見得更好, 且多出的參數會帶來額外的估計誤差。

可宣稱的論據限於三項:把兩種成因分開量測多輸出三個量、 以及失效模式可診斷不可宣稱精度改善。

與 ASCAT/PURPLE:真正的對照基準

現行迴歸不是唯一的比較對象,甚至不是最重要的那一個。 上篇所述的 ASCAT 與 PURPLE 是這個問題的既有標準, 而本規格的三個通道有兩個與它們重疊 —— 總深度與等位比例 —— 所用的代數也是同一套。因此差異必須逐項指出,不能以「資料型態不同」帶過。

項目ASCATPURPLE本頁規格
等位訊號 germline heterozygous 位點的 BAF,刻意不做相位,A/B 標號隨機化,軌道對稱於 0.5 AMBER 取兩者較大值,值域 [0.5,1] 覆蓋該位點的 read 已帶單倍型標籤,故 phase block 之內不需折疊
折疊偏移 逐位點折疊後再分段 以二項分布算出平衡區段的期望值,觀測低於 0.535 時比較兩種解釋 折疊前的聚合單位由一個位點放大為一個 phase block,偏移隨區塊內總計數下降
somatic 通道 不使用 兩用:低純度解的懲罰,以及高度二倍體樣本的 VAF 退路(限推得拷貝數 1.8–2.2) 與另兩者同級的似然項;統計量為 s,分母不含 n2,故不需該區域限制
分段 等位特異的分段(ASPCF),深度與等位聯合 深度、等位與結構變異斷點 同 PURPLE 的三項依據 —— 此為沿用,不是新增
加倍簡併的處置 硬性倍體界限;四道條件皆不通過即回傳 NA 連續的事件懲罰,加上一條來自 somatic 的約束 不選解:兩個模式各自附機率一併輸出
不確定性 點估計,或 NA 已輸出 minPuritymaxPurity(來自分數曲面) 後驗區間。差別不在「有沒有」,而在它是似然而非分數,因而可回報多峰
subclonality 嚴格 clonal 允許非整數拷貝數,但擬合中無混合模型 c 顯式建模並給先驗;s 的多峰結構本身即訊號
輸入需求 陣列或短讀;標準用法為配對正常樣本 短讀全基因體;另有 tumor-only 模式 長讀,且需可用的相位區塊 —— 短讀資料上不適用
已驗證程度 原始文獻 79 例,其後為泛癌標準工具 逾兩千例轉移性全基因體隊列 尚未執行
四個方法各自使用哪些觀測統計量 把 ASCAT、PURPLE、現行迴歸與本頁規格放在同一張表上, 每一列是一個可以從資料算出來的統計量,每一欄是一個方法, 格子填色代表該方法有用這個量,虛線代表沒有用,橘框代表有條件地用。 看下來會發現重疊的部分比想像中多:總深度比、逐位點折疊的等位比例、 結構變異斷點,這三個量 ASCAT 或 PURPLE 至少有一個已經在用。 真正只有本頁規格在用的是兩列:相位後不折疊的單倍型深度比, 以及分母只涵蓋一條單倍型的體細胞佔比。 現行迴歸所用的 GHIR 也自成一列,它量在體細胞位點上, 但分母涵蓋兩條單倍型而且經過折疊,所以跟上面兩個新增的量都不同。 PURPLE 的體細胞 VAF 那一格是橘框,因為它只在推得拷貝數落於 一點八到二點二之間時才啟用。 讀法是:要說明新意在哪裡,指的應該是那兩列,而不是整張表。 四個方法用到哪些觀測統計量 填色=使用,虛線=不使用,橘框=有條件使用。 ASCAT PURPLE 現行迴歸 本頁規格 總深度比:視窗全體 BAF(germline 位點,逐位點折疊) 單倍型深度比(germline 位點,不折疊) somatic VAF:分母涵蓋兩條單倍型 限 CN 1.8–2.2 GHIR:somatic 位點,分母兩條且折疊 單倍型內佔比 s:分母只有一條 結構變異斷點(供分段) 第 3 與第 6 列是本規格唯一新增的兩個量 —— 其餘五列 ASCAT 或 PURPLE 已在用。
每一列是一個可由資料算出的統計量,每一欄是一個方法。 填色為使用、虛線為不使用、橘框為有條件使用。 重疊的部分比預期多:總深度、逐位點折疊的等位比例與結構變異斷點, ASCAT 或 PURPLE 至少有一個已經在用。 只有第三列(相位後不折疊的單倍型深度比)與第六列(分母只涵蓋一條的 s)是新增的。 現行迴歸的 GHIR 自成一列 —— 它量在 somatic 位點上,但分母涵蓋兩條且經過折疊, 故與新增的兩者皆不同。

三項可宣稱的新意,與三項不是新意的事

上表的重疊處提示了一件事:把「換一種資料重做同一件事」講成「解決了別人解不了的問題」, 是最容易犯的錯。以下逐項界定。

① 相位由分子本身給出。 ASCAT 與 PURPLE 的等位軌道都是折疊的,其代價已在中篇量化:深度 20 時折疊偏移為 0.088, 大於 p=0.20 二倍體位點的整段訊號 0.056。 須註明的是兩者對此的處置並不相同:PURPLE 以二項分布明確校正(0.535 的比較),ASCAT 則無此步驟。 單倍型標籤使折疊前的聚合單位由一個位點放大為一個 phase block, 偏移隨區塊內的總計數而非單位點深度下降。
邊界:這是量的改變,不是質的消除。區塊之間的 H1/H2 標號仍然任意(第六節), 跨區塊連結是未解問題;而相位輔助的等位失衡估計本身並不新 —— Battenberg 早以參考面板 imputation 達成同一方向的效果。

② germline 錨與 somatic 位點落在同一條分子上。 這是短讀與陣列做不到的一件事,也是三項之中唯一長讀獨有者: 參考面板可以把 germline 位點相位化,但 somatic 變異不在任何面板裡, 面板 imputation 因此推不出四格表。四格表使 somatic 通道的統計量由 VAF(分母兩條單倍型) 變為 s(分母一條),PURPLE 的拷貝數 1.8–2.2 區域限制隨之不再需要。
邊界s 只消去 n2,仍依賴 n1cμ(中篇第五節); 且它取代的是 PURPLE 的退路,不是其主要擬合。

③ 三個通道進同一個似然,共用一個 p PURPLE 的 somatic 輸入是懲罰項與退路,不是帶自身抽樣模型的似然項; 本規格把它升格為與另兩者同級的一項。
邊界「有不確定性」不是新的 —— PURPLE 已輸出 minPuritymaxPurity。 新的是它是似然而非分數,因而可回報多峰而非單一區間; 而此優點以模型正確為前提,模型錯時區間會過窄。

三項可宣稱的新意及其邊界,與三項早已存在的技術 左欄是本頁規格真正新增的三件事,每一件都附上它的邊界。 第一件是相位由分子本身給出,所以折疊之前的聚合單位從單一個位點放大到整個相位區塊; 它的邊界是區塊之間的單倍型標號仍然任意,跨區塊連結沒有解決。 第二件是兩類位點落在同一條分子上,四格表因而存在, 體細胞佔比的分母只涵蓋一條單倍型;它的邊界是這只消去另一條的拷貝數, 仍然依賴帶有變異那一條的拷貝數、帶原細胞比例與多重度。 第三件是三個通道進同一個似然,因而可以回報多個模式而不是一個區間; 它的邊界是這以模型正確為前提,模型錯的時候區間會過窄。 右欄是三件早已存在的技術,列出來是為了避免把它們算成新意: 純度與倍體的聯合網格擬合在 ASCAT 就有, 體細胞變異當純度錨是 PURPLE 的做法, 而用相位輔助等位失衡估計,Battenberg 以參考面板 imputation 早已做到。 讀法是:三件新增的事情裡,只有第二件是長讀獨有的, 因為體細胞變異不在任何參考面板裡,面板 imputation 相位不出四格表。 哪些是新的,哪些不是 左為本規格新增者,每項附其邊界;右為既有技術與其出處。 新增(各附邊界) 既有技術(出處) ① 相位由分子本身給出 折疊前的聚合單位:一個位點 → 一個 phase block 邊界:區塊之間的 H1/H2 標號仍然任意 ② 兩類位點在同一條分子上 四格表因而存在:s 的分母只有一條單倍型 邊界:只消去 n₂,仍依賴 n₁、c 與 μ ③ 三個通道進同一個似然 可回報多個模式,而非一個區間 邊界:以模型正確為前提,模型錯時區間過窄 純度與倍體的聯合網格擬合 ASCAT 已有;PURPLE 用同一組代數 somatic 變異作為純度錨 PURPLE 的低純度懲罰與二倍體退路 相位輔助的等位失衡估計 Battenberg:參考面板 imputation 只有 ② 是長讀獨有的:somatic 變異不在任何參考面板裡,面板相位推不出四格表。
左為三項新增,每項附其邊界;右為三項既有技術及其出處。 把右欄寫出來的理由是:純度與倍體的聯合網格擬合、somatic 變異當純度錨、 相位輔助的等位失衡估計,三者都已有人做過。 底列為結論 —— 只有第二項是長讀獨有的。

不可宣稱「取代 ASCAT/PURPLE」

三項限制同時成立:其一,本規格需要長讀與可用的相位區塊, 在短讀與陣列資料上不適用,故它不是同一個生態位的替代品; 其二,它尚未執行任何驗證,而對照的兩者各有 79 例與逾兩千例的紀錄; 其三,上表九列之中,資訊上真正新增的只有兩個統計量,其餘皆為既有技術的重新組合。

可宣稱的是一句範圍明確的話:在長讀資料上,somatic 錨不再受拷貝數區域限制, 且輸出多一組 (n1,n2) 軌道與一組區間。 中篇的警告在此同樣適用 —— LOH 對 ASCAT 與 PURPLE 的主要擬合並非不利, 不可宣稱「在它們失效之處仍然可用」。

八、實作分期

四個缺口彼此有依賴關係,故順序不是任意的。 在四格表建起來之前擬合整個模型,殘差無法歸因; 在無雜訊式子未經模擬驗證之前談效能,量到的是實作錯誤而非方法極限。

內容此期可單獨驗證什麼
位點層級四格表;以深度與等位獨立分段(納入結構變異斷點) 計數正確性。不涉及任何模型選擇,可與既有 caller 的 VAF 逐位點對帳
以模擬計數反解無雜訊式子 實作錯誤。由已知的 (p,n1,n2,c,μ) 生成計數,確認可反解回原值;此期失敗與方法無關
階層式似然:三個通道加 cμ、標記錯誤與偵測機率的先驗 收斂性與初始值敏感度;後驗區間的涵蓋率
加倍未定時輸出多個模式模式判定的正確率
掃參數空間的模擬:純度、倍體、加倍時序、subclonal 拷貝數變異、突變負荷、phase switch 錯誤率、深度、讀長、、兩個平台 失效邊界的位置
完整流程:現行實作已具備的四步與須新增的四步 八個步驟由上而下。 淺色的四步是現行實作已經做完的: 把腫瘤與正常配對資料的分子標上單倍型; 在每個體細胞變異位點上算出五個計數; 用四道濾波把低信心的變異去掉; 以及相位區塊,它提供每個區段之內兩條單倍型的定向。 深色的四步是要新增的: 以深度與生殖系等位計數獨立分段並納入結構變異斷點,因為拷貝數斷點不一定落在相位區塊的邊界上; 在生殖系異型合子位點上算單倍型深度比,這是目前完全沒有用到的通道; 彙總每個位點的四格表,算出單倍型內的體細胞佔比 —— 現有的五個計數是每條分子一個標籤,不是每個位點的等位計數,所以不能直接相除; 依每段的拷貝數把這些位點分層,再一起最佳化細胞比例與各段的拷貝數; 最後輸出四個量以及各自的區間。 右邊標出被取代的部分:現行流程在算完五個計數之後, 取分布的中位數與四分位距,再用迴歸換成一個純量,這整段被取代掉。 讀法是:新增的工作集中在後半,前半的原料已經在了。 完整流程 淺色為現行實作已具備者,深色為須新增者。右側為被取代的部分。 已具備 ① 對腫瘤與正常配對資料進行單倍型標記 ② 每個 somatic 位點的五個計數 ③ 四道低信心變異濾波 ④ phase block:提供區段內的 H1/H2 定向 須新增 ⑤ 以深度與等位獨立分段(納入 SV 斷點) ⑥ 位點層級四格表 → 單倍型內 somatic 佔比 ⑦ 依 n₁ 分層,聯合最佳化 p 與各段拷貝數 ⑧ 輸出 p、κ、各段拷貝數、f 及其區間 被取代的部分 取 GHIR 分布的中位數與四分位距 以二階多項式迴歸換為一個純量 輸出只有 f,且係數需訓練 新增工作的性質 ⑤ 需重新掃一次 germline VCF,   但標記結果已在 BAM 上 ⑥ 須新增位點層級的彙總 ⑦ 為本路線的主要新增工作,   其收斂性尚待模擬檢驗
完整流程。淺色的四步為現行實作已具備者: 單倍型標記、五個計數、低信心變異濾除,以及提供區段內定向的 phase block。 深色的四步為新增者:以深度與等位獨立分段、位點層級四格表、 依 n₁ 分層的聯合最佳化,以及輸出四個量與其區間。 現行的「兩個矩加迴歸」被整段取代。

真實資料與證據

真值缺口

合成混合樣本依 read 比例混合,其所控制的量是分子比例 f。 本規格的主要輸出為 pκ,而這兩者在此資料上沒有乾淨的真值

f 反推 p 需要來源細胞株的倍體。以標示為 0.2 的混合樣本為例:

來源細胞株的 κ2.03.24.0
f=0.20 所對應的 p0.2000.1350.111

三條分開的評比軌道

因此驗證設計不能只有一張表。三個量的真值強度不同,須分開報告:

三條分開的評比軌道,各自的真值強度不同 三欄,各是一條評比軌道。 左欄是腫瘤 DNA 比例。它的真值就是混合時所用的比例,精確而且不需換算, 所以這一條可以跟現行的迴歸直接比較, 也是唯一一條能夠宣稱優於現行方法的軌道。 中欄是細胞比例與倍體。合成樣本沒有這兩個量的乾淨真值, 要取得就得另外做流式細胞術、DNA 指數、核型或螢光原位雜交, 而這些本身也帶不確定性。 所以這一條只能宣稱與其他方法一致,不能宣稱準確。 另一個可行的檢驗是自洽性:把估出來的細胞比例與倍體換算回腫瘤 DNA 比例, 再跟已知的混合比例對照。 右欄是校準度,包括區間的涵蓋率、失敗率,以及加倍模式判定的正確率。 這一條完全不需要外部真值,但它也完全不在平均絕對誤差與決定係數的涵蓋範圍內。 而它才是「這個數字可不可以拿去用」的依據。 讀法是:三條軌道不能混在同一張表裡報告,因為它們可宣稱的強度不同。 三條軌道要分開報告 三個量的真值強度不同,混在同一張表裡會讓最弱的一條借用到最強的一條的可信度。 腫瘤 DNA 比例 f 真值:混合比例,精確 不需換算,直接可比。 與現行迴歸同一個量。 可宣稱: 優於現行方法 唯一能這樣宣稱的一條 細胞比例 p 與倍體 κ 無乾淨真值 須另做流式細胞術、DNA 指數、 核型或 FISH,且皆帶不確定性。 或檢驗自洽性:由估得的兩者 換算回 f,與混合比例對照。 可宣稱: 一致,但非準確 校準度 不需外部真值 · 區間涵蓋率 · 失敗率 · 加倍模式的正確率 · 跨 basecaller 的重現性 MAE 與 R² 不涵蓋這一條 但它決定能否使用 混在同一張表裡報告,會讓最弱的一條借用到最強的一條的可信度 —— 讀者以為 p 也有 MAE 0.03 那種等級的驗證。 而此主題最欠缺的正是金標準,故第三條軌道的份量比一般情形更重。
三條軌道各有不同的真值來源與可宣稱的強度。 左:f 有精確真值(混合比例即為之),可與現行迴歸直接比較, 這是唯一能宣稱「優於現行方法」的軌道。 中:pκ 沒有乾淨真值, 只能與另有佐證的樣本比對,或檢驗自洽性 —— 由估得的兩者換算回 f,與已知混合比例對照。 右:校準度(區間涵蓋率、失敗率、加倍模式正確率)完全不在 MAE 與 R² 的涵蓋範圍內, 但它才是「這個數字可不可以拿去用」的依據。
軌道真值來源可宣稱什麼
f混合比例,精確與現行迴歸的直接比較
(p,κ)流式細胞術、DNA 指數、核型或 FISH;皆須另行取得且帶不確定性 僅能宣稱一致性,不能宣稱準確度
校準度不需外部真值區間涵蓋率、失敗率、加倍模式正確率

第三條軌道不需要金標準,而金標準正是此主題最欠缺的條件。 同一細胞株在不同 basecaller、不同機構之間的重現性亦屬此類。

預測與結果檢視

一份合成混合樣本標示為「purity 0.2」, 其來源細胞株的倍體為 3.2。某方法在此樣本上估得 cellular purity 為 0.14, 另一方法估得 0.18。哪一個比較準?

展開答案

0.14,而且用錯參考值會得到相反的答案。

該樣本以 read 比例合成,故標示的 0.2 是分子比例 f。對應的 cellular purity 為

p=2fκ(1f)+2f=2×0.203.2×0.80+0.40=0.135
估計值對真值 p=0.135 的誤差對標示值 0.20 的誤差
0.140.005(較佳)0.060
0.180.0450.020(較佳)

排名反轉。常見的誤解是「這個偏誤作用於所有受測方法,故排名不受影響」—— 該說法不成立,因為誤差是到參考值的距離,換掉參考值並非對所有估計值施加同一個平移。

其方向亦值得留意:用錯參考值的評比會系統性地偏好那些估得偏高、 恰好接近 f 的方法 —— 也就是偏好把 DNA 比例當純度回報的方法。 此偏誤不會在任何內部一致性檢查中顯現。

尚未解決的問題

  • 整條規格尚未執行。上述各項皆有代數上的依據,但均未在真實或模擬資料上檢驗。 最小的驗證為第八節第二期:由已知參數生成計數,確認可反解回原值。
  • 分層與估計互為前提。s 的分層需要可靠的每段 (n1,n2), 而後者正是要一併估計的量。此為典型的交替最佳化問題, 其收斂性與初始值敏感度未知
  • 偵測機率的形式未定。它至少依賴 VAF、深度與序列脈絡, 但其函數形式須由有真值的資料集估計,而該資料集目前僅有 HCC1395 一株。
  • ci 先驗的來源。本頁取自 subclone 的階層模型, 而該模型在本教材的另一個主題中本身也是待建立的對象; 兩處若各自選定不同的先驗,得到的 p 會不一致。
  • pκ 沒有乾淨的真值。三條軌道皆為間接, 且此條件不因方法改良而改善。
  • 與 subclone 重建共用 c兩處的估計理應一致, 目前各自獨立、未曾互相檢驗 —— 而互相檢驗本身即為一項不需金標準的驗證。

原始文獻與程式碼

本頁的計數定義與各項閉式,均以 LongPhase-S 的原始碼為準: GHIR 的定義見 src/haplotag/HaplotagStrategy.hcalculateHaplotypeImbalanceRatio; 五個計數與其填入條件(含 hpResult 為 read 層級標籤一事)見 src/somatic_haplotag/SomaticVarCaller.cpp; 低信心變異濾波與現行的迴歸流程見 src/somatic_haplotag/TumorPurityEstimator.cpp。 程式碼在 github.com/CCU-Bioinformatics-Lab/longphase-s, 方法與實測數值見其預印本 (bioRxiv, 2025,doi 10.1101/2025.11.20.689492)。

第一節的似然形式、第三節的分段分工與第五節的格點變換, 其出處、常數與程式碼位置均列於上篇的同名節次,此處不重複。 負二項與 beta-binomial 在定序計數上的適用性為標準結果, 可見於任何一本計數資料迴歸的教科書。

本模組術語

TINC(腫瘤污染正常樣本)
Tumour-in-normal contamination:配對正常樣本含有腫瘤來源訊號,使 genuine somatic 變異也可能在 normal 中被觀察到,因而可能被錯誤過濾。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。