純二代測(cè)序從頭組裝基因組

基因組組裝

基因組組裝一般分為三個(gè)層次,contig, scaffold和chromosomes. contig表示從大規(guī)模測(cè)序得到的短讀(reads)中找到的一致性序列。組裝的第一步就是從短片段(pair-end)文庫(kù)中組裝出contig。進(jìn)一步基于不同長(zhǎng)度的大片段(mate-pair)文庫(kù),將原本孤立的contig按序前后連接,其中會(huì)調(diào)整contig方向以及contig可能會(huì)存在開(kāi)口(gap,用N表示),這一步會(huì)得到scaffolds,就相當(dāng)于supercontigs和meatacontigs。最后基于遺傳圖譜或光學(xué)圖譜將scaffold合并調(diào)整,形成染色體級(jí)別的組裝(chromosome).

目前基于二代測(cè)序的組裝存在挑戰(zhàn):

  • 全基因組測(cè)序得到的短讀遠(yuǎn)遠(yuǎn)小于原來(lái)的分子長(zhǎng)度
  • 高通量測(cè)序得到海量數(shù)據(jù)會(huì)增加組裝的計(jì)算復(fù)雜性,消耗更高的計(jì)算資源
  • 測(cè)序錯(cuò)誤會(huì)導(dǎo)致組裝錯(cuò)誤,會(huì)明顯影響contig的長(zhǎng)度
  • 短讀難以區(qū)分基因組的重復(fù)序列
  • 測(cè)序覆蓋度不均一,會(huì)影響統(tǒng)計(jì)檢驗(yàn)和結(jié)果結(jié)果診斷

上述的問(wèn)題可以嘗試從如下角度進(jìn)行解決

  • 短讀長(zhǎng)度:可以通過(guò)提供更多樣本,并且建庫(kù)時(shí)保證位置足夠隨機(jī)
  • 數(shù)據(jù)集大小: 使用K-mers算法對(duì)數(shù)據(jù)進(jìn)行組裝。assembler不再搜尋overlap,而是搜索具有相同k-mers的reads。但是k-mer算法相比較overlap-based算法,靈敏度有所欠缺,容易丟失一些true overlaps。關(guān)鍵在于定義K。: K-mer表示一條序列中長(zhǎng)度為k的連續(xù)子序列,如ABC的2-mer為AB,BC
  • 測(cè)序錯(cuò)誤: 必須保證測(cè)序結(jié)果足夠正確, 如提高質(zhì)量控制的標(biāo)準(zhǔn)
  • 基因組重復(fù)區(qū): 測(cè)序深度要高,結(jié)果要正確。如果repeat短于read長(zhǎng)度,只要保證有足夠多且特異的read。如果repeat長(zhǎng)于read,就需要paired ends or “mate-pairs”
  • 覆蓋度不均一: 提高深度,保證隨機(jī)
  • 組裝結(jié)果比較:contig N50, scaffold N50, BUSCO
什么叫做N50

二代數(shù)據(jù)組裝的算法和工具

基因組組裝的組裝工具主要分為三類:基于貪婪算法的拼接方法,基于讀序之間的重疊序列(overlapped sequence)進(jìn)行拼接的OLC(Overlap-Layout-Consensus)拼接方法和基于德布魯因圖(de bruijn graph)的方法,這三種方法或多或少基于圖論。第一種是最早期的方法,目前已被淘汰,第二種適用于一代測(cè)序產(chǎn)生長(zhǎng)片段序列,可以稱之為字符串圖(string graph),第三種是目前二代測(cè)序組裝基因組的工具的核心基礎(chǔ),也就是要繼續(xù)介紹的de bruijn圖。

示意圖

de bruijn圖由兩部分組成,節(jié)點(diǎn)(Nodes)和邊(Edges),節(jié)點(diǎn)由k-mers組成,節(jié)點(diǎn)之間要想形成邊就需要是兩個(gè)k-mers存在K-1個(gè)完全匹配。比如說(shuō),ACTG, CTGC, TGCC在K=3時(shí)的k-mers為ACT,CTG,TGC,GCC,可以表示為ACT -> CTG -> TGC -> GC.

對(duì)于de brujin圖而言,冗余序列不會(huì)影響k-mers的數(shù)量,比如說(shuō)ACTG,ACTG,CTGC,CTGC,CTGC,TGCC,TGCC在K=3時(shí)依舊表示為ACT -> CTG -> TGC -> GCC。

上面是理想情況,實(shí)際序列中的測(cè)序錯(cuò)誤,序列之間的SNP以及基因組低復(fù)雜度(重復(fù)序列)就會(huì)出現(xiàn)如下de brujin圖

測(cè)序錯(cuò)誤引起分支
SNPs的氣泡結(jié)構(gòu)
重復(fù)區(qū)域引起的氣泡

用圖的方式表示就是下面情況

幾種比較復(fù)雜的圖

組裝軟件的任務(wù)就是從k-mers形成的圖按照一定的算法組裝出可能的序列,根據(jù)"GAGE: A critical evaluation of genome assemblies and assembly algorithms"以及自己的經(jīng)驗(yàn),目前二代數(shù)據(jù)比較常用的工具有Velvet, ABySS, AllPaths/AllPaths-LG, Discovar, SOAPdenovo, Minia, spades,Genomic Assemblers這篇文章有比較好的總結(jié),

  • ALLPaths-LG是公認(rèn)比較優(yōu)秀的組裝工具,但消耗內(nèi)存大,并且要提供至少兩個(gè)不同大小文庫(kù)的數(shù)據(jù)
  • SPAdes是小基因組(<100Mb)組裝時(shí)的首選
  • SOAPdenovo是目前使用率最高的工具(華大組裝了大量的動(dòng)植物基因組),效率也挺好,就是錯(cuò)誤率也高
  • Minia是內(nèi)存資源最省的工具,組裝人類基因組contig居然只要5.7G的RAM,運(yùn)行23小時(shí),簡(jiǎn)直難以相信。

