Analyses of Indels
Motivation
This wiki page details some standard Indel analyses which hopefully can help the group in understanding the issues and perform the analyses quickly without reinventing the wheel.
Tools
You can download vt and have some working knowledge of PERL to do stuff that vt does not support.
Analyses
File Preparation
The VCF file you work with should preferably be BCF2.1 compatible. Here we provide an example in /net/fantasia/home/atks/indel_analysis_tutorial. \\
To convert to BCF format which will work fast with vt:
vt view mills.vcf -o mills.bcf
You will encounter an error as the header does not contain contigs. To fix this, you should construct a complete header for mills.vcf. This is done for you in mills.with.alt.hdr.*
vt view mills.with.alt.hdr.vcf -o mills.genotypes.bcf
To index:
vt index mills.genotypes.bcf
To extract just the site list which is convenient for working with if you are not analysing the genotypes of the individuals
vt view -s mills.genotypes.bcf -o mills.sites.bcf
To index:
vt index mills.sites.bcf
You may also work with vcf.gz, just name the output as *.vcf.gz. But it will be slower with vt.
Peek
You can see what you have in the file with:
vt peek mills.genotypes.bcf
You can also focus on a chromosome:
vt peek mills.genotypes.bcf -i 20
Or with just passed variants:
vt peek mills.genotypes.bcf -i 20 -f PASS
Or with failed variants:
vt peek mills.genotypes.bcf -i 20 -f ~PASS
Or with just 1bp indels:
vt peek mills.genotypes.bcf -i 20 -f "PASS&&DLEN==1"
Or with just 1bp deletions:
vt peek mills.genotypes.bcf -i 20 -f "PASS&&LEN==-1"
Or with just biallelic 1bp indels:
vt peek mills.genotypes.bcf -i 20 -f "PASS&&N_ALLELE==2&&LEN==1"
Or with just biallelic 1bp indels that are somewhat rare:
vt peek mills.sites.bcf -f "PASS&&N_ALLELE==2&&LEN==1&&INFO.AF<0.03"
Or with just biallelic 1bp indels that are somewhat rare with sanity checking:
vt peek mills.sites.bcf -f "PASS&&N_ALLELE==2&&LEN==1&&INFO.AC/INFO.AN<0.03"
which you will observe discrepancies due to rounding off in AF. So you should probably use INFO.AC/INFO.AN.
Normalization
Indel representation is not unique, you should normalize them and remove duplicates.
Variant normalization is implemented in vt and this page explains the algorithm and also provides a simple proof of correctness - Variant Normalization
The following table shows the number of variants that had to be normalized and the corresponding type of normalization performed and the ensuing number of duplicate variants found for some of the 1000 Genomes Trio High Coverage call sets. Although left alignment seems to be a trivial concept, it is easily overlooked and remain a common mistake.
Dataset | Freebayes | Haplotyecaller | PINDEL | Platypus | RTG | Samtools | SGA |
---|---|---|---|---|---|---|---|
Biallelic | |||||||
Left trim | 27069 | 1 | 0 | 0 | 0 | 0 | 15047 |
Left aligned | 3 | 1 | 1 | 0 | 12262 | 2 | 1892 |
Multi-allelic | |||||||
Left trim | 40782 | 0 | 0 | 0 | 374 | ||
Left aligned | 1892 | 0 | 0 | 0 | 1329 | 1 | 0 |
Right trimmed | 0 | 0 | 0 | 25393 | 0 | 11 | 0 |
Duplicate variants | 0 | 1 | 155 | 3143 | 286 | 8 | 7541 |
Another example is the Mills et al. data set which followed up with 10004 Indels for validation. Out of 9996 passed variants, it was found that after normalization, only 8904 distinct Indels remain - about a loss of 11% of variant thought distinct.
To normalize and remove duplicate variants:
vt normalize mills.genotypes.bcf -r ~/ref/vt/grch37/hs37d5.fa | vt mergedups - -o mills.normalized.genotypes.bcf
and you will observe that 3994 variants had to be left aligned and 1092 variants were removed.
stats: biallelic no. left trimmed : 0 no. left trimmed and left aligned : 0 no. left trimmed and right trimmed : 0 no. left aligned : 3994 no. right trimmed : 0
multiallelic no. left trimmed : 0 no. left trimmed and left aligned : 0 no. left trimmed and right trimmed : 0 no. left aligned : 0 no. right trimmed : 0
no. variants observed : 9996
Time elapsed: 0.14s
stats: Total number of observed variants 9996 Total number of unique variants 8904
Time elapsed: 0.13s
The following will be slight faster: + denotes using of uncompressed bcf stream.
vt normalize mills.genotypes.bcf -r ~/ref/vt/grch37/hs37d5.fa -o + | vt mergedups + -o mills.normalized.genotypes.bcf
Also remember to index this file and extract the sites.
Insertion/Deletion ratios, Coding Regions and Overlap analysis
The proportion of frameshift Indels amongst coding region indels is a potential indicator of quality.
You can obtain it by using the profile_indels analysis.
vt profile_indels -g indel.reference.txt -r ~/ref/vt/grch37/hs37d5.fa mills.normalized.sites.bcf
The indel.reference.txt file contains the required reference to perform the overlap analysis.
data set No Indels : 8904 [0.93] FS/NFS : 0.66 (67/35)
dbsnp A-B 2975 [1.06] A&B 5929 [0.86] B-A 2059845 [1.51] Precision 66.6% Sensitivity 0.3%
mills A-B 5705 [0.81] A&B 3199 [1.18] B-A 203819 [0.98] Precision 35.9% Sensitivity 1.5%
mills.chip A-B 0 [-nan] A&B 8904 [0.93] B-A 0 [-nan] Precision 100.0% Sensitivity 100.0%
affy.exome.chip A-B 8821 [0.93] A&B 83 [0.69] B-A 34011 [0.47] Precision 0.9% Sensitivity 0.2%
STR
Annotation of STRs is really important. Show example of a deceptive single base pair variant
Annotation of Indels
Examining Mendelian Errors
Useful to have call sets from several different callers
Concordance
Can check concordance of genotypes between callers
Overlapping percentages with known data sets
With Mills with dbSNP with exome chips with genotyping chips if available
Useful stratifying features
AF - rare versus common Indel length - computed naively versus tract length Allele frequency bins Type of Indels - homopolymer types and STR types and isolated Adjacent SNPs Adjacent MNPs Clumping variants
Other useful evaluations
genotype likelihood concordance concordance stratified by indel length or tract length mendelian concordance by tract length