变异过滤新方法——卷积神经网络
变异过滤是基于测序技术的变异检测分析中重要的一步。采用不同的变异检测软件在绝大多数情况下,均可获得比较理想的结果,传统过滤主要是通过一系列指标性的量对数据进行过滤,之后再由人工通过IGV人工核验对应的比对结果。这一步骤往往耗费大量的人力成本,并且对于不同的核验结果之间,也并没有一个明确的界定标准。因此不同批次的变异检测结果之间很难进行合并。虽然GATK4在发布时公布了过滤方式为VQSR变异过滤标准。但其也有固有缺陷,即模型存在数据分布是高斯分布这一假设。因此无法处理过于复杂的数据集。 目前broad除了目前这两种方式之外,提供了一个在研发中的基于深度学习卷积神经网络的变异过滤工具采用深度学习的变异过滤算法。其算法采用了Tensorflow 计算框架实现。
运行 CNNVariant Filter 工具集
下面向用户展示采用CNN训练模型,并过滤胚系突变的实例。
1. 数据准备
用户可从 https://github.com/Illumina/PlatinumGenomes 下载对应数据集,比较重要的是 hg19.hybrid.vcf.gz hg19.hybrid.bed 两个文件,分别对应变异真集以及变异真集对应区域的bed文件。如果用户有自己实验验证的数据集也作为训练真集使用。
2. 运行 CNNVariantWriteTensors 工具构建训练模型
此处运行一维训练功能(1D tensor),即只采用变异检测结果和真集进行模型训练,代码如下:
java -jar /gatk/gatk.jar CNNVariantWriteTensors \
--output-tensor-dir my_train_tensor \
--reference /Refs/hg19.fa \
--truth-bed hg19.hybrid.bed \
--variant target_region.targetd.vcf.gz \
--truth-vcf hg19.hybrid.vcf.gz
用户也可以根据自身数据实际情况,进行二维训练(2D tensor),即结合 bam 文件和变异检测文件vcf,以及真集数据。该功能的重要应用场景为,对不同类型的测序平台产生的数据进行不同训练,例如,Pacbio三代数据目前就可以采用该模式进行训练进而过滤。
3. 运行 CNNVariantTrain 生成Tensor文件
上一步结束后,运行下面命令:
java -jar /gatk/gatk.jar CNNVariantTrain \
--input-tensor-dir my_train_tensor/
结束后,对应生成 variant_filter_model.hd5
和 variant_filter_model.json
两个文件,以存放训练结果。
4. 运行 CNNScoreVariants 进行打分
运行以下命令:
java -jar /gatk/gatk.jar CNNScoreVariants \
--output cnn_score.vcf \
--reference /Refs/hg19.fa \
--variant target_region.targetd.vcf.gz \
--architecture variant_filter_model.json
运行结束后,即可得到 CNN_1D 值对应信息。
5. 开始过滤~
运行以下命令:
gatk FilterVariantTranches \
-V cnn_score.vcf \
--resource /Refs/hg19/1000G_omni2.5.b37.vcf.gz \
--resource /Refs/hg19/hapmap_3.3.b37.vcf.gz \
--info-key CNN_1D \
--snp-tranche 99.9 \
--indel-tranche 99.9 \
-O cnn_filtered.vcf \
--invalidate-previous-filters
即可得到过滤结果。
小结
相对其他机器学习变异检测工具,GATK4在业界的认可度是相当的高的变异检测工具之一。但是其开发初衷,主要还是针对illumina数据,因此,在很大程度上,对于其他平台产生的数据的结果,其实不见得非常良好,传统的变异检测过滤手段已经在不同平台飞速发展的今天,显得过时。而人工通过IGV进行校对,又过于消耗时间,因此次才会有deepvariant、parabricks 等基于机器学习算法的工具出现。
大家如果有任何关于GATK4 该工具使用方面的疑问,也可以联系本站管理员 :) 期待与大家的交流。