當(dāng)然工具之間的差別并沒(méi)有想象的那么大,也沒(méi)有想象中那么小,可能在物種A表現(xiàn)一般的工具可能在物種B里就非常好用,因此要多用幾個(gè)工具,選擇其中最好的結(jié)果。

數(shù)據(jù)準(zhǔn)備

這里使用來(lái)自于GAGE的金黃色葡萄球菌 Staphylococcus aureusa 數(shù)據(jù)進(jìn)行練習(xí)。一方面數(shù)據(jù)量小,服務(wù)器能承受并且跑得快,另一方面本身基因組就組裝的不錯(cuò),等于是考完試能夠自己對(duì)答案。

mkdir Staphylococcus_aureu && cd Staphylococcus_aureus
mkdir genome
curl ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/013/425/GCF_000013425.1_ASM1342v1/GCF_000013425.1_ASM1342v1_genomic.fna.gz > genome/Saureus.fna.gz
mkdir -p raw-data/{lib1,lib2}
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/frag_1.fastq.gz > raw-data/lib1/frag_1.fastq.gz
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/frag_2.fastq.gz > raw-data/lib2/frag_2.fastq.gz
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/shortjump_1.fastq.gz > raw-data/lib2/shortjump_1.fastq.gz
curl http://gage.cbcb.umd.edu/data/Staphylococcus_aureus/Data.original/shortjump_2.fastq.gz > raw-data/lib2/shortjump_2.fastq.gz

基因組survey

在正式組裝之前,需要先根據(jù)50X左右的illumina測(cè)序結(jié)果對(duì)基因組進(jìn)行評(píng)估,了解基因組的大小,重復(fù)序列含量和復(fù)雜度。基于這些信息,確定后續(xù)策略以及是否真的需要對(duì)該物種進(jìn)行測(cè)序。

基因組survery的核心就是使用k-mers對(duì)整體進(jìn)行評(píng)估,k-mers時(shí)基因組里長(zhǎng)度為k的子序列,當(dāng)k=17時(shí),ATCG的組合數(shù)就有170億種,也就說(shuō)理想條件下基因組大小只有超過(guò)17Gb才會(huì)出現(xiàn)2條一摸一樣的k-mers。比如說(shuō)有一個(gè)長(zhǎng)度為14的序列,給定k-mers的k為8,于是能產(chǎn)生7條長(zhǎng)度為8的子序列,于是推測(cè)基因組大小為7bp,但是這似乎和實(shí)際的14bp偏離有點(diǎn)遠(yuǎn).

GATCCTACTGATGC (L=14), k-mers for k=8
n = (L-k) + 1 = 14 - 8 + = 7
GATCCTAC,     ATCCTACT,     TCCTACTG,     CCTACTGA,     CTACTGAT,     TACTGATG,     ACTGATGC

如果基因組大小為1MB, 那么當(dāng)k-mers的k=18時(shí),會(huì)得到(1000000-18)+1=999983個(gè)不同的k-mers,與實(shí)際大小偏差僅僅只有0.0017%,也就說(shuō)基因組越大,預(yù)測(cè)就越接近。這是對(duì)單條基因組的估計(jì)結(jié)果,實(shí)際上高通量測(cè)序會(huì)得到基因組30X到50X深度的測(cè)序結(jié)果,比如說(shuō)10個(gè)拷貝(C)的“GATCCTACTGATGC”在k-mers=8時(shí)會(huì)有70條子序列,

n = [(L-K) + 1] * C = [(14-8)+1]*10 = 70

為了得到實(shí)際的基因組大小,既需要將70除以拷貝數(shù)10,那么就得到了和之前一樣的預(yù)測(cè)值7。當(dāng)然上述都是理想條件,實(shí)際上測(cè)序不均一低復(fù)雜區(qū)域重復(fù)序列等都會(huì)影響預(yù)測(cè)結(jié)果。舉個(gè)例子,"Genome sequencing reveals insights into physiology and longevity of the naked mole rat"的k=17, k_num=52,143,337,243,測(cè)序程度可以通過(guò)k-mers深度分布曲線來(lái)估計(jì)

17-k-mer預(yù)測(cè)基因組大小

圖中,深度為1的k-mers所占比例最高,表示絕大多數(shù)的k-mers僅僅出現(xiàn)了幾次,這可能是測(cè)序錯(cuò)誤造成。后續(xù)在depth=20逐漸形成一個(gè)峰,說(shuō)明測(cè)序測(cè)度大概是20x附近,實(shí)際上是19x有極大值。于是基因組的大小就是"52,143,337,243/19=2744386170", 差不多就是2.74Gb

k-mers一般選擇17即可,對(duì)于高度重復(fù)基因組或者基因組過(guò)大,可以選擇19甚至31也行。但不是越大越好,因?yàn)槿绻粭lreads里有一個(gè)錯(cuò)誤位點(diǎn),越大的k-mers就會(huì)導(dǎo)致包含這個(gè)錯(cuò)誤位點(diǎn)的k-mers個(gè)數(shù)增多。

