本文是基於SHAPIT2和SHAPEIT4的,先介紹SHAPEIT2的算法原理,然后簡單介紹了一下SHAPEIT4更新的部分。文中介紹主要集中在算法部分,比較簡介,具體內容請看參考文獻。
[SHAPEIT2的參考文獻為:a linear complexity phasing method for thousands of genomes;SHAPIT4的參考文獻為:Accurate, scalable and integrative haplotype estimation]
相比於其他單體型分型軟件,SHAPEIT2一共有兩個改進,第一個改進是壓縮,第二個改進是抽樣。
壓縮部分:
設定G為一個獨立個體的基因型(genotype),H為除了這個個體以外的其他樣本的單體型(haplotype),H和G涉及到的SNP相同。這里的H,說是其他個體的單體型,但是在計算剛開始的時候其他個體的單體型並不是已知的。所以在計算剛開始的時候是列舉其他個體所有滿足基因型G的單體型,然后從其中隨機選取單體型作為已知的單體型,組成單體型集合H。在該情況下,推測獨立個體的基因型,即推測出符合G的約束的兩個單體型,即P(h|H)。
圖1
在該方法中,對圖H進行壓縮,構建CHMM,即壓縮隱馬爾可夫模型。在原圖H中,假設有K個單體型,涉及M個SNP,圖2即壓縮后的圖Hg。壓縮方法:在M個SNP中隨機選擇一個點作為起始點,給定一個壓縮后的單體型個數J(J<M),在起始點左邊,從左到右,逐個合並SNP,把在這些SNP范圍內的單體型進行合並,知道合並后的單體型個數最接近J,這一部分算作一個片段(segment)。當合並后單體型個數最接近J時,斷開segment,從接下來的一個SNP繼續按此方法進行單體型合並,以此進行,直到把起始點合並進一個segment。在起始點的右邊,從右向左進行合並,合並方法與左邊類似。直到包含起始點。
圖2
在圖Hg中,每個點和每個邊均被賦予權重,權重分別為穿過該點和邊的單體型的個數,分別記作c(km)和c(km,km+1)。每個點和邊都至少有一個單體型穿過,並且H中的每個單體型在Hg中都有唯一路徑。
壓縮后的圖去除了單體型的局部冗余,並且即使樣本量增加或SNP增加,圖的大小仍在一定范圍內,圖中的節點個數為JM個。完成壓縮后,不再基於H圖建立隱馬模型,而是基於Hg建立模型,即P(h|hg)。則有M個隱藏狀態z={z1,...,zm,...zM},和M個觀測狀態{h1,..,hm,...,hM},這M個觀測狀態即為Hg中表示的單體型。
基於Hg的隱馬模型,其參數為:
起始狀態概率:
狀態轉移概率:
狀態發射概率:
抽樣部分:
對於一個無關個體,設G和D分別觀測的基因型和未知的二倍體。目標就是求出P(D|G,hg)。
對於給定的G,如果G中含有s個雜合子位點,則所有單體型的個數為2s,當SNP個數增大時,該數量不可計算。所以使用類似壓縮圖的方法對其進行壓縮,形成sg。通常sg 每個片段包含3個雜合位點。每個單體在sg中都有唯一路徑x={x1,..,xm,...,xM}。
與圖Hg相比,有sg兩個不同,第一是片段的邊界不同,第二是圖sg沒有權重。
圖3
P(D|G,hg)即從P(h|hg)中抽取中的一個路徑h,也就相當於從P(x|hg)中抽取一個路徑x放入到sg。即獲得P(x|hg),其中x是sg中的一個路徑。
根據馬爾科夫鏈特性,即當前節點僅與前一個節點有關,則在給定節點xm時,xm-1和xm+1無關。所以有(這里有一個奇怪的特性,因為x是觀測鏈,正常情況下x是不具有馬爾科夫性的,但是這里卻使用了馬爾可夫性。這里可能是因為狀態空間和觀測空間是一致的,都是從{0,1}取值,所以也具有馬爾可夫性,而且從文獻可以看到在推測出觀測鏈x之后,還有把x放入H進行下一個個體單體型的推測,這也要求其具有馬爾可夫性):
這就構成了馬爾可夫鏈,其中狀態和轉移分別為sg中的點和邊。從P(x1|Hg)中隨機抽取一個節點,然后使用P(xm|xm-1,Hg)進行迭代,直到完成M個節點的完整路徑。
要計算P(x|Hg)即需要知道P(x1|Hg)和P(xm|xm-1,Hg)。另外我們可以看到P(x|Hg)其實就是P(x,z|Hg)的一個邊緣概率。P(x,z|Hg)是聯合概率,它有兩個邊緣概率,分別是P(x|Hg)和P(z|Hg)。聯合概率和邊緣概率的關系為:
所以從解決邊緣概率P(x|Hg)的問題轉換為求聯合概率P(x,z|Hg)。
對聯合概率,有公式:
對於聯合概率的求解,不是直接計算,而是采用前向后向的算法。
對於給定位置m,在m之前,使用前向算法:
在給定位置m之后,使用后向算法:
前向后向算法計算的是聯合概率,所以最后使用聯合概率的值計算邊緣概率:
這里只獲得了P(x1|Hg)和P(xm,xm+1|Hg),並沒有獲得P(xm+1|xm,Hg),這里是一個吉布斯采樣的過程,基於吉布斯采樣有一個特性,即聯合概率正比於條件概率:
此時就獲得了條件概率P(xm+1|xm,Hg)的近似值,當獲得這兩項之后就可以使用一下公式,抽取符合基因型G的單體型了。
這樣就可以計算每個x的概率。對於所有符合G的單體型對,選出概率最大的既可。每計算完一個個體,就把算出的結果放入H,重新構成一個新的隱馬模型,然后對下一個個體進行計算,如此迭代,直到計算完成。
SHAPEIT4更新內容:
SHAPEIT4更新了兩個內容:1.更新H集合的構建方式;2.允許三種額外信息輔助分型。
圖4
1.更新H集合的構建方式
在SHAPEIT2中是從所有樣本可能的單體型中隨機選取K個構成集合H,然后對H進行壓縮,基於壓縮后的圖構建模型。在SHAPEIT4中,在除了當前樣本以外的所有樣本可能的單體型上,使用PBWT算法,選出與當前樣本可能單體型最相似的P個單體型構成集合H,然后按照每8個SNP一組,對H進行SHAPEIT2類似的壓縮,然后建立模型。
2.允許三種額外信息輔助分型
在SHAPEIT4可以使用三種額外信息來輔助進行SNP分析,這三種額外信息分別為:reference panel、haplotype scaffold和reads。使用這三種額外信息可以使分型結果更加准確。
其中S和R分別表示haplotype scaffold和reads提供的局部分型結果,reference panel的信息是在構建H時使用的,若存在reference panel,會在基於reference panel和其他樣本的共同基礎上建立PBWT算法,選出最相似的單體型,進而構建H。圖5中S,即haplotype scaffold信息,在對圖中Genotype graph構建的時候作為約束條件使用的。通過刪除與haplotype scaffold不一致的候選h,可以減少Genotype graph的尺度。圖5中的R,即reads信息,是在sampling的時候使用的,在進行sampling時,會允許選擇的單體型h和reads信息有一定的錯誤率,並且通過選擇的單體型h和reads信息進行比較,與reads信息越一致的單體型其權重越大,結果也更傾向於這樣的單體型。根據以上描述,分別對reference panel、haplotype scaffold和reads信息進行利用,以輔助單體型分型。
圖5