模組 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 轉換。