根據(jù)上述的介紹,便可以使用jellyfish統(tǒng)計(jì)k-mer,然后用R作圖對(duì)基因組進(jìn)行評(píng)估。當(dāng)然這類工具其實(shí)已經(jīng)有人開(kāi)發(fā),比如說(shuō)ALLPATHS-LG/FindErrors,它不但能夠修正低質(zhì)量的短讀,還能初步評(píng)估基因組,還有GCE(genome characteristics Estimation),由華大基因開(kāi)發(fā)出來(lái)的一款基因組評(píng)估工具等。為了避免重復(fù)造輪子,簡(jiǎn)單就用這些工具即可。

使用GCE評(píng)估基因組: 先用kmer_freq_hash統(tǒng)計(jì)k-mer頻數(shù)

# Staphylococcus_aureus項(xiàng)目根目錄下
mkdir genome_survey && cd genome_survey
## 提供用于read的位置信息
ls raw-data/lib1/frag_*.fastq.gz > genome_survey/reads.list
## k-mer_freq_hash統(tǒng)計(jì)
~/opt/biosoft/gce-1.0.0/kmerfreq/kmer_freq_hash/kmer_freq_hash -k 15 -l genome_survey/reads.list -t 10 -o 0 -p genome_survey/sa &> genome_survey/kmer_freq.log

k-mer_freq_hash運(yùn)行結(jié)束后會(huì)有粗略估計(jì)基因組大小,粗略估計(jì)為4.22Mb。注意,Kmer_individual_num 數(shù)據(jù)用于gce的輸入?yún)?shù)。

隨后用gce程序基于前面的輸出結(jié)果進(jìn)行估計(jì)

~/opt/biosoft/gce-1.0.0/gce -f genome_survey/sa.freq.stat -c 16 -g 108366227 -m 1 -D 8 -b 0 > genome_survey/sa.table 2> genome_survey/sa.log
# -c為主峰對(duì)應(yīng)depth
# -g使用的就是Kmer_individual_num對(duì)應(yīng)值
# -m 選擇估算模型,真實(shí)數(shù)據(jù)選擇1,表示連續(xù)型

在這次的日志文件中有預(yù)測(cè)后的結(jié)果4.34Mb,但是根據(jù)NCBI的數(shù)據(jù),這個(gè)物種的基因組大小是2.8M左右。因此使用k-mers通過(guò)數(shù)學(xué)方法預(yù)測(cè)存在一定的局限性,需要結(jié)合流式細(xì)胞儀和粗組裝的結(jié)果。

雖然也可以使用FindErrors對(duì)基因組進(jìn)行評(píng)估,但是我實(shí)際使用時(shí)出現(xiàn)了各種問(wèn)題,這里不做介紹。其他的工具也是大同小異,不做額外推薦。

基因組正式組裝

當(dāng)你拿到測(cè)序數(shù)據(jù)后,就可以按照如下幾步處理數(shù)據(jù)。第一步是數(shù)據(jù)質(zhì)控控制,這一步對(duì)于組裝而言非常重要,處理前和處理后的組裝結(jié)果可能會(huì)天差地別;第二步,根據(jù)經(jīng)驗(yàn)確定起始參數(shù),如K-mer和覆蓋率;第三步,使用不同軟件進(jìn)行組裝;第四步,評(píng)估組裝結(jié)果,如contig N50, scaffold N50, 判斷是否需要修改參數(shù)重新組裝。

原始數(shù)據(jù)質(zhì)量控制

盡管目前的測(cè)序技術(shù)已經(jīng)非常成熟,公司提供的數(shù)據(jù)一般都可以直接用于普通的項(xiàng)目(特殊項(xiàng)目如miRNA-seq除外)。但由于 de novo 組裝對(duì)數(shù)據(jù)質(zhì)量比較敏感,因此需要通過(guò)質(zhì)控來(lái)降低偏差。原始數(shù)據(jù)質(zhì)量控制分為四個(gè)部分:

  • 了解數(shù)據(jù)質(zhì)量: 了解質(zhì)量這一步可以暫時(shí)忽略,基本上基因組測(cè)序的結(jié)果都能通過(guò)FastQC的標(biāo)準(zhǔn)。
  • 去接頭和低質(zhì)量reads過(guò)濾: 去接頭和低質(zhì)量reads過(guò)濾可供選擇的軟件非常之多,如NGSQCToolkit, Trimmomatic, cutadapter, 似乎都是國(guó)外開(kāi)發(fā)的軟件,但其實(shí)國(guó)內(nèi)也有一款很優(yōu)秀的工具叫做fastp
  • 去除PCR重復(fù): 去重一般都是在比對(duì)后根據(jù)位置信息進(jìn)行,沒(méi)有基因組的話只能根據(jù)PE的reads是否完全一樣進(jìn)行過(guò)濾。從理論上說(shuō),測(cè)序相當(dāng)于是從基因組上隨機(jī)抽樣,不太可能存在完全一摸一樣的兩條序列。不過(guò)貌似只有FastUniq能做這件事情,后來(lái)有一個(gè)人寫(xiě)了sequniq。
  • reads修正: 除了過(guò)濾或修剪低質(zhì)量的reads外,一般而言,還需要對(duì)reads中的錯(cuò)誤堿基進(jìn)行修正。尤其當(dāng)測(cè)序的覆蓋度比較高時(shí),錯(cuò)誤的reads也就越來(lái)越多,會(huì)對(duì) de novo 組裝造成不良的影響。工具有BLESS2, BFC, Musket等,其中BLESS2的效率最高,效果也不錯(cuò)。

