GATK:HaplotypeCaller變異檢測

本文是閱讀一個做算法的文章,有些收獲和想法,作為一種記錄
我們在使用gatk call snp的時候,常常使用HaplotypeCaller這個參數,這個參數的目的是檢測出用來進行snp及小indel變異

HaplotypeCaller這個參數使用的是預組裝的方法,能提高變異檢測的準確度,但是在某種程度上增加了資源的消耗和分析時長。在分析時,該模塊并不會在基因組范圍進行全局的變異檢測,而是劃定高變區間檢測,以下是具體的步驟及原理圖。


一般在重測序變異檢測中,需要測一定深度的reads,那么gatk HaplotypeCaller首先根據參考基因組過一遍,找到那些高變異的區間,然后對區間內的數據及基因組進行組裝并且預估單倍型,再就是根據該單倍型計算似然值,最后判定

1.定義區間

為了加速程序的處理速度,gatk并不會對全基因組范圍內的所有位點進行變異檢測,只會對高變區進行檢測,也就是所謂的Active Regions。此處定義的區間選擇,來源于比對結果,包括其中的錯配、插入、缺失以及soft clipping。

計算時,會計算每個位點出現突變的概率,這一步會同時考慮分型最大似然值以及雜合率,之后通過高斯核做卷積來擴大概率值。當概率值超過0.002時,該區間就會被定義為高變區。在計算過程中,程序會對毗鄰的高變區(100bp)進行合并處理,設定的區域大小最小50bp,最長300bp,如果合并區超過300bp,會被截斷形成2個或多個高變區,并且存在overlap的reads在相鄰的兩個高變區中都參與運算。

2.數據組裝

高變區的reads以及對應的基因組區域會被切割成存在overlap的小片段,若參考基因組對應的片段集合中存在重復,會將短片段的長度遞增直到沒有重復或者達到最大長度限制(65nt),若存在65nt的重復短序列,組裝停止。序列切割完成后使用de-Bruijn-like graphs算法進行組裝。組裝獲得的邊緣根據比對到的reads數目分配權重,比對數量較少的邊會從圖形中刪除,以此來對圖形進行精簡并形成單倍型數據。
組裝完成后會給每個單倍型生成CIGRA信息,以此為依據進行位點的分型。

這一過程類似于序列比對:
也就是說在第一步檢測高變異區間以后,gatk會根據測序reads的情況重組單倍型,當然根據位點的不同變異會組裝出許多單倍型,那么重組好的單倍型相互之間進行比對,從而篩選出它們之間的變異snp
最后,將這一些單倍型和參考基因組比對,這樣就篩選出單倍型之間以及單倍型和參考基因組的snp變異信息了(圖中黃色表格)

3.隱馬爾科夫模型預估最大似然值

上一步我們說到根據不同reads的變異信息組裝出許多的單倍型,那么我們就要將這些reads重新比對會這些單倍型,并且構成單倍型矩陣(某個位點的單倍型矩陣)


組裝完成后,將原有的reads回帖到獲得的單倍型序列,之后根據比對結果預估在不同單倍型中的最大似然值(likelihood)。具體原理是使用隱馬爾科夫模型(pair-HMM,paired Hidden Markov Model)對reads和單倍型之間進行最大似然值的預估

利用馬爾可夫模型進行序列比對


在序列比對中,我們將Match,Insert和Delete看作為三個狀態,分別用M,I 和D來表示(可參考http://www.lxweimin.com/writer#/notebooks/42286457/notes/65851344/preview
比對所得到的似然值可以構成了單倍型矩陣,具體展開為:

那么接下來,我們根據單倍型以及reads比對到每個單倍型的情況,將該矩陣進行轉換,轉換為突變基因的似然值:

其中,上面的矩陣為某位點的單倍型矩陣,橫坐標為不同組裝的單倍型(1,2,3,4,可視為不同的單倍型),縱坐標為測序的reads(1,2,3代表reads 1,2,3),矩陣對應的值就是每條reads比對到該位點的似然值,我們選似然值較高的單倍型作為突變后的基因型
如果考慮突變成兩個堿基(即考慮等位基因突變)
我們通常將每一條reads比對到每種單倍型上,得到相應的似然值,對于每一條reads來說選擇似然值最大的兩個單倍型
即將每一條reads在四個單倍型中最高的兩個似然值選出來構成兩列的矩陣,根據該矩陣中每條reads在該位點堿基出現的頻率來判斷突變的類型,比方說第一列中2號單倍型出現頻率最多(綠色一共出現2次),即定為此單倍型為第一備選單倍型;而第二列中3號單倍型出現頻率最多(暗橙色一共出現2次),選該單倍型為第二備選單倍型,而第一備選單倍型在相應高突變位點為C堿基,第二備選單倍型在相應高突變位點為A堿基,這樣就篩選出了兩個備選堿基組合

4.分型結果判定

對高突變區的重組單倍型完成后,接下來需要進行分型檢驗,即檢測所測物種突變成什么類型的堿基,以及突變為一個堿基還是兩個堿基
確定該物種突變所得的類型以后,與參考基因組對比,看看突變情況



上圖表示:

  1. A/C,0/0表示突變類型為A/A;0/1表示突變類型為A/C;1/1表示突變類型為C/C
  2. A/G,0/0表示突變類型為A/A;0/1表示突變類型為A/G;1/1表示突變類型為G/G
    其中0/0和1/1表示突變為1個堿基,0/1表示為突變成2個堿基

根據上述計算,我們可以得到突變基因矩陣,并且定義如下關系式子:


其中G為先驗的基因型信息,為已知信息,故P(G) = 1
P(G | R)為在測得的reads的信息條件下,基因型為G的概率,為后驗信息


接下來我們根據等位基因矩陣計算每一種突變類型的概率值,其中G(C/C)為突變基因矩陣第一列的每個元素和自己相加再除以2,最后結果相乘;而G(C/A)為突變基因矩陣每一行的前后兩個元素相加,再除以2,最后結果相乘,以此類推,最后將這些基因型的似然值相加,得到0.002116
最后用貝葉斯公式計算每個堿基突變類型的概率值,選取最大的作為最合適的突變類型,該例子顯然是C/C為最佳突變類型,即突變為C堿基
之后可以將這個基因型于參考基因組對比,看看是否發生變異

參考:http://www.lxweimin.com/p/d6964cdcf4c6

https://mp.weixin.qq.com/s/wt1DuVPN1qOpIolfwrgfsg

https://gatk.broadinstitute.org/hc/en-us/articles/360035890531?id=4442

https://mp.weixin.qq.com/s/ZSytDBkP8XYZ57nJHezWWw

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。