WGS分析筆記(4)—— Call SNVs/indels

??最近一直忙期末匯報和腳本編寫,沒來的及接著往下寫文章,年前把這一塊寫了,然后再往下的分析流程就比較特異性了,做一步寫一步那種,相對于這種已經常規化的流程(除了一些細節上的差異,別的都是大同小異的了),再往下的可能就不是很常規的分析手段了,不同的實驗室有不同的分析方法,希望能夠有大佬提點意見,多多交流。


“突變”區別

??對于WGS的數據,在處理完bam文件以后,就是call variations了,之后所有的工作其實都是針對variations進行分析,那么說到變異呢,其實中文的“變異”在英文里對應多個單詞,經常看到傻傻分不清,這里稍微區別一下。
??mutation:核苷酸序列的永久性改變(來源于ACMG),在人群中小于1%或5%(來源于北大生物信息學公開課)
??polymorphism:在人群中頻率超過1%(來源于ACMG),或超過5%(來源于北大生物信息學公開課)
??variation/variant:以上兩個的總和(來源于北大生物信息學公開課)

變異類型

??我們一般所說的variations主要有四大類:SNV,INDEL,SV,CNV。
????SNV即單核苷酸位點變異(single nucleotide variants)
????INDEL即小片段插入缺失(insertion and deletion)
????SV即結構變異(structural variation)
????CNV即拷貝數變異(copy number variation)

SNV與SNP

??說到SNV,可能大家也經常看到SNP(single nucleotide polymorphism),同樣是混淆使用,這倆其實還是有一些區別的,看到上面對變異的區分,其實也能看出這倆的區別來:
??一般SNP是二態的,SNV沒有這樣的限制,如果在一個物種中該單堿基變異的頻率達到一定水平(1%)就叫SNP,而頻率未知(比如僅僅在一個個體中發現)就叫SNV,SNV包含SNP。

變異簡述

??人基因組通常有4.1~5.0M的變異,但是99.9%都是由SNV和short indel造成。
??通常,一個人全基因組內會有約 3.6~4.4 M 個 SNVs,絕大數(大于 95%)的高頻(群體中等位基因頻率大于 5%)的 SNP 在 dbSNP中有記錄,高頻的SNP一般都不是致病的主要突變位點。
??通常,一個人全基因組內會有約 600K 的 Indel(<50bp的插入缺失為small indel)。
??編碼區或剪接位點處發生的插入缺失都可能會改變蛋白的翻譯。

SV

??結構變異指的是在基因組上一些大的結構性的變異,比如大片段丟失(deletion)、大片段插入(insertion)、大片段重復(duplication)、拷貝數變異(copy number variants)、倒位(inversion)、易位(translocation)。一般來說,結構變異涉及的序列長度在1kb到3Mb之間。結構變異普遍存在于人類基因組中,是個人差異和一些疾病易感性的來源。結構變異還可能導致融合基因的發生,一些癌癥已經證實和結構變異導致的基因融合事件有關。

CNV

??拷貝數變異指的是基因組上大片段序列拷貝數的增加或者減少,可分為缺失(deletion)和重復(duplication)兩種類型,是一種重要的分子機制。CNV能夠導致孟德爾遺傳病與罕見疾病, 同時與包括癌癥在內的復雜疾病相關,因此對于染色體水平的缺失、擴增的研究已經成為疾病研究熱點。

以上數據在不同的數據庫或文獻上可能有所差異,但相去不遠,具體的變異分類以及分布就不詳述,可參考一些文獻,下面說說怎么進行其中的SNV和indel的檢測。


??以下我將提供兩種分析方式的腳本(DeepVariant以及bcftools)和流程,為啥沒有GATK?因為我覺得黃老師的這篇GATK分析流程寫得已經很好了,大家可以參考一下。

Bcftools

??與舊版的samtools+bcftools不同,作者為了避免bcftools和samtools的版本不同導致的不兼容,新版的bcftools可以自己完成call snv/indel的工作。
??使用bcftools進行變異檢測,一般分為三部曲,分別為三個模塊mpileup、call、filter,當然,我們一般也不會分三步進行操作,而是使用管道(pipeline)進行編寫腳本,這樣能減少產生一些不必要的過程文件,同時提高自動化和效率,下面是我的實際使用腳本。