去接頭和低質(zhì)量reads過(guò)濾這一步推薦fastp,主要是因?yàn)樗贑/C++,運(yùn)行速度塊。

# 使用, 項(xiàng)目文件夾下
mkdir -p clean-data{lib1,lib2}
~/opt/biosoft/fastp/fastp -i raw-data/lib1/frag_1.fastq.gz -I raw-data/lib1/frag_2.fastq.gz -o clean-data/lib1/frag_1.fastq.gz -O clean-data/lib1/frag_2.fastq.gz

效果非常的驚人,直接干掉了90%的reads,從原來(lái)的1,294,104條變成77,375,一度讓我懷疑軟件是否出現(xiàn)了問(wèn)題,直到我用同樣的代碼處理現(xiàn)在Illumina的測(cè)序結(jié)果以及看了FastQC的結(jié)果才打消了我的疑慮,沒(méi)錯(cuò),以前的數(shù)據(jù)質(zhì)量就是那么差。,除非是去接頭,否則不建議通過(guò)刪除序列的方式提高質(zhì)量。

質(zhì)控另一個(gè)策略是對(duì)短讀中一些可能的錯(cuò)誤堿基進(jìn)行糾正,測(cè)序錯(cuò)誤會(huì)引入大量無(wú)意義的K-mers,從而增加運(yùn)算復(fù)雜度。此處使用BFC對(duì)測(cè)序質(zhì)量:

~/opt/biosoft/bfc/bfc -s 3m -t 16 raw-data/lib1/frag_1.fastq.gz | gzip -1 > clean-data/lib1/corrected_1.fq.gz
~/opt/biosoft/bfc/bfc -s 3m -t 16 raw-data/lib1/frag_2.fastq.gz | gzip -1 > clean-data/lib1/corrected_2.fq.gz
處理前后

總之,質(zhì)控的目標(biāo)是在不引入的錯(cuò)誤的情況下盡量提高整體質(zhì)量,這一步對(duì)后續(xù)的組裝影響很大,所以盡量做這一步,除非組裝軟件要求你別做,那你就不要手賤了。

使用不同工具和參數(shù)進(jìn)行組裝

二代組裝可供選擇的工具很多, 但是主流其實(shí)就那么幾個(gè), 所以組裝的時(shí)候選擇3~5個(gè)工具運(yùn)行比較結(jié)果即可,比如說(shuō)MaSuRCA
, IDBA-UD, SOAPdenovo2, Abyss, velvet和Spades。當(dāng)然一旦你選擇一個(gè)軟件準(zhǔn)備運(yùn)行的時(shí)候,你就會(huì)遇到參數(shù)選擇問(wèn)題,比如怎么確定k-mers,組裝軟件最基礎(chǔ)也是最核心的參數(shù)。這里有幾條原則值得借鑒:

  • k要大于log4(基因組大小),如果數(shù)學(xué)不好,無(wú)腦選擇20以上
  • 盡量減少測(cè)序錯(cuò)誤形成的k-mers, 因?yàn)檫@是無(wú)意義的噪音, 也就是要求k不能過(guò)大
  • 當(dāng)然k也不能太小,否則會(huì)導(dǎo)致重復(fù)壓縮,比如說(shuō)ATATATA,在2kmers的情況下,就只有AT了
  • 測(cè)序深度越高,K值也就可以選擇的越大

但是說(shuō)了那么多,你依舊不知道應(yīng)該選擇什么樣的K,如果你的計(jì)算資源無(wú)限,那么窮舉法最簡(jiǎn)單粗暴。如果窮舉法不行,那么建議先用k=21, 55,77 組裝一下contig, 對(duì)不同參數(shù)的contig N50有一個(gè)大致的了解,然后繼續(xù)調(diào)整。此外還有一個(gè)工具叫做KmerGenie可以預(yù)測(cè)一個(gè)初始值。總之,讓我們先運(yùn)行第一個(gè)工具--SPAdes,可通過(guò)bioconda安裝。

SPAdes全稱是圣彼得堡基因組組裝工具,包含了一系列組裝工具處理不同的項(xiàng)目,如高雜合度的dipSPAdes,宏基因組的metaSPAdes。官方文檔中以大腸桿菌為例運(yùn)行整個(gè)流程,花了將近1個(gè)小時(shí)。我們的數(shù)據(jù)集比較小,速度會(huì)更快

# 項(xiàng)目根文件夾下
mkdir assembly/spades
spades.py --pe1-1 raw-data/lib1/frag_1.fastq.gz --pe1-2 raw-data/lib1/frag_2.fastq.gz --mp1-1 raw-data/lib2/shortjump_1.fastq.gz --mp1-2 raw-data/lib2/shortjump_2.fastq.gz -o assembly/spades/

你會(huì)發(fā)現(xiàn)之前說(shuō)的k-mers在這里根本沒(méi)出現(xiàn),而且用的也是原始數(shù)據(jù),這是因?yàn)?code>spades.py有一個(gè)組件BayesHammer處理測(cè)序錯(cuò)誤,并且它是多K類組裝工具(multi-k assembly), 也就是說(shuō)它會(huì)自動(dòng)選擇不同的K運(yùn)行,從而挑選比較合適的k值,當(dāng)然你還可以自己設(shè)置,比如說(shuō)-k 21,55,77。最后結(jié)果為糾正后的短讀數(shù)據(jù),組裝后的contig, 組裝后的scaffold, 不同格式的組裝graph。

