你知道如何比較兩個VCF文件嗎?

最近工作中遇到需要比對兩個不同的VCF文件,看看兩個VCF文件中哪些變異位點是相同的,哪些是不同的。為了尋找解決辦法,于是求救Google,發(fā)現(xiàn)了一篇非常不錯的教程。于是今天和大家整理學習一下如何比較兩個VCF文件,并且檢驗一下不同工具的效果。

準備工作

這里會用到幾種不同的工具,都可以通過conda直接來安裝:

conda install -y -c bioconda vcftools
conda install -y -c bioconda bcftools
conda install -y -c bioconda bedtools
conda install -y -c bioconda perl-vcftools-vcf
conda install -y -c bioconda tabix

測試文件會用到由GATK提供的文件(只有4.1M大小非常方便測試)。測試文件下載:

wget ftp://gsapubftp-anonymous@ftp.broadinstitute.org/bundle/b37/NA12878.knowledgebase.snapshot.20131119.b37.vcf.gz

使用bedtools,簡單來看看改VCF文件含有的SNPs信息:

#檢查SNPs的總數(shù)
bcftools view -v snps NA12878.knowledgebase.snapshot.20131119.b37.vcf.gz | grep -v "^#" | wc -l
###SNPs總數(shù)為281347

#檢查只含有單個alternate SNP的位點,換句話說多出來的就是含有兩個或者多個alternate變異:
bcftools view -v snps NA12878.knowledgebase.snapshot.20131119.b37.vcf.gz | grep -v "^#" | cut -f2 | sort -u | wc -l
###特異只含單個altern SNPs總數(shù)為280764

構(gòu)建測試VCF文件

講完基礎(chǔ)的部分后回到咱們這文章的主題,我們是要比對兩個VCF文件,所以首先要利用上面的測試數(shù)據(jù),構(gòu)建兩個“相近的帶有不同子集”VCF文件。

這里通過perl為每個變體生成一個隨機數(shù)(使用種子)來創(chuàng)建可變的子集,并且僅在生成的隨機數(shù)大于0.5時才打印出變異的位點。這樣我們會生成兩個VCF文件原始文件SNP變異的一半,其SNP位點在50%內(nèi)重疊。

###構(gòu)建第一VCF文件
bcftools view -v snps NA12878.knowledgebase.snapshot.20131119.b37.vcf.gz |
perl -lane 'BEGIN {srand(31)} if (/^#/) { print } elsif (length($F[3]) == 1) { if (rand(1) > 0.5) {print} }' |
bgzip > first.vcf.gz
tabix -p vcf first.vcf.gz

###構(gòu)建第二個VCF文件

bcftools view -v snps NA12878.knowledgebase.snapshot.20131119.b37.vcf.gz |
perl -lane 'BEGIN {srand(1984)} if (/^#/) { print } elsif (length($F[3]) == 1) { if (rand(1) > 0.5) {print} }' |
bgzip > second.vcf.gz
tabix -p vcf second.vcf.gz

###分別檢查兩個VCF文件的變異數(shù)目

zcat first.vcf.gz| grep -v "^#" | wc -l

# 第一個VCF文件含有140879個變異
zcat second.vcf.gz| grep -v "^#" | wc -l
# 第二個文件含有140367個變異

使用不同工具來執(zhí)行VCF文件之間的比較:

使用bedtools進行比較:

###先使用intersect function進行查看
###首先以first.vcf.gz文件為基準,看看兩個文件重疊的變異位點數(shù)目

bedtools intersect -u -a first.vcf.gz -b second.vcf.gz | wc -l

### 結(jié)果是70451


### 接著以second.vcf.gz為基準,看看兩個文件重疊的變異位點數(shù)目

bedtools intersect -u -a second.vcf.gz -b first.vcf.gz | wc -l

### 結(jié)果是70453

###這里也可以使用bedtools jaccard function
bedtools jaccard -a first.vcf.gz -b second.vcf.gz

###輸出結(jié)果為

intersection    union-intersection      jaccard n_intersections
70372   210680  0.334023        70157

接著可以使用vcf-compare進行比較

使用下面的命令行

vcf-compare first.vcf.gz second.vcf.gz

生成的結(jié)果如下:

# This file was generated by vcf-compare.
# The command line was: vcf-compare(v0.1.14-12-gcdb80b8) first.vcf.gz second.vcf.gz
#
#VN 'Venn-Diagram Numbers'. Use `grep ^VN | cut -f 2-` to extract this part.
#VN The columns are:
#VN        1  .. number of sites unique to this particular combination of files
#VN        2- .. combination of files and space-separated number, a fraction of sites in the file
VN      69898   second.vcf.gz (49.8%)
VN      70372   first.vcf.gz (50.0%)    second.vcf.gz (50.2%)
VN      70410   first.vcf.gz (50.0%)
#SN Summary Numbers. Use `grep ^SN | cut -f 2-` to extract this part.
SN      Number of REF matches:  70371
SN      Number of ALT matches:  70213
SN      Number of REF mismatches:       1
SN      Number of ALT mismatches:       158
SN      Number of samples in GT comparison:     0
# Number of sites lost due to grouping (e.g. duplicate sites): lost, %lost, read, reported, file
SN      Number of lost sites:   97      0.1%    140879  140782  first.vcf.gz
SN      Number of lost sites:   97      0.1%    140367  140270  second.vcf.gz

然后bcftools isec也能夠做同樣的事情:

bcftools isec first.vcf.gz second.vcf.gz -p first_second
 
# records private to  first.vcf.gz
cat first_second/0000.vcf | grep -v "^#" | wc -l
70529
 
# records private to  second.vcf.gz
cat first_second/0001.vcf | grep -v "^#" | wc -l
70017
 
# records from first.vcf.gz shared by both    first.vcf.gz second.vcf.gz
cat first_second/0002.vcf | grep -v "^#" | wc -l
70350
 
# records from second.vcf.gz shared by both   first.vcf.gz second.vcf.gz
cat first_second/0003.vcf | grep -v "^#" | wc -l
70350

小結(jié)

在這篇文章中,我演示了使用三種不同的工具來比較VCF文件。以下是每種工具的簡短總結(jié):

  • BEDTools可用于比較VCF文件,但只能通過比較基因組坐標進行比較;這可以提供對兩個文件中有多少個重疊變異位點的快速解答,并且可以用來計算Jaccard索引,從而指示總體兩個文件重疊位點的數(shù)量
  • vcf-compare提供了BEDTools的其他統(tǒng)計信息,包括重復(fù)位點的數(shù)量和Venn-Diagram數(shù)字,它們顯示了每個相應(yīng)的VCF文件中非它變體的數(shù)量
  • bcftools isec還提供了Venn-Diagram數(shù)字,并根據(jù)這些交集另外創(chuàng)建了VCF文件。

值得注意的是,不同工具之間顯示的重復(fù)位點數(shù)字略有不同。我懷疑這可能是由于每種工具處理重復(fù)位點時略微有所致。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前天,好朋友小希在朋友圈里曬出了去云南旅行的照片。照片中她笑靨如花,眼神明亮,微微的風吹起裙擺,背后的風景襯得人美...
    小羊同學咩閱讀 180評論 0 1
  • 一、新教師 (一)做好新教師到位后的工作安排; (二)關(guān)注新教師到位及宿舍安排情況; 二、財務(wù)對接 (一) 6月工...
    c09cc1c65ae5閱讀 204評論 0 0

友情鏈接更多精彩內(nèi)容