VCF文件样本SNV基因型修正问题:bcftools filter未按预期生效
解决bcftools批量修正不符合QC标准的样本基因型问题
问题根源
你之前用的bcftools filter -i是位点级过滤,默认仅保留所有样本都满足条件的位点,--set-GTs只会对被过滤掉的位点(整个位点)设置参考基因型,而非针对单个样本的基因型逐一判断修正。这就是输出文件里仍存在不符合QC的样本基因型的原因。
解决方案:用bcftools +setGT插件(推荐)
bcftools +setGT是专门用于样本级基因型批量修改的插件,支持对每个样本的基因型单独判断,精准替换不符合条件的基因型为参考型。
1. 基础命令(处理DP/VAF/GQ样本级QC)
bcftools +setGT $vcf_file -- -t q -i 'FORMAT/DP < 10 || FORMAT/VAF < 0.05 || FORMAT/GQ < 99' -n 0 -o filtered_output.vcf
参数说明:
-t q:启用样本级查询模式,对每个样本的基因型单独评估条件-i:定义需要被修正的不符合QC的条件(用||表示任意一项不满足)-n 0:将符合上述条件的基因型设为参考型(二倍体为0/0,单倍体为0)
2. 加入位点级GC含量过滤
如果需要同时处理GC含量不符合要求的位点(将该位点所有样本基因型设为参考),可以先处理位点级条件,再处理样本级条件:
# 先把GC不符合的位点所有样本设为参考,再处理样本级QC bcftools +setGT $vcf_file -- -t s -i 'INFO/GC < 0.2 || INFO/GC > 0.8' -n 0 | \ bcftools +setGT -- -t q -i 'FORMAT/DP < 10 || FORMAT/VAF < 0.05 || FORMAT/GQ < 99' -n 0 -o filtered_output.vcf
参数说明:
-t s:启用位点级模式,对整个位点的所有样本基因型统一修改
结果验证
用以下命令检查是否还有不符合QC的非参考基因型:
bcftools query -f '%CHROM\t%POS\t%SAMPLE\t%GT\t%DP\t%VAF\t%GQ\n' filtered_output.vcf | \ awk '$4 != "0/0" && ($5 < 10 || $6 < 0.05 || $7 < 99)'
如果无输出,说明所有不符合条件的基因型已被成功修正为参考型。
备选方案:调整bcftools filter参数
如果不想用插件,也可以调整bcftools filter的参数实现样本级修正:
bcftools filter -i 'SAMPLE="*" && (FORMAT/DP >= 10 && FORMAT/VAF >= 0.05 && FORMAT/GQ >= 99)' \ --set-GTs 0 -m any $vcf_file -o filtered_output.vcf
参数说明:
-m any:只要有一个样本满足条件就保留该位点SAMPLE="*":明确对所有样本单独评估条件--set-GTs 0:将不满足条件的样本基因型设为参考型
内容的提问来源于stack exchange,提问作者Silver surfer
相关产品推荐
相关产品推荐