同樣運(yùn)行多k-mers運(yùn)行后比較的工具還有IDBA,它也有一系列的工具。IDBA是基礎(chǔ)版,IDBA-UD適用于宏基因組和單細(xì)胞測(cè)序的數(shù)據(jù)組裝,IDBA-Hybrid則是基于相似的基因組提高組裝結(jié)果,IDBA-Tran是專門處理轉(zhuǎn)錄組數(shù)據(jù)。對(duì)于無(wú)參考基因組組裝,作者推薦使用IDBA-UD。

IDBA-UD工具要求將兩個(gè)配對(duì)的短讀文件合并成一個(gè),我們的原始數(shù)據(jù)需要先用它提供的fq2fa先轉(zhuǎn)換格式

# 項(xiàng)目文件夾下
mkdir -p assembly/idba_ud
~/opt/biosoft/idba/bin/fq2fa --merge <(zcat clean-data/lib1/corrected_1.fq.gz) <(zcat clean-data/lib1/corrected_2.fq.gz) assembly/idba_ud/lib1.fa
~/opt/biosoft/idba/bin/fq2fa --merge <(zcat clean-data/lib2/corrected_1.fq.gz) <(zcat clean-data/lib2/corrected_2.fq.gz) assembly/idba_ud/lib2.fa

idba_ud和k-mers相關(guān)參數(shù)為--mink,--maxk,--step, 通過(guò)--read_level_x 傳入不同大小的文庫(kù),也提供了短讀糾正的相關(guān)參數(shù)--no_correct,--pre_correction

~/opt/biosoft/idba/bin/idba_ud -r assembly/idba_ud/lib1.fa --read_level_2 assembly/idba_ud/lib2.fa -o assembly/idba_ud/ --mink 19 --step 10

運(yùn)行結(jié)束后在assembly/idba_ud下會(huì)生成一系列的文件,其中結(jié)果文件為contig.fascaffold.fa

最后介紹一個(gè)要手動(dòng)運(yùn)行不同k-mers的工具,如ABySS, 它有一個(gè)亮點(diǎn),就是能夠可以使用多個(gè)計(jì)算節(jié)點(diǎn)。我們使用k=31進(jìn)行組裝

mkdir -p assembly/abyss
# 增加 /1,/2
sed 's/^@SRR.*/&\/1/' <(zcat raw-data/lib2/shortjump_1.fastq.gz) | gzip > raw-data/lib2/s1.fq.gz
sed 's/^@SRR.*/&\/2/' <(zcat raw-data/lib2/shortjump_2.fastq.gz) | gzip > raw-data/lib2/s2.fq.gz
~/opt/biosoft/abyss-2.0.2/bin/abyss-pe -C assembly/abyss k=31 n=5 name=asm lib='frag short' frag='../../raw-data/lib1/frag_1.fastq.gz ../../raw-data/lib1/frag_2.fastq.gz' short='../../raw-data/lib2/s1.fq.gz ../../raw-data/lib2/s2.fq.gz' aligner=bowtie

注意,首先ABYSS要求雙端測(cè)序的reads命名要以/1和/2結(jié)尾,其次第二個(gè)文庫(kù)才37bp, 所以比對(duì)軟件要選擇bowtie,否則你運(yùn)行一定會(huì)遇到histogram xxx.hist is empty的報(bào)錯(cuò)。當(dāng)然到最后,這個(gè)問(wèn)題我都沒(méi)有解決掉,所以我放棄了。

雖然看起來(lái)abyss用起來(lái)很簡(jiǎn)單,但其實(shí)背后的工作流程還是比較復(fù)雜,如下是它的流程示意圖

flowchart

小結(jié)一下,這里用到了spades, idba,abyss三種工具對(duì)同一種物種進(jìn)行組裝,得到對(duì)應(yīng)的contig結(jié)果,重點(diǎn)在于k-mers的選擇。contig是組裝的第一步,也是非常重要的一步,為了保證后續(xù)搭scaffold和基因組補(bǔ)洞等工作的順利,我們先得挑選一個(gè)比較高質(zhì)量的contig。

組裝可視化和評(píng)估

理想條件下,我們希望一個(gè)物種有多少染色體,結(jié)果最好就只有多少個(gè)contig。當(dāng)然對(duì)于二代測(cè)序而言,這絕對(duì)屬于妄想,可以通過(guò)一款graph可視化工具bandage來(lái)感受一下最初得到的contig graph是多么復(fù)雜。

Bandage

一般看這圖直觀感受就是怎么那么多節(jié),這些節(jié)就是造成contig不連續(xù)的元兇。不同組裝工具在構(gòu)建de bruijn graph的差異不會(huì)那么大,contig的數(shù)量和大小和不同工具如何處理復(fù)雜節(jié)點(diǎn)有關(guān)。我們希望得到的contig文件中,每個(gè)contig都能足夠的長(zhǎng),能夠有一個(gè)完整的基因結(jié)構(gòu),歸納一下就是3C原則:

  • 連續(xù)性(Contiguity): 得到的contig要足夠的長(zhǎng)
  • 正確性(Correctness): 組裝的contig錯(cuò)誤率要低
  • 完整性(Completeness):盡可能包含整個(gè)原始序列

