云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

微软云_桐城网站建设_返利

小七 141 0

用Glow优化大型基因组数据集的变异标准化

Cross是从Glow博客上发布的。基因组学领域的许多研究和药物开发项目都涉及到大量的基因组变异数据集,这些数据集的数量在过去十年中呈指数级增长。然而,用于提取、转换、加载(ETL)和分析这些数据集的工具并没有跟上这种增长的步伐。在这些项目中,单节点命令行工具或脚本在处理万亿字节的基因组数据方面效率非常低下。今年10月,Databricks和Regeneron遗传学中心合作推出了Glow项目,这是一个基于apachespark的大规模基因组分析的开源工具包™,以解决此问题。Glow的优化版本集成到Databricks Unified Data Analytics Platform(UDAP)for Genomics中,除了一些功能优化之外,它还提供了更多的二级和三级分析功能,这使得Databricks成为运行Glow的最佳平台。在大型跨团队研究或药物发现项目中,计算生物学家和生物信息学家通常需要合并非常大的变异调用集以执行下游分析。在之前的一篇文章中,我们展示了Glow在ETL中的强大功能和简单性,以及使用Glow的VCF和BGEN数据源合并来自不同来源的不同调用集。不同来源的变体调用集带来了另一个主要挑战。这些集合由不同的变量调用工具和方法生成并不少见。因此,相同的基因组变体可能在不同的调用集合中以不同的方式表示(在基因组位置和等位基因方面)。在对数据进行进一步分析之前,必须解决变量表示中的这些差异。这一点至关重要,原因如下:避免合并变量集的下游分析结果出现不正确的偏差,或由于缺乏标准化(事实上是多余的)而浪费对看似新变量的分析工作(见Tan等人)。在1000个基因组项目变体调用和dbSNP中的这种冗余示例)确保合并后的数据集及其分析后衍生数据与其他公共和私有变量数据库兼容并具有可比性。这是通过所谓的变量规范化来实现的,这是一个确保同一变量在不同数据集中以相同方式表示的过程。在大型项目中,使用流行的单节点工具对万亿字节的变量数据执行变量规范化可能会成为一个相当大的挑战,因为这些工具可接受的输入和输出是通常用于存储变量调用的平面文件格式(如VCF和BGEN)。为了解决这个问题,我们在Glow中引入了变量规范化转换,它直接作用于变量的Spark数据帧,从而生成规范化变量的数据帧,利用Spark的强大功能,通过一行Python或Scala代码,以快速且可伸缩的方式规范化成千上万个样本中的变体。在处理我们的规范化器之前,让我们稍微了解一下变量规范化实际上做了什么。变量规范化有什么作用?变体标准化确保了一个变体的表示既"简约"又"左对齐"。如果一个变体以尽可能少的核苷酸表示而不将任何等位基因的长度减少到零,则该变体就是简约的。图1给出了一个示例。图1。变异简约如果一个变体的位置不能向左移动,同时保持其所有等位基因的长度不变,则它是左对齐的。图2中给出了一个示例。图2。左对齐变体Tan等人。证明了归一化结果的唯一性。换句话说,当且仅当两个变量实际上是不同的变量时,两个变量具有不同的规范化表示。辉光中的变量规格化我们已经将normalize_variants transformer引入Glow(图3)。在使用VCF、BGEN或Delta读取器将变量调用摄取到Spark数据帧之后,用户可以调用一行Python或Scala代码来规范化所有变量。这将生成另一个数据帧,其中所有变量都以其规范化的形式显示。然后,可以使用标准化数据帧进行下游分析,比如使用我们内置的回归函数或高效并行化的GWAS工具进行GWAS分析。图3。使用Glow的可伸缩变量规范化normalize_variants transformer为这一重要的上游过程带来了前所未有的可扩展性和简单性,因此也是Glow和Databricks UDAP for Genomics成为生物库规模基因组分析的理想平台的另一个原因,例如。,基因变异与疾病之间的关联研究,跨越数十万人的队列。底层规范化算法及其精度有几个用于变量规范化的单节点工具使用不同的规范化算法。用于变量规范化的广泛使用的工具包括vt normalize、bcftools norm和GATK的LeftAlignAndTrimVariants。根据我们自己的调查,也正如Bayat等人所指出的那样。而Tan等人,GATK的leftalignandtrimportiants算法经常无法完全左对齐某些变体。例如,我们注意到,在GATK本身的test_left_align_hg38.vcf测试文件中,应用LeftAlignAndTrimVariants会导致文件中16个变体中的3个规范化错误,包括位置chr20:63669973、chr20:64012187和chr21:13255301。使用vt normalize和bcftools normal对这些变量进行了正确的规范化。因此,在我们的normalize_variants transformer中,我们使用了bcftools normal或vt normalize算法的改进版本,这些算法在基本原理上是相似的。对于一个给定的变体,我们从右切变异体的所有等位基因开始,只要它们最右边的核苷酸相同。如果任何一个等位基因的长度达到零,我们留下一个来自参考基因组的固定核苷酸块(这些核苷酸以块的形式添加,而不是一个一个地添加,以限制引用到参考基因组的次数)。当右切边终止时,执行一个潜在的左切边以消除所有等位基因共有的最左边的核苷酸(可能由先前的左附加产生)。在这个过程中,变异的起始、结束和等位基因都会得到适当的更新。我们在多个测试文件上对照vt normalize和bcftools规范对我们的规范化算法的准确性进行了基准测试,并验证了我们的结果与这些工具的结果相匹配。多等位基因变异的选择性分裂我们的normalize_variants转换器可以选择性地将多等位基因变体拆分为双等位基因变体。这由可提供给此变压器的模式选项控制。mode选项的可能值如下:normalize(默认值),它只执行规范化,split_and_normalize,它在执行规范化之前将多个等位基因变体拆分为双等位基因变体;split,它只拆分多个等位基因而不进行任何规范化。我们的变压器的拆分逻辑与GATK的leftalignandtrimprovalints工具使用–splitMultiallelics选项遵循的分割逻辑相同。更准确地说,在拆分从VCF文件加载的多等位基因变体的情况下,如果可能,该转换器将重新计算生成的双等位基因变体的GT块,并删除除AC、AN和AF之外的所有信息字段。这三个字段基于新计算的GT块(如果存在)进行插补,否则,这些字段也被删除。使用normalize_variant transformer在这里,我们简要地演示如何使用Glow非常大的变量调用集可以规范化和/或拆分。首先,可以将VCF和/或BGEN文件读入Spark数据帧,如前一篇文章所示。这在Python中显示在名为/databricks datasets/genomics/call sets的文件夹中包含的VCF文件集:原始变量_df=火花。阅读\.格式("vcf")\.option("includeSampleId",False)\.load("/databricks datasets/genomics/call sets")图4显示了一个DataFrame original_variants_df的示例。图4。变量数据帧原始变量然后可以使用normalize_variants transformer对变量进行标准化,如下所示:导入发光ref_genome_path='/mnt/dbnucleus/dbgenomics/grch38/data/grch38.fa'规范化的变量_df=发光.变换(\"规范化_变体"\原始的_变体_df\基因组路径U=基因组参考\)请注意,标准化需要引用genome.fasta或.fa文件,该文件是使用reference_genome_path选项提供的。dict和.fai文件必须与参考基因组文件一起放在同一文件夹中(请在此处阅读有关这些文件格式的更多信息)。我们的示例数据帧在规范化之后可以在图5中看到。图5。在将normalize_variants transformer应用于原始的_variants_df后获得的规范化_variants_df数据帧。请注意,有几个变体是标准化的,它们的起始、结束和等位基因也相应地发生了变化。默认情况下,transformer规范化每个变量,而不在标准化之前拆分多个等位变量,如图5所示。通过将mode选项设置为split_and_normalize,双等位基因变体不会发生任何变化,但是多等位基因变体首先会被分割为适当数量的双等位基因,并且结果的双等位基因将被标准化。可按如下方式进行:拆分_和_规范化的_变量_df=发光.变换(\"规范化_变体"\原始的_变体_df\参考基因组路径=参考基因组路径\mode="分割并规范化")生成的数据帧如图6所示。图6。将normalize_variants transformer与mode="split_and_normalize"应用于原始的_variants_df后,分割的_和_规格化的_-variants_-df数据帧。请注意,例如,原始_-df的三等位基因变体(chr20,start=19883344,end=19883345,REF=T,ALT=[TT,C])被分割成两个双等位基因变体,然后进行标准化处理,得到两个标准化的双等位基因变体(chr20,s