Практикум 13. Анализ данных NGS: поиск вариантов, изучение покрытия
Этот практикум посвящён поиску вариантов (SNP, инделей) в анализируемых прочтениях, а также их фильтрации по качеству и покрытию.
Получение вариантов
Для этого задания было предложено воспользоваться средствами bcftools. Далее приведена использованная команда:
bcftools mpileup --threads 10 -f chr4.fna correct_markd.bam | bcftools call -mv -o variants_chr4.vcf
Здесь bcftools mpileup - алгоритм, который на выходе даёт vcf-файл с вероятностями генотипов (?), -f chr4.fna - имя референсной последовательности, --threads 10 - параметр, указывающий использовать 10 потоков, correct_markd.bam - файл с корректно картированными прочтениями и маркированными дублями, bcftools call - вторая команда, принимающая на вход выдачу первой и вызывающая варианты, -mv - опции, позволяющие работать с редкими и многоаллельными вариантами и записывать в файл только варианты соответственно, -o variants_chr4.vcf - выходной файл.
Далее приведён фрагмент полученного vcf-файла.
##fileformat=VCFv4.2 ##FILTER= ##bcftoolsVersion=1.9+htslib-1.9 ##bcftoolsCommand=mpileup --threads 10 -f chr4.fna correct_markd.bam ##reference=file://chr4.fna ##contig= ##ALT= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##FORMAT= ##FORMAT= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##INFO= ##bcftools_callVersion=1.9+htslib-1.9 ##bcftools_callCommand=call -mv -o variants_chr4.vcf; Date=Sat Dec 19 22:38:39 2020 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT correct_markd.bam NC_000004.12 10047 . A G 3.77461 . DP=7;VDB=0.58;SGB=-0.453602;RPB=0.333333;MQB=0.333333;MQSB=1;BQB=0.833333;MQ0F=0.142857;ICB=1;HOB=0.5;AC=1;AN=2;DP4=3,0,1,1;MQ=18 GT:PL 0/1:34,0,29 NC_000004.12 12278 . G C 13.6078 . DP=3;VDB=0.909987;SGB=-0.511536;MQSB=1;MQ0F=0.333333;AC=2;AN=2;DP4=0,0,1,2;MQ=14 GT:PL 1/1:43,9,0 NC_000004.12 12295 . A G 9.88514 . DP=3;VDB=0.878371;SGB=-0.511536;MQ0F=0.333333;AC=2;AN=2;DP4=0,0,0,3;MQ=14 GT:PL 1/1:39,9,0 NC_000004.12 12318 . G A 8.99921 . DP=2;VDB=0.14;SGB=-0.453602;MQ0F=0;AC=2;AN=2;DP4=0,0,0,2;MQ=21 GT:PL 1/1:38,6,0 NC_000004.12 15036 . G A 21.3048 . DP=4;VDB=0.06;SGB=-0.453602;RPB=1;MQB=1;MQSB=1;BQB=1;MQ0F=0.25;AC=2;AN=2;DP4=0,1,1,1;MQ=19 GT:PL 1/1:48,3,0 NC_000004.12 16698 . T C 4.36621 . DP=6;VDB=0.66;SGB=-0.453602;RPB=0.333333;MQB=0.333333;MQSB=0.666667;BQB=0.333333;MQ0F=0.166667;ICB=1;HOB=0.5;AC=1;AN=2;DP4=1,2,2,0;MQ=19 GT:PL 0/1:35,0,30 NC_000004.12 16754 . G A 4.34871 . DP=4;VDB=0.06;SGB=-0.453602;RPB=0;MQB=0.5;MQSB=1;BQB=0.5;MQ0F=0.25;ICB=1;HOB=0.5;AC=1;AN=2;DP4=1,1,2,0;MQ=18 GT:PL 0/1:35,0,17 NC_000004.12 16843 . A G 5.01626 . DP=4;VDB=0.9;SGB=-0.453602;RPB=1;MQB=0.25;BQB=0.5;MQ0F=0;ICB=1;HOB=0.5;AC=1;AN=2;DP4=0,2,0,2;MQ=32 GT:PL 0/1:36,0,28
Файл vcf состоит из строк заголовка, начинающихся с «#», и расположенных ниже записей в 9 полях:
• CHROM - последовательность, в которой был вызван вариант
• POS - координата варианта в последовательности
• ID - идентификатор варианта
• REF - нуклеотид в референсе
• ALT - нуклеотид в варианте
• QUAL - качество
• FILTER - пройденные вариантом фильтры
• INFO - дополнительная информация о варианте
• FORMAT - дополнительные поля для описания образца
Затем данный файл был проанализирован при помощи команды:
bcftools stats variants_chr4.vcf > stats_var_chr4.txt
Из файла stats_var_chr4.txt была получена информация о том, что всего было обнаружено 507 069 вариантов, из них 496 003 - однонуклеотидные полиморфизмы (SNP), 11 066 - индели.
Фильтрация вариантов
Варианты были отфильтрованы по качеству и покрытию при помощи bcftools:
bcftools filter -i'%QUAL>30 && DP>50' variants_chr4.vcf -o filt_var_chr4.vcf
Файл с фильтрованными вариантами был также проанализирован:
bcftools stats filt_var_chr4.vcf > stats_filt_var.txt
В файле filt_var_chr4.vcf осталось только 23 091 вариантов: 22 754 SNP и 337 инделей; общее количество вариантов уменьшилось почти в 22 раза, при этом доля SNP возросла в сравнении с нефильтроваными вариантами.
Изучение покрытия
Для этого с помощью программы bedtools были получены участки генома, покрытые прочтениями хотя бы один раз:
bedtools genomecov -bg -ibam correct_markd.bam > covered_1.bed
Далее приведён фрагмент файла covered_1.bed:
NC_000004.12 3255 3274 2 NC_000004.12 9998 10007 1 NC_000004.12 10007 10009 2 NC_000004.12 10009 10010 3 NC_000004.12 10010 10016 4 NC_000004.12 10016 10017 3 NC_000004.12 10017 10032 4 NC_000004.12 10032 10035 3 NC_000004.12 10035 10036 2 NC_000004.12 10036 10037 3 NC_000004.12 10037 10041 4 NC_000004.12 10041 10045 6 NC_000004.12 10045 10049 7 NC_000004.12 10049 10052 6 NC_000004.12 10052 10062 7 NC_000004.12 10062 10066 8 NC_000004.12 10066 10069 10 NC_000004.12 10069 10079 9 NC_000004.12 10079 10080 8 NC_000004.12 10080 10081 11
Файл состоит из четырёх полей: имя референса, начальная координата прочтения, конечная координата прочтения, покрытие соответственно.
Затем требовалось отобрать только участки с покрытием более 50. Для этого была использована команда awk:
awk '$4 > 50' covered_1.bed > covered_50.bed
Далее число таких участков (число заптсей в файле covered_50.bed) было подсчитано при помощи команды:
wc -l covered_50.bed
В результате получилось 1 309 173 участков.
Наконец, предстояло отделить варианты, которые попали на эти участки с покрытием более 50. Сделано это было средствами bedtools:
bedtools intersect -a filt_var_chr4.vcf -b covered_50.bed > variants_covered_50.vcf