但是這三條原則其實(shí)是相互矛盾的,連續(xù)性越高,就意味著要處理更多的模糊節(jié)點(diǎn),會(huì)導(dǎo)致整體錯(cuò)誤率上升,為了保證完全的正確,那么就會(huì)導(dǎo)致contig非常的零碎。此外,這三條原則也比較定性,我們需要更加定量的數(shù)值衡量,比如說(shuō)contig數(shù), 組裝的總長(zhǎng)度等, N50等。問(wèn)題來(lái)了,什么叫做N50呢,

N50定義比較繞口,有一種只可意會(huì)不可言傳的感覺(jué),所以索性看圖

N50和NG50

假設(shè)一個(gè)基因組的大小為10,但是這個(gè)值只有神知道,你得到的信息就是組裝后有3個(gè)contig,長(zhǎng)度分別為"3,4,1,1",所以組裝總長(zhǎng)度為9。為了計(jì)算N50,我們需要先把contig從大到小排列,也就是"4,3,1"。然后先看最大的contig,長(zhǎng)度是4,他的長(zhǎng)度是不是超過(guò)組裝總大小的一半了嗎?如果是,那么N50=4, 4 < 4.5, 不是。 那么在此基礎(chǔ)上加上第二長(zhǎng)的contig,也就是4+3=7, 是不是超過(guò)一半了?7>4.5, 那么N50=3. 因此,N50的定義可以表述為"使得累加后長(zhǎng)度超過(guò)組裝總長(zhǎng)度一半的contig的長(zhǎng)度就是N50"。為了方便管理和使用軟件,建議建立如下幾個(gè)文件夾

N50是基于一個(gè)未知的基因組得到得結(jié)果,如果基因組測(cè)序比較完整,那么就可以計(jì)算NG50,也就是"使得累加后長(zhǎng)度超過(guò)基因組總長(zhǎng)度一半的contig的長(zhǎng)度就是NG50"。NA50比較稍微復(fù)雜,需要將組裝結(jié)果進(jìn)一步比對(duì)到參考基因組上,以contig實(shí)際和基因組匹配的長(zhǎng)度進(jìn)行排序計(jì)算。

說(shuō)完N50,我們介紹兩款工具,QUAST和BUSCO。

QUAST使用質(zhì)量標(biāo)準(zhǔn)(quality metrics)來(lái)評(píng)估不同組裝工具和不同參數(shù)的組裝效果,無(wú)論是否有基因組都可以使用。我們分別以有參和無(wú)參兩種模式比較Minia,IDBASPAdes三個(gè)組裝的運(yùn)行結(jié)果

# without reference
quast.py -o compare idba_ud/contig.fa minia/minia.contigs.fa spades/contigs.fasta
# with reference
quast.py -R ../genome/Saureus.fna -o compare idba_ud/contig.fa minia/minia.contigs.fa spades/contigs.fasta
quast運(yùn)行結(jié)果

