題:
如何僅從VCF文件中提取插入內容?
blmoore
2017-06-16 15:53:50 UTC
view on stackexchange narkive permalink

我正在尋找一個標準VCF文件的子集,以生成僅包含插入內容(即不包含indel)的文件。

我可以使用以下方法來解決問題:

  bcftools視圖-v indels <vcf> | awk'{if(length($(4)== 1)print}' 

但是,這不會捕獲具有插入和刪除功能的多等位基因記錄一部分的插入,參考長度將大於1 bp。可能的話,走一串路是分解,規範化,然後使用相同的參考長度過濾鏈-當然,在許多VCF操作工具中,有一種更好的方法嗎?

您的VCF是什麼樣的?許多工具會產生包含變體類型的VCF。
可以放心地假設沒有類型註解,您只能grep出來,儘管首先運行註解工具可能是一個答案。
哦,好,事情從來沒有那麼容易。不過,您能否請[編輯]您的問題,並舉例說明您正在考慮的多等位基因記錄?理想情況下,給我們一個有關vcf文件的最小示例,並包括幾個要保留的條目以及幾個要跳過並顯示所需輸出的條目。這樣,我們可以使用您的示例來測試我們的解決方案,並且可以確定我們會滿足您的需求。
五 答案:
user172818
2017-06-16 19:45:22 UTC
view on stackexchange narkive permalink

單線:

  zcat my.vcf.gz | perl -ane'$ x = 0; for $ y(split(“,”,$ F [4])){$ x = 1 if length($ y)>length($ F [3])}打印// ^ #/ || $ x' 

或等效地

  zcat my.vcf.gz | perl -ane'$ x = 0; map {$ x = 1 if length>length($ F [3])} split(“,”,$ F [4]);如果/ ^#/ || $ x' 

對於簡單的VCF操作,通常建議編寫腳本。這可能比使用繁重的庫的速度更快。使用腳本,您只需解析您關心的字段;大多數庫不必要地解析每個字段。


在相關說明中,除非必要,我建議分解多等位基因位點。分解非常棘手,使VCF難以解析和理解,並且可能是錯誤的潛在來源。這是一個示例:

  #CHROM POS ID參考ALT質量過濾器信息格式S1 S2 S3 S411 101。 GCGT G,GCGA,GTGA,CCGT 199通過。 GT 0/1 1/2 2/3 2/4  

vt分解+歸一化會產生以下VCF:

  #CHROM POS ID REF ALT QUAL過濾器信息格式S1 S2 S3 S411 101。 GCGT G 199通過。 GT 0/1 1 /。 ./。 ./.11 101。 G C 199通過。 GT 0 /。 ./。 ./。 ./111 102。 CGT TGA 199通過。 GT 0 /。 ./。 ./1 ./.11 104。 T 199通過。 GT 0 /。 ./1 1 /。 1 /. 

從理論上講,您可以從此輸出中重建原始VCF。但是,程序要做到這一點非常具有挑戰性。當您逐行計算等位基因頻率時,該VCF會給您錯誤的結果。 bcftools規範-m-替換“。”與“ 0”。您可以從bcftools輸出中獲得正確的ALT等位基因頻率,但可以得到錯誤的REF等位基因頻率。此外,vt也是不完善的,因為不會分解“ CGT => TGA”。

我的首選輸出是:

  #CHROM POS ID參考ALT質量過濾器信息格式S1 S2 S3 S411 101。 GCGT G,<M> 0。 。 GT 0/1 1/2 2/2 2/211 101 G C,<M> 0。 。 GT 0/2 2/0 0/0 0/111 102。 C T,<M> 0。 。 GT 0/2 2/0 0/1 0/011 104。 T A,<M> 0。 。 GT 0/2 2/1 1/1 1/0  

在這裡,我們使用符號等位基因 <M> 來表示“另一個ALT等位基因”。您可以通過查看一行來計算等位基因頻率,而不會將其他ALT等位基因與REF混淆。 bgt可以間接產生這種VCF。但是,它會丟棄所有INFO,因此也不是一個可行的解決方案。

總而言之,分解多等位基因位點非常困難。當您分解錯誤時,您的下游分析可能不准確。分解時應謹慎使用。

blmoore
2017-06-16 16:24:00 UTC
view on stackexchange narkive permalink

一種方法是分解多等位基因記錄,以便使用 vt或類似方法將它們表示為一個等位基因,一個記錄:

  bcftools視圖-v indels <vcf> | vt分解-| bcftools視圖-H | awk'{if(length($ 5)>length($ 4))print}' 

一些分解的等位基因將帶有多餘的參考填充。要左移並修剪它們,請添加一個 normalize 步驟(將這些匹配回輸入VCF的NB變得很簡單):

  bcftools視圖-v indels <vcf> | vt分解-| vt normalize -r <reference.fasta-| awk'{if(length($ 4)== 1)print}' 

編輯:正如gringer所說,這也可以不用vt來完成:

  bcftools視圖-Ou -v indels <vcf> | bcftools規範-Ou -Nm-| bcftools視圖-H | awk'{if(length($ 5)>length($ 4))print}' 

要包括複雜等位基因,請使用 view -V snps (!snvs)而不是 -v indels

bcftools norm還將使用-m-選項拆分多等位基因記錄
JRodrigoF
2018-06-29 22:03:57 UTC
view on stackexchange narkive permalink

僅強調所有步驟都可以在bcftools功能內完成,並且由於我不能僅評論@blmoore的答案:

  bcftools視圖--types indel <vcf> | bcftools規範-m-| bcftools過濾器--include'strlen(REF)<strlen(ALT)'| bcftools視圖-H  

“ bcftools過濾器”的更多內置功能此處

很好,我只使用過bcftools視圖進行解壓縮,然後將輸出解析為標頭或數據記錄。
Pierre
2017-06-16 16:24:31 UTC
view on stackexchange narkive permalink

使用 vcffilterjs

  • 獲取REF的長度;
  • 在ALT上循環,忽略符號
  • 如果接受插入,則接受變體,例如:len(ALT)> len(REF)

  java -jar dist / vcffilterjs.jar -e'function accept(vc){var a = vc.getAlleles(); var lenRef = a.get(0).length(); for(i = 1; i<a.size(); ++ i){var alt = a.get(i); if(alt.isSymbolic())Continue; var lenAlt = alt.length(); if(lenRef<lenAlt)返回true;返回false; } accept(variant);' input.vcf  

Alex Reynolds
2017-06-17 04:03:40 UTC
view on stackexchange narkive permalink

如果要執行設置操作,則可以使用 vcf2bed

  $ vcf2bed --insertions < in.vcf > out.bed  

基於VCF v4.2規範,-snvs -插入- -deletions 是可用於過濾輸入的選項。在每種情況下,參考等位基因和其他等位基因的長度都用於確定所處理的變異類型。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...