$ bcftools mpileup --threads 12 -q 20 -Q 20 -Ou -f /your/path/of/reference /your/bamfile/after/sorted.merged.markdup | bcftools call --threads 12 -vm -Ov | bcftools filter --threads 12 -s FILTER -g 10 -G 10 -i "%QUAL>20 && DP>6 && MQ>50 && (DP4[2]+DP4[3])>4" > raw.tmp.vcf
## bcftools mpileup檢測變異;
# --threads線程數
# -q表示reads比對質量選擇,MAPQ,默認0;
# -Q表示reads堿基對質量選擇,默認13
# -O表示輸出格式,u表示未壓縮bcf格式;
# -f參考序列位置
## bcftools call參數
# --threads線程;
# -v只輸出變異位點;
# m為克服-c調用模型中已知的局限性(與-c沖突)而設計的多等位和罕見變異調用的替代模型;
# -O輸出文件格式v未壓縮vcf;
## bcftools filter篩選變異;-i只保留后面條件的;-s對不符合的變異打上標簽
$ awk -F "\t" '{if($1~/#/){print}else if($7~/PASS/){print}}' raw.tmp.vcf > var.flt.vcf
# 將標為低質量的變異去掉

??有幾個點值得討論一下,首先是mpileup的-q參數,這個和之前提到的samtools view的-q是一樣的,前面的文章有大篇幅說過這個MAPQ的數值,20翻譯過來的意思其實就是比對正確率99%。
??filter中的-s是軟過濾的意思,就是把不符合后面條件的variations打上標簽,但不過濾掉;-g,-G這對參數是說,indel附近的indel或snp是不準確的,大多是假陽性,過濾掉,這里我設的10bp,這個值還是比較合理的;-i是保留后面符合條件的變異,剛好和-e相反,兩者選其一,我這里用的-i編寫過濾表達式
????QUAL:基于Phred格式的表示ALT的質量,也可以理解為可靠性;可以理解為所call出來的變異位點的質量值。Q=-10lgP,Q表示質量值;P表示這個位點發生錯誤的概率。因此,如果想把錯誤率從控制在90%以上,P的閾值就是1/10,那lg(1/10)=-1,Q=(-10)*(-1)=10。同理,當Q=20時,錯誤率就控制在了0.01。這個參數其實和mpileup的-Q是重復的。
????DP是堿基的覆蓋深度,一般很多公司和課題組會選擇10,但我這里選擇的是6,本著寬進嚴出的原則,保留更多的陽性variations,10也是沒有關系的。

????MQ不同于MAPQ,是RMS Mapping Quality,公式定義如下:q指的是比對到這個參考基因組堿基上的比對質量,即MAPQ。參考之前說的,MAPQ設置為20,假設每個堿基的MAPQ都是20,則MQ為20。
MQ

????參考上一篇里的MAPQ分布可以看到,使用bwa mem后,其實大多數的reads的MAPQ都在60,這樣的話,MQ最好也就是60,但是在40有一個小突起,對于MQ的篩選,大家的選擇可以酌情而定,50是一個大家使用較多的閾值點。
MAPQ分布圖

MAPQ累積分布曲線

????DP4分別是正反鏈上REF和ALT的深度,我用“DP4[2]+DP4[3]>4”篩選ALT的深度至少是5的variations。

??那么,以上的腳本其實是符合單個樣本進行分析的,但如果是家系樣本進行分析,其實是有問題的,因為在call這一步的時候用-v參數只輸出變異位點,在獲得了三個人的vcf文件進行merge的時候,對于一些變異(這些變異只存在于三個人的某一個或某兩個),你就不知道不存在的那個人身上,是因為無變異還是沒有覆蓋到reads。這不利于做trio分析。那么要克服這個問題只需要去掉-v參數即可。

??然后進行merge,是在完成了一個家系的call snp/indel以后。

$ bgzip -c -f -@ 12 var.flt.vcf > var.vcf.gz
# 進行文件壓縮;-c不改變內容; -f強制輸出,存在就覆蓋;-@線程數
$ bcftools index -t var.vcf.gz
# 建立索引,merge需要; -t建立tbi格式索引
$ bcftools merge -Ov --force-samples -l file.list -o merge.var.vcf 
# 進行合成,-O輸出文件格式,v表示vcf格式文件;
# --force-samples,對于重名樣本強制合成;-o輸出文件
# -l包含文件名的文件,一行一個文件名,將先證者放在第一位

??之后可以用bcftools對結果做一下統計處理

