vcf文件与vcftools(二)

vcftools是用来处理vcf和bcf文件的工具集,功能涵盖了过滤,数据格式转换,一些指标的统计计算,vcf文件之间变异信息的差异比较等等。

1.基本用法
vcftools [ --vcf FILE | --gzvcf FILE | --bcf FILE] \
[ --out OUTPUT PREFIX ] [ FILTERING OPTIONS ] [ OUTPUT OPTIONS ]
2.使用

官网提供了几个常用示例,下面用我的vcf文件测试一下,我的vcf文件共249个样本,27012个SNP标记

2.1 对来自chr1的每一个位点统计其基因频率
vcftools --gzvcf combined200.vcf.gz --freq --chr chr1 --out chr1_analysis

因为没有加任何过滤选项,所以没有过滤任何记录

$ less chr1_analysis.log | tail -n 4
After filtering, kept 249 out of 249 Individuals
Outputting Frequency Statistics...
After filtering, kept 3453 out of a possible 27012 Sites #chr1上原本就有3453个SNP位点
Run Time = 44.00 seconds

第三列表示在所有样本中,该位点出现了几种碱基,大多数情况下为2,也可能是3、4;第四列表示该位点出现的碱基总数,一个样本贡献2个。

$ head -n 5 chr1_analysis.frq 
CHROM   POS N_ALLELES   N_CHR   {ALLELE:FREQ}
chr1    1146710 2   494 G:0.983806  A:0.0161943
chr1    1146714 2   494 G:0.989879  A:0.0101215
chr1    1146763 2   494 G:0.995951  A:0.00404858
chr1    1146783 2   494 C:0.995951  T:0.00404858
2.2 过滤掉vcf文件中的InDel记录,只保留SNP记录
vcftools --gzvcf combined200.vcf.gz --remove-indels --recode --recode-INFO-all --out SNPs_only

--recode 
表示过滤之后会生成一个新文件,以.recode.vcf为后缀
--recode-INFO-all
因为在过滤之后,原先存在的INFO列的注释信息可能不对,
比如剔除了一些样本,那么AN就需要重新计算。
所以过滤之后默认情况下是不含有INFO列的。
该选项表示将原来vcf文件中所有INFO信息保留下来。
--recode-INFO  
比如--recode-INFO AC表示只将AC保留
--keep-only-indels和--remove-indels作用相反

根据vcf文件的FILTER列来过滤
--remove-filtered-all 过滤掉FILTER列不是“PASS”的记录,这一步grep也能做。

vcftools --vcf combined3000_head3k.vcf --remove-filtered-all --recode --out SNPs_filter

--max-missing
--max-missing的取值是0-1,为1时表示某个位点上所有的样本必须都有基因型,一个样本的基因型都不能缺。所以这个选项可以理解为:能分型的样本占总样本的比例至少为多少。

vcftools --gzvcf combined200.vcf.gz --max-missing 0.99 --recode --out output_noMissing

有过滤操作都要加上--recode

2.3 比较两个vcf文件的变异位点
vcftools --gzvcf combined200.vcf.gz --diff output_noMissing.recode.vcf --diff-site --out in1_v_in2

下面的表头的1、2分别表示文件1、文件2,第4列1或2表示仅文件1或文件2有,B表示都有

$ head in1_v_in2.diff.sites_in_files 
CHROM   POS1    POS2    IN_FILE REF1    REF2    ALT1    ALT2
chr1    1146710 1146710 B   G   G   A   A
chr1    1146714 1146714 B   G   G   A   A
chr1    1146763 1146763 B   G   G   A   A
chr1    1146783 1146783 B   C   C   T   T
chr1    1146785 1146785 B   G   G   C   C
chr1    1146852 1146852 B   C   C   T   T
chr1    1146853 1146853 B   G   G   A   A
chr1    1147062 .   1   G   .   A   .
chr1    1147243 .   1   A   .   C   .
2.4 结合管道操作符

用--stdout代替--out即可结合管道进行其他处理

2.5 计算Hardy-Weinberg p-value

Hardy-Weinberg遗传平衡检验用到的统计方法是卡方测验,详细过程参考:http://www.dxy.cn/bbs/thread/223387#223387以及https://wenku.baidu.com/view/9820fc2258fb770bf78a5571.html

vcftools --gzvcf combined200.vcf.gz --hardy --out each_site_hardy   
# Only using biallelic SNPs

第6列即为所求

$ lsx each_site_hardy.hwe | head -n 2
CHR POS OBS(HOM1/HET/HOM2)  E(HOM1/HET/HOM2)    ChiSq_HWE   P_HWE   P_HET_DEFICIT   P_HET_EXCESS
chr1    1146710 239/8/0 239.06/7.87/0.06    6.692747e-02    1.000000e+00    1.000000e+00    9.440689e-01
3.其它参数说明
3.1 基本选项

--vcf | --gzvcf | --bcf 输入格式,三选一即可
--out <输出文件前缀>
--stdout 和 -c 输出到标准输出,能通过管道与其它命令结合

3.2 过滤SNP的选项

POSITION FILTERING
可以提供一些位置信息,或是能表示位置的文件,具体参数见官方文档
ALLELE FILTERING
--maf 和 --max-maf用来限定最小等位基因频率(MAF)的范围
--mac 和 --max-mac和上面类似,用来限定最小等位基因的数量
--min-alleles 和 --max-alleles用来限定等位基因的数量,比如这条命令只会保留vcf文件ALT列只有一种碱基的情况。

vcftools --gzvcf combined200.vcf.gz --min-alleles 2 --max-alleles 2

GENOTYPE VALUE FILTERING
--min-meanDP 和 --max-meanDP用来限定所有样本DP的平均值,DP表示某一个样本某一位点所有allele的总深度
--hwe 2.5 计算Hardy-Weinberg p-value讲到如何求p值,这个参数就是根据p值来过滤的,小于阈值则被过滤掉
--max-missing 前面已经举例;--max-missing-count 某个位点缺失样本个数多于某个阈值则过滤掉
--phased 某个位点如果含有未定相的基因型则过滤
--minQ 根据vcf文件的QUAL列来过滤,比如

vcftools --gzvcf combined200.vcf.gz --minQ 100 --recode --out minQ_100
3.3 过滤样本的选项

--indv 和 --remove-indv保留或去除哪一个样本,后接样本ID
--keep 和 --remove保留或去除哪些样本,后接文件名,文件中一行一个样本ID

3.4 输出选项

等位基因统计
--freq 和 --counts用于统计等位基因的频率和数量
深度统计
每个样本所有位点的平均深度、单个位点所有样本的深度加和(或平均)、每个样本每个位点基因型的深度。感觉没什么用
LD统计
Ti/Tv统计
NUCLEOTIDE DIVERGENCE STATISTICS
FST STATISTICS
OTHER STATISTICS
格式转换

3.5 比较选项

reference

The variant call format and VCFtools: https://academic.oup.com/bioinformatics/article/27/15/2156/402296
VCFtools--A set of tools written in Perl and C++ for working with VCF files:
https://vcftools.github.io/man_latest.html#EXAMPLES

你可能感兴趣的:(vcf文件与vcftools(二))