目前,構建Graph的主流方法有3種,Overlap-Layout-Consensus(Celera Assembler、PBcR),de Bruijn Graph(SOAPdenovo ) 和 String Graph(Falcon)。
相關文獻
- 基於De Bruijn圖的宏基因組序列組裝算法研究(CNKI)
- 對基因組組裝算法的分析和研究(CNKI)
- 基於De Bruijn圖的De Novo序列組裝軟件性能分析(CNKI)
- DNA序列拼接中de Bruijn圖結構的研究(CNKI)
- 基因組學策略(二)揭開組裝的神秘面紗上篇(諾禾致源)
- String graph – Wikipedia
- De Bruijn graph – Wikipedia
前言
基因組組裝的基本思路:無論是一代sanger、二代短reads、三代長Pacbio,我們得到的測序數據相較於整個基因組而言仍然是極小的;我們的任務就是將這些小片段連接起來;序列之間的聯系因為重復序列的存在變得非常復雜,通過overlap我們最終都會構建Graph,所有的算法都會從Graph中得到最優路徑,從而得到最初的contig。
1 OLC算法
適用於reads讀長較大的測序數據,如一代和三代的reads。
主要分為三步:(1)Overlap:,對所有reads進行兩兩比對,找到片段間的重疊信息;(2)Layout:根據得到的重疊信息將存在的重疊片段建立一種組合關系,形成重疊群,即Contig;(3)根據構成Contig的片段的原始質量數據,在重疊群中尋找一條質量最重的序列路徑,並獲得與路徑對應的序列,即Consensus。
OLC算法最初成功的用於Sange測序數據的組裝,比如Celera Assembler,Phrap,Newbler等均采用該算法進行拼接組裝。
2 DBG算法
適用於reads比較短的測序數據,二代數據。缺點:難以對重復序列區域進行分析,更依賴於建庫。
首先將reads打斷成長度為K的核酸片段,即Kmer,在利用Kmer間的overlap關系構建DBG,再通過DBG得到基因組序列。
DBG算法最早應用於如細菌類小的基因組的組裝上,直到李瑞強等(2010)開發SOAPdenovo 算法,成功的組裝了采用二代測序的黃瓜及熊貓的基因組,DBG算法開始普遍運用。
假設我們獲得的reads是20bp,圖1a中,生成6個片段,每個片段長度(L)是10bp,至少重疊長度(O)為5bp,然后各個片段建立OLC圖。圖1b的Kmer為5,建立DBG圖。
DBG算法相比於OLC的優勢是什么?
由於二代測序得到的reads長度較短,包含的信息量較少,因此完成基因組拼接需要較高的覆蓋度。OLC算法適用於讀長較長的序列組裝,通過構成的OLC圖尋找Consensus sequence的過程,實際上是哈密頓通路尋找的問題,算法非常復雜。
若采用OLC算法,會大大增加拼接的復雜性以及運算量。而采用DBG算法,通過K-1的overlap關系,構建DBG圖,通過尋找歐拉路徑得到Contig序列,從算法的角度極大的簡化了組裝的難度。
講完算法,我們以目前應用廣泛的 SOAPdenovo 軟件為例來介紹組裝過程。
SOAPdenovo軟件的組裝過程
(1)通過Kmer之間K-1的overlap關系構建contig(重疊群),如圖2:
(2)利用pair-end信息,將無overlap關系的contigs搭建成scaffold(腳手架),如圖3:
1數據糾錯
要得到一個有較高准確性的基因組圖譜,首先對測序得到的數據進行處理:
將reads逐bp打斷成長度為K的連續核酸序列,如上圖a所示,若這條reads中間由於測序錯誤有一個錯誤的鹼基,那么在得到的Kmer中,也會有一些錯誤Kmer或者低頻Kmer。
繪制Kmer頻數分布圖時,如上圖b所示,Error free代表沒有測序錯誤的Kmer頻數分布,Error rate1%代表有1%錯誤率的Kmer頻數分布。
錯誤Kmer對后續組裝會產生很大的困擾,因此,在構建DBG圖之前,需要先對數據進行糾錯。糾錯的兩種方法:
(1)基於Read間的比對,通過多序列比對,通過概率模型區分測序錯誤引起的錯誤Kmer。這種方法糾錯准確,但需要消耗較大的計算資源。如ALLPATH-LG,ECHO等糾錯軟件都基於這種方法。
(2)通過Kmer頻數圖譜進行區分,這類軟件如SOAPdenovo,Euler等。
2構建Contig
根據Kmer之間的overlap關系進行連接,如下圖所示:
reads(read1:AGATCTTGTTATT;read2:GTTATTGATCTCC)逐bp的打斷成長度為5bp的Kmer,根據Kmer間的overlap關系進行連接。可以看到兩條reads中 GATCT 和 GTTATT 是兩個重復的片段,在構建De Bruijn圖中,會形成如上圖的泡狀結構以及多個分支的情況,面對這種很復雜的圖,如何才能找到那一條正確的路徑呢?
(1)對De Bruijn圖進行化簡
簡化De Bruijn圖需要去掉無法繼續連接的分支、低覆蓋度的分支,並且利用序列信息化簡重復序列在De Bruijn圖的分叉通路,對於少量的雜合位點,采用隨機選擇策略,合並雜合位點。通常需要考慮如下幾種情況:
(2)得到一個簡化的De Bruijn圖后,仍然會因有很多分叉位點無法確定真正的連接關系,因此接下來在每個分叉位點將序列截斷,得到了最初contigs。
留給大家一個思考題:根據上述步驟,我們看下圖4中復雜的De Bruijn示意圖,可以得到什么樣的contigs呢?(答案見文末)
3構建scaffold
將測序得到的reads比對回得到的contigs,利用reads之間的連接關系和插入片段大小信息,將contigs組裝成scaffolds。
4補洞
得到的scaffold中間會有較多的gap,為了使組裝的序列更完整,需再次利用測序的雙末端數據之間的配對關系連接contigs,並利用測序數據與已經組裝的contig之間的覆蓋關系對contig之間空隙進行補洞,延長contigs,補洞后的contigs長度相比補洞之前一般增加2-7倍。
“揭開組裝的神秘面紗下篇”敬請期待~
參考文獻
-
Li RQ, Zhu HM, Ruan J, et al. Denovo assembly of human genomes with massively parallel short readsequencing. Genome Res. 2010, 20(2), 265-72.
-
Li ZY, Chen YX, Mu DS, et al. Comparison of the two majorclasses of assembly algorithms: overlap-layout-consensus andde-bruijn-graph. Brief Funct Genomics. 2012, 11(1), 25-37
3 string graph算法
有利於組裝散列重復序列。
string graph中的節點是長度不一的序列,這些序列是由overlapping reads生成,需要設置一個最小overlap大小。
學習資源:
The fragment assembly string graph
基因組組裝算法研究(已審核) - 百度文庫