多款软件进行vcf合并-gatk、vcftools、bcftools

vcf文件储存的是样本的变异信息文件,在同一批次分析中,如果不是采用joint calling的方式进行分析,最终会获得单个样本的变异数据。这种文件很难对同组不同样本进行差异SNP分析,此处就需要对文件进行合并。vcf文件的合并有很多的软件可以做,主要的就是GATK、vcftools和bcftools三种,但是具体的合并方法需要根据不同vcf文件中的信息来判断。

1. 样本相同、位点独立的vcf文件合并

样本相同、位点独立指的是在不同文件中包含的样本一致,但是位点批次质检没有交集,分染色体call变异的结果就是这一类的典型。这类最简单的方法可以直接使用cat命令进行合并,但是未免不太专业,以下是三款软件的合并方法。

1.1 gatk:GatherVcfs|MergeVcfs

gatk4提供了两种合并vcf文件的方法,分别是GatherVcfs和MergeVcfs,两个方法都是对相同样本数据集的变异结果进行合并,命令示例如下。

# GatherVcfs
gatk GatherVcfs -I concat-a.vcf -I concat-b.vcf -O combine_a_b_samesample_diffsites.vcf
# MergeVcfs
gatk MergeVcfs -I concat-a.vcf -I concat-b.vcf -O combine_a_b_diffsample_allsites_gatk.vcf

两个命令执行结果完全一致,结果如下。

##fileformat=VCFv4.2
##FILTER=<ID=q10,Description="Quality below 10">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##contig=<ID=1,length=17540695>
##contig=<ID=2,length=14896646>
##contig=<ID=3,length=12399606>
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  A
# concat-a.vcf文件位点
1       100     .       GTTT    G       1806    q10     DP=35   GT:GQ:DP        0/1:409:35
1       110     .       C       T,G     1792    PASS    DP=32   GT:GQ:DP        0/1:245:32
1       120     .       GA      G       628     q10     DP=21   GT:GQ:DP        1/1:21:21
1       130     .       GAA     GG      1016    PASS    DP=22   GT:GQ:DP        0/1:212:22
1       140     .       GT      G       727     PASS    DP=30   GT:GQ:DP        0/1:150:30
1       150     .       TAAAA   TA,T    246     PASS    DP=10   GT:GQ:DP        1/2:12:10
2       100     .       GTTT    G       1806    q10     DP=35   GT:GQ:DP        0/1:409:35
2       110     .       CAAA    C       1792    PASS    DP=32   GT:GQ:DP        0/1:245:32
2       120     .       GA      G       628     q10     DP=21   GT:GQ:DP        1/1:21:21
2       130     .       GAA     G       1016    PASS    DP=22   GT:GQ:DP        0/1:212:22
2       140     .       GT      G       727     PASS    DP=30   GT:GQ:DP        0/1:150:30
2       150     .       TAAAA   TA,T    246     PASS    DP=10   GT:GQ:DP        1/2:12:10
2       160     .       TAAAA   TA,TC,T 246     PASS    DP=10   GT:GQ:DP        0/2:12:10
# concat-b.vcf文件位点
3       241     .       GTTT    G       1806    q10     DP=35   GT:GQ:DP        0/1:409:35
3       251     .       CAAA    C       1792    PASS    DP=32   GT:GQ:DP        0/1:245:32
3       261     .       GA      G       628     q10     DP=21   GT:GQ:DP        1/1:21:21
3       271     .       GAA     G       1016    PASS    DP=22   GT:GQ:DP        0/1:212:22

1.2 vcftools:vcf-concat

vcf-concat并不是vcftools的一个子命令,而是软件安装目录下附带的功能模块,vcftools安装完成后可以直接使用,命令如下。

/vcftools/bin/vcf-concat concat-a.vcf concat-b.vcf > combine_a_b_samesample_diffsites_vcftools.vc

在进行较大文件合并时,最好将vcf文件进行压缩并创建索引,效率会快。如果待合并的vcf文件很多,可以将文件名写入到一个文件,由参数-f进行操作。该命令合并完的vcf位点变异信息与gatk结果一致,只不过表头信息顺序会发生改变,不影响数据使用。

1.3 bcftools:concat

bcftools软件在处理vcf文件时,某些情况下会优于vcftools,合并vcf文件的命令如下。

bcftools concat concat-a.vcf concat-b.vcf -o combine_a_b_samesample_diffsites_bcftools.vcf

合并之后的vcf文件位点信息与其余两款软件处理结果一致,只不过在输出结果的header中会出现运行的命令,示例如下。

##bcftools_concatVersion=1.3.1+htslib-1.3.1
##bcftools_concatCommand=concat -o combine_a_b_samesample_diffsites_bcftools.vcf concat-a.vcf concat-b.vcf

2. 样本不同,位点相同或不同

这种合并方式主要是对不同样本的变异文件进行合并,合并时共有位点会进行合并统计,非共有位点若在某一个样本中没有变异,则会自动记为缺失

2.1 vcftools:vcf-merge

模块名称为vcf-merge,在进行merge操作时,会对文件中的位点进行重排,耗时较长。输入文件需要压缩后创建索引,示例命令如下。

bgzip merge-test-a.vcf.gz && tabix merge-test-a.vcf.gz
bgzip merge-test-b.vcf.gz && tabix merge-test-b.vcf.gz
/vcftools/bin/vcf-merge merge-test-a.vcf.gz merge-test-b.vcf.gz > combine_a_b_diffsamples_allsites_vcftools.vcf