## 統計結果plot-vcfstats
$ bcftools stats -F/your/path/of/reference -s - merge.var.vcf >  merge.var.vcf.stats && \
$ plot-vcfstats merge.var.vcf.stats -p vars_output
# plot-vcfstats程序在bcftools下的misc目錄中

DeepVariant

??谷歌提供了分別適用于WGS和WES的腳本,可供大家參考。我親測了一下這個軟件,速度有點慢……完全沒有谷歌自己描述的那么快,做為嘗鮮吧,把當時的腳本放上來,這里要特別感謝師姐的指導!雖然最后我也沒打算用這個軟件完成我的課題吧。
????https://github.com/google/deepvariant/tree/r0.7/scripts
??Deepvariant無需安裝,直接拉docker下來就行,不然要是安裝,這個環境配置怕是要折磨死人的。

# docker安裝,僅針對ubuntu用戶
    $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    $ sudo apt-key fingerprint 0EBFCD88
    $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    $ sudo apt-get update
    $ sudo apt-get install docker-ce
    $ sudo docker run hello-world
    $ sudo usermod -aG docker $USER

??拉取一下docker就可以使用deepvariant了

$ sudo docker pull dajunluo/deepvariant
$ sudo docker images
$ sudo docker run -it dajunluo/deepvariant:latest
$ sudo docker run -it --name deepvariant -v /you/path/of/refrence/dir/:/home/ref_hg19 -v /home/biowork/:/home/biowork dajunluo/deepvariant
# -v是把我本地的數據對接到docker環境里,這個請自行根據需要對接
$ nohup python /home/bin/make_examples.zip --mode calling --ref /you/path/of/refrence --reads //you/path/of/bam --examples example.gz > 1.log &
$ nohup python /home/bin/call_variants.zip --outfile call_variants_output.gz --examples example.gz --checkpoint /home/models/model.ckpt > 2.log &
$ nohup python /home/bin/postprocess_variants.zip --ref /you/path/of/refrence --infile call_variants_output.gz  --outfile output.vcf.gz > 3.log &

??之后便可以用bcftools或者gatk進行merge,對于這一步可以參考上面的gatk鏈接或者bcftools步驟。


??到了這一步就可以完了么?顯然不是,你用上述兩個方法或者參考黃老師的腳本用gatk得到的結果,如果你仔細看,就會發現。


vcf示例

??這是什么鬼,這又是什么鬼,為什么有那么多的多等位位點,你要是去統計,會發現這樣的多等位位點還挺多的,所以你還不能直接過濾。對于這些變異我們一般是不會考慮嵌合的,因為平均30X的WGS是沒法檢測出嵌合體的。那么對于這樣的位點怎么去考慮分析呢?
??比較便捷的方法就是用bcftools里面的norm工具了。

$ bgzip -c -f -@ 12 merge.var.vcf > merge.var.vcf.gz
# 進行文件壓縮;-c不改變內容; -f強制輸出,存在就覆蓋;-@線程數
$ bcftools index -t merge.var.vcf.gz
# 建立索引, -t建立tbi格式索引
$ bcftools norm -Ov -m-any -f /you/path/of/refrence merge.var.vcf.gz > norm.vcf

??這樣,多等位位點就變成了二等位位點了,便于后續的分析。今天的內容就到這里了,下一篇就是注釋以及各種過濾了。


??水平有限,要是存在什么錯誤請評論指出!請大家多多批評指正,相互交流,共同成長,謝謝!!!

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

推薦閱讀更多精彩內容

  • 轉自:http://www.360doc.com/content/18/0208/11/19913717_7285...
    oddxix閱讀 17,614評論 2 164
  • 劉小澤寫于18.8.10,補充于18.8.14-15這之間經歷了第一期授課結課,(回中山辦購房手續)遙墻機場讀了1...
    劉小澤閱讀 9,423評論 6 41
  • Part0背景知識 Q:什么是外顯子測序呢?A:外顯子組測序是指利用序列捕獲或者靶向技術將全基因組外顯子區域DNA...
    天秤座的機器狗閱讀 10,523評論 5 63
  • 【我愛競賽網】 這是一個關注大學生競賽的網站,在此會發布各種適合大家參賽的活動,感興趣的同學可以百度上官網查看。 ...
    坐井觀天娃閱讀 304評論 0 0
  • 從咖啡館回來和同學約好太陽落山后去取我的藥。 同學在醫院婦產科工作,畢業后職業的不同導致我們能湊一個剛剛好的時間出...
    靚小寶閱讀 285評論 0 1