這個(gè)結(jié)果非常直觀的告訴我們一個(gè)事實(shí)就是spades組裝的contigs`各方面表現(xiàn)都很優(yōu)秀,minia由于內(nèi)存使用率最低,所以組裝效果一般也是可以理解。

BUSCO通過(guò)同源基因數(shù)據(jù)庫(kù)從基因完整度來(lái)評(píng)價(jià)基因組組裝結(jié)果。BUSCO首先構(gòu)建了不同物種的最小基因集,然后使用HMMER,BLAST,Augustus等工具分析組裝結(jié)果中的同源基因,從而定量評(píng)估組裝是否完整。

busco -i assembly/spades/contigs.fasta -o result -l /home/wangjw/db/busco/bacteria_odb9 -m genome -f

運(yùn)行結(jié)果會(huì)在當(dāng)前目錄下的run_result生成一些列文件,其中的short_summary_result.txt內(nèi)容如下

# Summarized benchmarking in BUSCO notation for file assembly/spades/contigs.fasta
# BUSCO was run in mode: genome

    C:98.6%[S:98.6%,D:0.0%],F:0.0%,M:1.4%,n:148

    146 Complete BUSCOs (C)
    146 Complete and single-copy BUSCOs (S)
    0   Complete and duplicated BUSCOs (D)
    0   Fragmented BUSCOs (F)
    2   Missing BUSCOs (M)

C值表示和BUSCO集相比的完整度,M值表示可能缺少的基因數(shù),D則是重復(fù)數(shù)。正所謂沒(méi)有比較,就沒(méi)有傷害,我們拿之前QUAST對(duì)比中表現(xiàn)比較差的minia結(jié)果作為對(duì)比。

    C:85.1%[S:85.1%,D:0.0%],F:2.7%,M:12.2%,n:148

    126 Complete BUSCOs (C)
    126 Complete and single-copy BUSCOs (S)
    0   Complete and duplicated BUSCOs (D)
    4   Fragmented BUSCOs (F)
    18  Missing BUSCOs (M)

98% vs 85%, 一下子對(duì)比就出來(lái)了。綜上,從兩個(gè)維度上證明的SPAdes不但組裝效果好,而且基因完整度也高,當(dāng)然它的內(nèi)存消耗也是很嚴(yán)重。這都是取舍的過(guò)程。

附錄

參考資料

軟件安裝

由于不同軟件對(duì)不同的基因組的適合度不同,一般都需要參數(shù)多個(gè)工具的不同參數(shù),根據(jù)N50和BUSCO等衡量標(biāo)準(zhǔn)選擇比較好的結(jié)果。為了避免后續(xù)花篇幅在工具安裝上,因此先準(zhǔn)備后續(xù)的分析環(huán)境。對(duì)于組裝而言,我們需要安裝如下工具:

  • 質(zhì)量控制:
    • FastQC
    • fastp
    • BFC
  • 主流組裝工具:
    • ABySS
    • IDBA
    • SOAPdenovo2
    • Velvet
    • Sapdes
    • Minia
    • Ray
    • MasuRCA
  • 基因組組裝評(píng)價(jià)工具
    • BUSCO
    • Quast
  • 基因結(jié)構(gòu)預(yù)測(cè)和功能注釋暫時(shí)不在考慮范圍內(nèi)

更多相關(guān)工具見(jiàn)https://biosphere.france-bioinformatique.fr/wikia2/index.php/Tools_directory_in_Assembly_and_Annotation_(Lexicographic_ordering)

以下操作所用服務(wù)器的基本信息為:Linux的內(nèi)核為3.10.0-693.el7.x86_64, GCC版本為4.8.5。為了方便管理和使用軟件,建議建立如下幾個(gè)文件夾, 分門別類的存放不同工具及其源碼。

# 普通用戶
mkdir -p ~/opt/{sysoft,biosoft}
mkdir -p ~/src
# 管理員
sudo mkdir -p /opt/{sysoft,biosoft}
sudo mkdir -p /src
sudo chmod 1777 /opt/biosoft /opt/sysoft /src

系統(tǒng)自帶的GCC版本是4.8,而B(niǎo)LESS2要求4.9+, ABySS要求6.0+,直接編譯這些工具可能會(huì)出錯(cuò),但直接升級(jí)系統(tǒng)的GCC版本可能會(huì)影響整體穩(wěn)定性,因此推薦將在opt/sysoft下安裝高版本的GCC。當(dāng)然GCC的版本也不是越高越好,最好和作者開(kāi)發(fā)的版本一致,也就是他們要求的最低版本。

# gcc,mpfr,gmp,mpc,isl
cd ~/src
wget -4 https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz
tar xf gcc-6.4.0.tar.xz
cd gcc-6.4.0
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=$HOME/opt/sysoft/gcc-6.4.0 --enable-threads=posix --disable-multilib --with-system-zlib
make -j 8 && make install

根據(jù)我之前關(guān)于GCC編譯的文章,程序編譯不成功大多是因?yàn)檎也坏?strong>頭文件(存放在include目錄下)和鏈接庫(kù)文件(存放在lib目錄下),默認(rèn)編譯頭文件只會(huì)搜索/usr/include,/usr/local/include, 而鏈接庫(kù)文件只會(huì)搜索/lib,/usr/lib[64],/usr/local/lib[64]. 為了讓編譯完成的GCC的頭文件和鏈接庫(kù)文件能被搜索到,需要在~/.bashrc文件中添加幾個(gè)環(huán)境變量:

  • PKG_CONFIG_PATH: 同時(shí)添加搜索頭文件和鏈接頭文件的路徑
  • C_INCLUDE_PATH: 編譯時(shí)搜索頭文件的路徑
  • LIBRARY_PATH: 編譯時(shí)搜索鏈接文件的路徑
  • LD_LIBRARY_PATH: 運(yùn)行時(shí)搜索鏈接文件的路徑

即添加如下幾行內(nèi)容到~/.bashrc文件中,并執(zhí)行source ~/.bashrc更新環(huán)境變量。

export PKG_CONFIG_PATH=~/opt/sysoft/gcc-6.4.0/lib64/pkgconfig:$PKG_CONFIG_PATH
export C_INCLUDE_PATH=~/opt/sysoft/gcc-6.4.0/include:$C_INCLUDE_PATH
export LIBRARY_PATH=~/opt/sysoft/gcc-6.4.0/lib64:$LIBRARY_PATH
export LD_LIBRARY_PATH=~/opt/sysoft/gcc-6.4.0/lib64:$LD_LIBRARY_PATH
export PATH=~/opt/sysoft/gcc-6.4.0/bin:$PATH

genome survey工具: 功能都類似,GCE安裝最方便勝出

cd ~/src
wget ftp://ftp.genomics.org.cn/pub/gce/gce-1.0.0.tar.gz
tar xf gce-1.0.0.tar.gz  -C ~/opt/biosoft

組裝軟件種類很多,對(duì)于小基因組(<100Mb)而言SPAdes是很好的選擇, 但是對(duì)于大基因組就得多試試幾個(gè),比如說(shuō)MaSuRCA, Discover de novo, Abyss,SOAPdenovo2, IDBA。內(nèi)存不太夠的話可以嘗試Minia。

組裝軟件一:ABySS的安裝依賴boost1.62, OpenMPI, Google/sparsehash, SQLite,且GCC支持OpenMP,因此也就是一個(gè)個(gè)下載,一個(gè)個(gè)安裝的過(guò)程。

# boost1.62
cd ~/src
wget -4 https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.bz2
tar xf boost_1_62_0.tar.bz2
cd boost_1_62_0
./bootstrap.sh --prefix=$HOME/opt/sysoft/boost-1.62
./b2
# 引入頭文件的路徑為~/src/boost_1_62_0, 引入鏈接庫(kù)的路徑為~/src/boost_1_62_0/stage/lib
# openmpi
wget https://www.open-mpi.org/software/ompi/v3.0/downloads/openmpi-3.0.0.tar.gz
tar xf openmpi-3.0.0.tar.gz
cd openmpi-3.0.0
./configure --prefix=$HOME/opt/sysoft/openmpi-3.0.0
make -j 8 && make install
# 在.bashrc中添加環(huán)境變量或手動(dòng)修改也行
echo 'export PKG_CONFIG_PATH=~/opt/sysoft/openmpi-3.0.0/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
echo 'export PATH=~/opt/sysoft/openmpi-3.0.0/bin:$PATH' >> ~/.bashrc
# sparsehash
cd ~/src
git clone https://github.com/sparsehash/sparsehash.git
cd sparsehash
./configure --prefix=$HOME/opt/sysoft/sparsehash
make && make install
# sqlite
cd ~/src
wget -4 http://www.sqlite.org/2018/sqlite-tools-linux-x86-3220000.zip
unzip sqlite-tools-linux-x86-3220000.zip
mv sqlite-tools-linux-x86-3220000 ~/opt/sysoft/sqlite3

最后在安裝ABySS時(shí)要以--with-PACKAGE[=ARG]形式指定依賴軟件的路徑

cd ~/src
wget -4 http://www.bcgsc.ca/platform/bioinfo/software/abyss/releases/2.0.2/abyss-2.0.2.tar.gz
tar xf abyss-2.0.2.tar.gz
cd abyss-2.0.2
./configure --prefix=$HOME/opt/biosoft/abyss-2.0.2--with-boost=$HOME/src/boost_1_62_0 --with-sparsehash=$HOME/opt/sysoft/sparsehash --with-sqlite=$HOME/opt/sysoft/sqlite3
make && make install

組裝軟件二:SOAPdenovo2,華大出品,目前使用率最高的工具

cd ~/src
git clone https://github.com/aquaskyline/SOAPdenovo2.git
cd SOAPdenovo2
mkdir -p ~/opt/biosoft/SOAPdenovo2
mv SOAPdenovo-* ~/opt/biosoft/SOAPdenovo2/

組裝軟件三: IDBA. de Brujin圖依賴于K-mers的k的選擇,IDBA能夠自動(dòng)化遞歸使用不同的k進(jìn)行組裝,從而確定最優(yōu)的K。

cd ~/src
git clone https://github.com/loneknightpy/idba.git
idba/build.sh
mv idba ~/opt/biosoft/

組裝軟件四:MaSuRCA,能夠純用二代,也能二代三代測(cè)序混合使用,先用 de bruijn 圖構(gòu)建長(zhǎng)reads,然后再用OLC算法進(jìn)行組裝

cd src
wget ftp://ftp.genome.umd.edu/pub/MaSuRCA/latest/MaSuRCA-3.2.4.tar.gz
tar xf MaSuRCA-3.2.4.tar.gz
cd MaSuRCA-3.2.4
export DEST=$HOME/opt/biosoft/MasuRCA
./install.sh

質(zhì)控軟件一: 原本是要推薦BLESS2,但是這個(gè)軟件在編譯完成后出現(xiàn)各種核心轉(zhuǎn)移的毛病,和我的系統(tǒng)相性太差,于是改用Li Heng的BFC

cd ~/src
git clone https://github.com/lh3/bfc.git
cd bfc
make
mkdir -p ~/opt/biosoft/bfc
mv bcf hash2cnt ~/opt/biosoft/bfc

質(zhì)控軟件二: fastp是一款基于C/C++編寫(xiě)的工具,速度會(huì)比較塊,而且運(yùn)行之后會(huì)有比較好看的圖哦

mkdir -p ~/opt/biosoft/fastp
cd ~/opt/biosoft/fastp
wget http://opengene.org/fastp/fastp
chmod a+x ./fastp

評(píng)估工具一:Quast, 它通過(guò)比較N50,N G50等參數(shù)來(lái)評(píng)價(jià)基因組組裝質(zhì)量.Quast由Python編寫(xiě),推薦使用bioconda安裝

conda create --name assembly python=2.7
source activate assembly
conda install quast

評(píng)估工具二: BUSCO,這是一個(gè)利用進(jìn)化信息從基因完整性角度評(píng)估組裝準(zhǔn)確性的工具,推薦使用biconda安裝。

source activate assembly
conda install busco

盡管conda安裝了busco,但是離實(shí)際運(yùn)行還需要添加幾個(gè)環(huán)境變量和不同物種的基因數(shù)據(jù)集,請(qǐng)使用printenv確保如下如下幾個(gè)路徑都已經(jīng)添加到環(huán)境變量中。

export PATH="/path/to/AUGUSTUS/augustus-3.2.3/bin:$PATH"
export PATH="/path/to/AUGUSTUS/augustus-3.2.3/scripts:$PATH"
export AUGUSTUS_CONFIG_PATH="/path/to/AUGUSTUS/augustus-3.2.3/config/"

之后,根照自己研究的物種在http://busco.ezlab.org/選擇進(jìn)化上接近的評(píng)估數(shù)據(jù)集,比如說(shuō)你如果研究魚(yú),那么"actinopterygii(輻鰭魚(yú)類)"就比"metazoa(多細(xì)胞動(dòng)物)"更加合適.

實(shí)際運(yùn)行時(shí)可能還存在鏈接庫(kù)無(wú)法找尋以至于程序出錯(cuò),解決方法就是將相對(duì)應(yīng)或著接近的庫(kù)拷貝或軟鏈接到~/miniconda3/env/assembly/lib下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,179評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,628評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,642評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,444評(píng)論 6 405
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,948評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,185評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,717評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,602評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,794評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,045評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,418評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,671評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,414評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,750評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容