合并之后会对不同文件中的数据集进行整合,没有变异的位点会自动标记为缺失。

2.2 bcftools:merge

使用的方法为merge,示例如下。

bcftools merge merge-test-a.vcf.gz merge-test-b.vcf.gz -o combine_a_b_diffsamples_allsites_bcftools.vcf

该方法也需要实现对所有vcf文件进行压缩并创建索引,否则程序无法运行。

需要注意的就是,merge合并之后,不同软件生成的结果会存在很大的差异,主要是统计结果的重新计算上,示例如下。

# merge-test-a.vcf
1   3184885 .   TAAAA   TA,T    246 PASS    DP=10   GT:GQ:DP    1/2:12:10
# merge-test-b.vcf
1   3184885 .   TAAA    T   598 PASS    DP=16   GT:GQ:DP    0/1:435:16
# combine_a_b_diffsamples_allsites_vcftools.vcf
1   3184885 .   TAAAA   TA,T    422.00  PASS    AC=2,1;AN=4;DP=26;SF=0,1    GT:DP:GQ    1/2:10:12   0/1:16:435
# combine_a_b_diffsamples_allsites_bcftools.vcf
1   3184885 .   TAAAA   TA,T    598 PASS    DP=26   GT:GQ:DP    1/2:12:10   0/1:435:16

gatk:CombineVariants

gatk3提供了一个CombineVariants可以进行变异数据的合并,而gatk4中并没有找到功能相同的模块。CombineVariants使用如下。

java -jar /GenomeAnalysisTK-3.8/GenomeAnalysisTK.jar -T CombineVariants -V merge-test-a.vcf -V merge-test-b.vcf -o combine_a_b_diffsample_allsites_gatk.vcf -R ref.fna

合并结果示例如下。

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  A       B
1       3062915 .       GTTT    G,GT    1806    q10;q20 AC=1,1;AF=0.250,0.250;AN=4;DP=49;set=FilteredInAll      GT:DP:GQ        0/1:35:99       0/2:14:99
1       3106154 .       CAAAA   CA,C    1792    PASS    AC=1,1;AF=0.250,0.250;AN=4;DP=47;set=Intersection       GT:DP:GQ        0/1:32:99       0/2:15:99
1       3157410 .       GA      G       628     PASS    AC=3;AF=0.750;AN=4;DP=32;set=filterInvariant-variant2   GT:DP:GQ        1/1:21:21       0/1:11:49
1       3162006 .       GAA     G       1016    PASS    AC=2;AF=0.500;AN=4;DP=41;set=Intersection       GT:DP:GQ        0/1:22:99       0/1:19:99
1       3177144 .       GT      G       727     PASS    AC=2;AF=0.500;AN=4;DP=54;set=Intersection       GT:DP:GQ        0/1:30:99       0/1:24:99
1       3184885 .       TAAAA   TA,T    246     PASS    AC=2,1;AF=0.500,0.250;AN=4;DP=26;set=Intersection       GT:DP:GQ        1/2:10:12       0/1:16:99
2       3188209 .       GA      G       162     .       AC=1;AF=0.500;AN=2;DP=15;set=variant2   GT:DP:GQ        ./.     0/1:15:99
2       3199812 .       G       GTT,GT  481     PASS    AC=1,1;AF=0.500,0.500;AN=2;DP=26;set=variant    GT:DP:GQ        1/2:26:99       ./.
3       3199812 .       G       GTT,GT  353     PASS    AC=1,1;AF=0.500,0.500;AN=2;DP=19;set=variant2   GT:DP:GQ        ./.     1/2:19:99
3       3199815 .       G       A       353     PASS    AC=1;AF=0.500;AN=2;DP=19;set=variant2   GT:DP:GQ        ./.     0/1:19:99
3       3212016 .       CTT     C,CT    565     PASS    AC=1,1;AF=0.500,0.500;AN=2;DP=26;set=variant    GT:DP:GQ        1/2:26:91       ./.
4       3212016 .       CTT     C       677     q20     AC=1;AF=0.500;AN=2;DP=15;set=FilteredInAll      GT:DP:GQ        ./.     0/1:15:99
4       3258448 .       TACACACAC       T       325     PASS    AC=1;AF=0.500;AN=2;DP=31;set=variant    GT:DP:GQ        0/1:31:99       ./.

从上面的实例可以看出,在合并计算分型质量时,vcftools会对统计结果进行平均取值,bcftools则取其中的最大值输出,而gatk会取最小值输出,并且gatk和vcftools在输出原有数据基础之上,还会重新计算AC、AN等指标。

对于vcf数据合并,由于不同样本发生的变异位置很难保证一致,所以在单独合并不同样本的数据时,合并后的结果往往具有很高的缺失率,后续的差异分型实质上只是对不同样本的共有位点进行分析,丢失了某些样本或群体的特异位点。为了避免这种情况,多样本差异分析的项目最好是用joint calling进行变异检测,能获得更多的位点。

3. 参考资料

[1] https://gatk.broadinstitute.org/hc/en-us/articles/360046221931-GatherVcfs-Picard-
[2] http://samtools.github.io/bcftools/bcftools.html#concat
[3] https://gatk.broadinstitute.org/hc/en-us/articles/360045800732-MergeVcfs-Picard-
[4] https://vcftools.github.io/man_latest.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345