家和建材廣場:聯系電話-0373-7621288
位置:河南省新鄉市延津縣人民路與西環路交叉口向東100米路北。
有家和幸福生活!
GATK4.0全基因組和全外顯子組分析實戰
文章來源:企鵝號 - 生信知識
前言
GATK是目前業內最權威、使用最廣的基因數據變異檢測工具。相比samtools + bcftools call SNP/Indel,GATK更加精確,當然代價是流程復雜且耗時長。目前已經更新到GATK4,GATK3在官網已沒有下載通道但其使用仍然很廣泛。GATK4在核心算法層面并沒太多的修改,但參數設置還是有些改變的,并且取消了RealignerTargetCreator、IndelRealigner,應該是HaplotypeCaller繼承了這部分功能。GATK4使用了新的設計模式,做了很多功能的整合,已經把picard完全整合。本文使用的是GATK4.0.2.0,參考了其他人編寫的GATK3x和GATK4x教程,對全基因組和全外顯子組的每個步驟都進行了講解并放上腳本,但讀者還是要略作修改才能本地運行成功,所以具有基本的生信知識和編程、Linux技能才能更好的學習這篇教程,下面開始正文。
軟件
需要fastqc、fastp、BWA、samtools、GATK、annovar(需要學術郵箱才能注冊下載)
數據質控
這部分不贅述,公司交給你的數據肯定質量很高,否則不會交付給你,但是為了放心還是要檢查下的。先用fastqc
wget http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.7.zip
unzip fastqc_v0.11.7.zip
cd FastQC
chmod755 fastqc
使用:
fastqc wes_1.fq.gz -o fastqc_out_dir/? &&? fastqcwes_2.fq.gz -o fastqc_out_dir/
數據過濾使用fastp
安裝:wget http://opengene.org/fastp/fastp
chmod 755 fastp
使用:./fastp -i in.R1.fq.gz -o out.R1.fq.gz -I in.R2.fq.gz -O out.R2.fq.gz
比對
第一步下載參考基因組
for i in $(seq 1 22) X Y M;
do
wget? http://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes/chr$.fa.gz &
Done
下載完成后解壓合并
gunzip *.gz
for i in $(seq 1 22) X Y M;
do cat chr$.fa >> hg19.fa;
Done
構建索引
bwa index -a bwtsw -p hg19 hg19.fa? &
程序運行時間較長,建議使用nohup 或者 screen
最終生成文件? hg19.amb? hg19.ann? hg19.bwt? hg19.pac hg19.sa
bwa比對
-t,線程數;
-M , -M 將 shorter split hits 標記為次優,以兼容 Picard’s markDuplicates 軟件;
-R 接的是 Read Group的字符串信息,它是用來將比對的read進行分組的,這個信息對于我們后續對比對數據進行錯誤率分析和Mark duplicate時非常重要。不設置-R參數不會報錯,但使用GATK時是會報錯的。
(1)ID,這是Read Group的分組ID,一般設置為測序的lane ID
(2) PL,指的是所用的測序平臺
(3) SM,樣本ID
(4) LB,測序文庫的名字
這些信息設置好之后,在RG字符串中要用制表符(\t)將它們分開。
上一步生成的SAM文件是文本文件,一般整個文件都非常巨大,因此,為了有效節省磁盤空間,一般都會用samtools將它轉化為BAM文件(SAM的特殊二進制格式),而且BAM會更加方便于后續的分析。
samtools? view -b -S abc.sam > abc.bam ##由sam生成bam
samtools view -h abc.bam>abc.sam##由bam生成sam,-h代表是否帶上header
想看bam文件使用命令samtools view -h abc.bam | less
bam文件是一個重要的文件,每一列的意義都需要理解。
前五列分別為:reads名flag染色體位置比對質量。第十列時read序列,11列是堿基質量值。第1,10,11列可以提取出來還原成我們的測序數據fastq格式。有人說第五列比對質量值為0時代表該read可以比對到基因組多個位置,說法是否正確我不確定。
第二列的flag包含很多信息,flag解釋網站 http://broadinstitute.github.io/picard/explain-flags.html ,打開此網站
輸入flag值便可以看到包含的信息,其中read unmapped是4,mate unmapped是8,如果雙端reads都不能map到參考基因組上,flag值就包括4和8,和為12。可以用命令samtools view –f 12 wes.bam > unmapped.sam 提取雙端reads都沒有比對成功的reads,samtools view –F 12 wes.bam > mapped.sam 代表過濾雙端都比對不上的reads。
sort 排序
BWA比對后輸出的bam文件是沒順序的,比對后得到的結果文件中,每一條記錄之間位置的先后順序是亂的,我們后續去重復等步驟都需要在比對記錄按照順序從小到大排序下來才能進行。
做類似分析的時候在文件名字將所做的關鍵操作包含進去,因為這樣即使過了很長時間,當你再去看這個文件的時候也能夠立刻知道當時對它做了什么。
bam信息統計
做到這一步需要對序列比對情況進行統計,如果比對情況很差需要查找原因。
覆蓋度,深度等信息統計
覆蓋度和深度是我們關心的重要參數,如果是全外顯子組可以用picard(已經整合到GATK4中)進行統計。
生成參考基因組的dict文件
$GATK CreateSequenceDictionary -R hg19.fa -O hg19.dict
生成interval
外顯子組是用試劑盒捕獲再進行測序,不同試劑盒捕獲的區域不同,要下載相應的包含捕獲區域bed文件,本文用的是安捷倫的捕獲區域的bed文件。
覆蓋度,深度等信息統計
On targeted bases相對總bases的比例(PCT_USABLE_BASES_ON_BAIT)
On and near targeted bases相對總bases的比例(PCT_SELECTED_BASES)
MEAN_TARGET_COVERAGE平均覆蓋度
如果是全基因組wgs,運行以下命令,
生成的wgs.metrics包含多種信息,可自行查閱研究。
去除由于PCR擴增引起的重復reads
在NGS測序之前都需要先構建測序文庫:通過物理(超聲)打斷或者化學試劑(酶切)切斷原始的DNA序列,然后選擇特定長度范圍的序列去進行PCR擴增并上機測序。這個過程中產生的重復reads,增大了變異檢測結果的假陰率和假陽率!!原因如下:
1.PCR反應過程中也會帶來新的堿基錯誤。發生在前幾輪的PCR擴增發生的錯誤會在后續的PCR過程中擴大,同樣帶來假的變異;
2. PCR反應可能會對包含某一個堿基的DNA模版擴增更加劇烈(這個現象稱為PCR Bias)
3.如果某個變異位點的變異堿基都是來自于PCR重復,而我們卻認為它深度足夠判斷是真的變異位點,這個結論其實有很大可能是假陽性。
利用picard標記重復序列
查看被標記重復的reads
samtools view –f 1024wes.sorted.MarkDuplicates.bam| less
為何是1024去查閱flag解釋網站。
下一步為wes.sorted.MarkDuplicates.bam創建索引文件,它的作用能夠讓我們可以隨機訪問這個文件中的任意位置,而且后面的步驟也要求這個BAM文件一定要有索引.
samtools index wes.sorted.MarkDuplicates.bam
變異檢測
開始檢測變異前還是要做一些準備工作,首先是重新校正堿基質量值(BQSR)。
變異檢測是一個極度依賴測序堿基質量值,因為這個質量值是衡量我們測序出來的這個堿基到底有多正確的重要指標。它來自于測序圖像數據的base calling,因此,基本上是由測序儀和測序系統來決定的,計算出來的堿基質量值要么高于真實結果,要么低于真實結果。
BQSR(Base Quality Score Recalibration)這個步驟就是為此而存在的,這一步非常重要。它主要是通過機器學習的方法構建測序堿基的錯誤率模型,然后對這些堿基的質量值進行相應的調整。
這里包含了兩個步驟:
第一步,BaseRecalibrator,這里計算出了所有需要進行重校正的read和特征值,然后把這些信息輸出為一份校準表文件(wes.recal_data.table)
第二步,ApplyBQSR,這一步利用第一步得到的校準表文件(wes.recal_data.table)重新調整原來BAM文件中的堿基質量值,并使用這個新的質量值重新輸出一份新的BAM文件。
-R $GENOME -I wes.sorted.MarkDuplicates.bam \
--known-sites $hg19_VCF/dbsnp_138.hg19.vcf \
-O wes.recal_data.table
(注意:此步驟以及后面幾個步驟中外顯子數據要加上外顯子捕獲區域的bed文件,并把-ip設為reads長,全基因組數據則不需要加-L 和 -ip)
$GATK --java-options "-Xmx8G -Djava.io.tmpdir=./" ApplyBQSR \
-R $GENOME -I wes.sorted.MarkDuplicates.bam \
-bqsr wes.recal_data.table \
-O wes.sorted.MarkDuplicates.BQSR.bam
變異檢測前確定bam文件是否符合GATK要求,運行
$GATK? ValidateSamFile -I wes.sorted.MarkDuplicates.BQSR.bam,如果顯示 no error,則可以用HaplotypeCaller call SNP/Indel。
利用samtools為hg19.fa創建一個索引 samtools faidx hg19.fa
利用這個索引可以查看參考基因組任何位置,如運行
利用HaplotypeCaller檢測突變還需利用許多數據庫,這些數據庫包含以前研究過的突變位點,利用這些位點提高變異檢測的準確率。
運行上面命令下載所需數據庫。注意下載文件均為壓縮文件,需要解壓才能使用。
下面開始HaplotypeCaller突變檢測,
HaplotypeCaller的應用有兩種做法,區別在于是否生成中間文件gVCF:
(1)直接進行HaplotypeCaller,這適合于單樣本,只執行一次HaplotypeCaller。如果多樣本,你每增加一個樣本數據都需要重新運行這個HaplotypeCaller,而這個時候算法需要重新去讀取所有人的BAM文件,浪費大量時間;
(2)每個樣本先各自生成gVCF,然后再進行群體joint-genotype。gVCF全稱是genome VCF,是每個樣本用于變異檢測的中間文件,格式類似于VCF,它把joint-genotype過程中所需的所有信息都記錄在這里面,文件無論是大小還是數據量都遠遠小于原來的BAM文件。這樣一旦新增加樣本也不需要再重新去讀取所有人的BAM文件了,只需為新樣本生成一份gVCF,然后重新執行這個joint-genotype就行了。
第一種方法
-R $GENOME? -I wes.sorted.MarkDuplicates.BQSR.bam \
第二種方法
#1 生成中間文件gvcf
-R $GENOME --emit-ref-confidence GVCF \
-I wes.sorted.MarkDuplicates.BQSR.bam -D $hg19_VCF/dbsnp_138.hg19.vcf -L S31285117_Regions.bed -ip 90 -O wes.gvcf
#2 通過gvcf檢測變異
若有多個樣本的gvcf文件,運行$GATK CombineGVCFs? -V 1.gvcf –V 2.gvcf ……? -O final.gvcf ,再用final.gvcf運行下一步
變異質控和過濾
質控的含義和目的是指通過一定的標準,最大可能地剔除假陽性的結果,并盡可能地保留最多的正確數據。
第一種方法 GATK VQSR,它通過機器學習的方法利用多個不同的數據特征訓練一個模型(高斯混合模型)對變異數據進行質控,使用VQSR需要具備以下兩個條件:
第一,需要一個精心準備的已知變異集,它將作為訓練質控模型的真集。比如,Hapmap、OMNI,1000G和dbsnp等這些國際性項目的數據,這些可以作為高質量的已知變異集。
第二,要求新檢測的結果中有足夠多的變異,不然VQSR在進行模型訓練的時候會因為可用的變異位點數目不足而無法進行。適合全基因組分析。
第二種方法通過過濾指標過濾。
QualByDepth(QD)
FisherStrand (FS)
StrandOddsRatio (SOR)
RMSMappingQuality (MQ)
MappingQualityRankSumTest (MQRankSum)
ReadPosRankSumTest (ReadPosRankSum)
GATK VQSR
-resource hapmap,known=false,training=true,truth=true,prior=15.0:$hg19_VCF/hapmap_3.3.hg19.sites.vcf \
-resource omini,known=false,training=true,truth=false,prior=12.0:$hg19_VCF/1000G_omni2.5.hg19.sites.vcf \
-resource dbsnp,known=true,training=false,truth=false,prior=6.0:$hg19_VCF/dbsnp_138.hg19.vcf \
-an QD -an MQ -an MQRankSum -an ReadPosRankSum -an SOR -mode SNP \
$GATK ApplyVQSR -V wes.raw.vcf -O wes.snps.VQSR.vcf \
此方法要求新檢測的結果中有足夠多的變異,不然VQSR在進行模型訓練的時候會因為可用的變異位點數目不足而無法進行??赡芎芏喾侨说奈锓N在完成變異檢測之后沒法使用GATK VQSR的方法進行質控,一些小panel、外顯子測序,由于最后的變異位點不夠,也無法使用VQSR。全基因組分析或多個樣本的全外顯子組分析適合用此方法。
通過過濾指標過濾
# 使用SelectVariants,選出SNP
$GATK SelectVariants -select-type SNP -V wes.GATK.vcf -O wes.GATK.snp.vcf
# 為SNP作過濾
# 使用SelectVariants,選出Indel
$GATK SelectVariants -select-type INDEL -V wes.GATK.vcf -O wes.GATK.indel.vcf
# 為Indel作過濾
VCF文件
VCF文件是記錄突變信息的重要文件
前五列信息為
1. 染色體(Chromosome)
2. 起始位置(Start)
3. 結束位置(End)
4. 參考等位基因(Reference Allele)
5. 替代等位基因(Alternative Allele)
ANNOVAR注釋時主要也是利用前五列信息對數據庫進行比對,注釋變異。Info和Format信息同樣重要,比如DP代表測序深度,這些內容的含義再vcf文件的開頭都有介紹,請仔細閱讀并理解相應內容的意義。
突變注釋
vcf文件中保存的突變位點不能直接使用,只有根據已有數據庫進行注釋,才能知道該位點的有何功能,是否與疾病相關以及其它信息。annovar是突變注釋的常用軟件,ANNOVAR是一個perl編寫的命令行工具,能在安裝了perl解釋器的多種操作系統上執行。允許多種輸入文件格式,包括最常被使用的VCF格式。輸出文件也有多種格式,包括注釋過的VCF文件、用tab或者逗號分隔的txt文件。ANNOVAR能快速注釋遺傳變異并預測其功能,這個軟件需要edu郵箱注冊才能下載。
http://www.openbioinformatics.org/annovar/annovar_download_form.php
軟件下載后無需安裝直接使用,但要下載數據庫才能對突變位點進行注釋,annotate_variation.pl可以方便快捷下載數據庫。
perl annotate_variation.pl -buildver hg19 -downdb -webfrom annovar refGene humandb/
# -buildver 表示version
# -downdb 下載數據庫的指令
# -webfrom annovar 從annovar提供的鏡像下載,不加此參數將尋找數據庫本身的源
# humandb/ 存放于humandb/目錄下
其它數據庫下載
perl annotate_variation.pl--buildver hg19 --downdb gwascatalog humandb/ &
perl annotate_variation.pl--buildver hg19 --downdb ljb26_all --webfrom annovarhumandb/ &
perl annotate_variation.pl--buildver hg19 --downdb esp6500siv2_ea --webfromannovar humandb/ &
perl annotate_variation.pl--buildver hg19 --downdb esp6500siv2_all --webfromannovar humandb/ &
perl annotate_variation.pl--buildver hg19 --downdb 1000g2014oct humandb/ &
perl annotate_variation.pl--buildver hg19 --downdb cytoBand humandb/ &
perl annotate_variation.pl--buildver hg19 --downdb avsift -webfrom annovarhumandb/ &
perl annotate_variation.pl--buildver hg19 --downdb snp138 humandb/ &
perl annotate_variation.pl--buildver hg19 --downdb genomicSuperDups humandb/ &
perl annotate_variation.pl--buildver hg19 --downdbphastConsElements46wayhumandb/ &
perl annotate_variation.pl--buildver hg19 --downdb tfbs humandb/
annovar有三種注釋方式Gene-based Annotation(基于基因的注釋),Region-based Annotation(基于區域的注釋),Filter-based Annotation(基于過濾的注釋)??雌饋砗軓碗s實際做起來很簡單,用table_annovar.pl進行注釋,可一次性完成三種類型的注釋。
注釋的第一步是把要注釋的文件轉化成annovar需要的文件,
convert2annovar.pl #將多種格式轉為.avinput的程序
avinput文件由tab分割,最重要的地方為前5列,分別是:
1. 染色體(Chromosome)
2. 起始位置(Start)
3. 結束位置(End)
4. 參考等位基因(Reference Allele)
5. 替代等位基因(Alternative Allele)
annovar主要也是利用前五列信息對數據庫進行比對,注釋變異。
SNP注釋:
用table_annovar.pl進行注釋,可一次性完成三種類型的注釋。
table_annovar.pl snp.avinput $humandb -buildver hg19 -out snpanno -remove -protocol refGene,cytoBand,genomicSuperDups,esp6500siv2_all -operation g,r,r,f -nastring . –csvout
# -buildver hg19 表示使用hg19版本
# -out snpanno 表示輸出文件的前綴為snpanno
# -remove 表示刪除注釋過程中的臨時文件
# -protocol 表示注釋使用的數據庫,用逗號隔開,且要注意順序
# -operation 表示對應順序的數據庫的類型(g代表gene-based、r代表region-based、f代表filter-based),用逗號隔開,注意順序
# -nastring . 表示用點號替代缺省的值
# -csvout 表示最后輸出.csv文件
Indel注釋同上
最后生成的注釋文件如下
總結
本教程基本按照GATK4 Best PracticesGermline short variant discovery (SNPs + Indels),GATK3與GATK4的分析思路也幾乎沒有變化,除了GATK4取消了RealignerTargetCreator 和 IndelRealigner 這兩步,另外一些命令發生了變化。在外顯子分析步驟中記得加上外顯子捕獲區域的bed文件(-L參數),這樣可以防止檢測出捕獲區域以外的突變,還可以顯著提高運行速度