利用基因突变和K均值预测地区种群

时间:2022-04-26
本文章向大家介绍利用基因突变和K均值预测地区种群,主要内容包括介绍、利用基因组变异和K均值预测地区种群、进行KMeans群集、在Lightning-Viz上选择强大的图像可视化聚群数据、讨论、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

这是一篇关于西北基因组中心的Deborah Siegel和华盛顿大学联合Databricks的Denny Lee,就ADAM和Spark基因组变异分析方面的合作的专访。

全文关于基因组变异分析分为3部分,采用K-Means,ADAM和Apache Spark内容位于第3部分。

  1. 简介基因组测序
  2. 并行基因组变异分析
  3. 利用基因组变异和K-Means预测地区种群

介绍

在过去的几年里,基因组测序的经济和时间的成本大大降低。对基因组序列变异的理解给人类带来许多优势,从帮助识别倾向患常见疾病的人群,到治疗罕见疾病,以及使临床医生能够开针对个体的处方和药物。

在接下来的三部分的内容,我们将介绍基因组测序的基础和发展潜力。我们重点将关注基因组变异分析 - 这与基因组测序有所不同 - 以及如何通过使用基于社区版Databricks 的Apache Spark和ADAM(可拓展的基因组处理的API和CLI)加速它。

最后,我们将对基因组变异数据进行K-Means聚类分析,并建立一个模型能根据个体变异预测个体的地区种群。

这篇文章将重点介绍利用基因组变异和k-means来预测地区种群。您也可以进一步了解基因组测序或并行化基因组变异分析更多细节。

利用基因组变异和K均值预测地区种群

在Databricks Community Edition中,我们将基于ADAM数据使用Apache Spark演示K-Means分析基因变异。笔记展示了如何对公开数据进行分析,其中数据来自基于基因大数据ADAM计划(0.19.0版本)的1000个基因组项目(.

准备

与大多数数据科学项目一样,有大量的准备工作需要首先完成。在这个例子中,我们将以案例作为示例:

  • 将VCF文件转换为ADAM镶嵌格式
  • 加载描述VCF / ADAM镶嵌数据的面板文件
  • 读取ADAM数据到RDDs并开始并行处理基因型

创建ADAM镶嵌(ADAM Parquet)文件

为了从VCF创建ADAM镶嵌文件,我们将首先使用ADAM的SparkContext loadGenotypes方法加载VCF文件。通过使用adamParquetSave方法,将VCF保存在ADAM镶嵌格式。

val gts :RDD [ 基因型] = sc 。loadGenotypes (vcf_path )
gts 。adamParquetSave (tmp_path ) 

加载面板文件

VCF数据包含样本ID,但并不包含我们想要预测的种群代码。虽然我们在这个分析中做了一个无人监督的算法,但仍然需要响应变量来筛选我们的样本并估算预测误差。我们从integrated_call_samples_v3.20130502.ALL.panel的面板文件中获取每个来自1000 个基因组计划样本的种群代码

来源:1000-genomes-map_11-6-12-2_750.jpg

下面的代码片段,通过使用Spark的CSV阅读器加载面板文件来,从而创建panelSpark DataFrame。

val panel = sqlContext.read

   .format("com.databricks.spark.csv")

   .option("header", "true")

   .option("inferSchema", "true")

   .option("delimiter", "\t")

   .load(panel_path)

对于k均值聚类算法,我们通过建模分成3类,因此我们创建一个过滤器,就以下3个种群:英格兰和苏格兰的英国族人(GBR),美国西南部的非洲后裔(ASW)和中国北京的汉族(CHB)。我们仅利用这三个种群创建一个filterPanel的DataFrame 来做到这一点。由于这是一个小型的panel,我们也将它传播给所有的执行者,当我们做进一步的操作时,会减少数据清洗,因此效率会更高。

// 就三个种族创建panel过滤器

val filterPanel = panel.select("sample", "pop").where("pop IN (‘GBR’, ‘ASW’, ‘CHB’)")

// 使用panel过滤器并传播它

val fpanel = filterPanel

   .rdd

   .map{x => x(0).toString -> x(1).toString}

   .collectAsMap()

val bPanel = sc.broadcast(fpanel)

并行化处理基因型

使用下面的命令,我们将加载三个种群的基因型。这样会更有效地并行完成工作,因为panel过滤器被加载到内存中,并广播到所有的节点(即bPanel),这样包含基因型数据的镶嵌文件成为能进行下一步工作的文件。因此,只有我们关心的记录会从文件中被加载。

//创建三个群体的panel过滤器
val popFilteredGts : RDD[Genotype] = sc.loadGenotypes(tmp_path).filter(genotype => {bPanel.value.contains(genotype.getSampleId)}) 

笔记中包含许多额外的步骤,包括:

  • 数据挖掘 - 挖掘数据中一个6号染色体变异子集,其覆盖了大约50万个碱基对。
  • 清洗和过滤数据 - 数据缺失或者变异是多元的。
  • 为k-means聚类对数据处理 - 为每个样本(在排列上完全相同)创建一个ML向量,然后取得特征向量来运行该模型。

最终,我们在数据中筛选出805个变异的基因型,这成为预测地理种群的重要指标。下一步工作便是是创建一个特征向量和数据表框(DataFrame)来运行k-means聚类。

进行KMeans群集

通过上述准备步骤,针对基因组序列数据进行k-means聚类,这与Spark Programming Guide中介绍的k-means示例类似。

import org.apache.spark.mllib.clustering.{KMeans,KMeansModel}

// 利用KMeans将数据聚类成三种类型

val numClusters = 3

val numIterations = 20

val clusters:KMeansModel = KMeans.train(features, numClusters, numIterations)

现在我们有了模型 - 聚类 - 它让预测人口并计算混淆矩阵。首先,我们执行创建predictionRDD的任务,上述的混淆矩阵包含原始数据(即指向CHB,ASW和GBR的原始地理位置)。利用clusters.predict输出模型预测的基于特征标志(即基因组变异)的地理预测结果。接下来,我们将其转换成predictDFDataFrame,以便进行查询(例如,使用该display()命令,在后续表单操作中运行R命令等)。最后,我们回到filterPanel获得原来的标签(实际的地理位置)。

//创建predictionRDD,它利用clusters.predict方法输出模型的预测的地理位置

val predictionRDD: RDD[(String, Int)] = dataPerSampleId.map(sd => {

   (sd._1, clusters.predict(sd._2))

})
   

//转换为DataFrame更简单地查询数据

val predictDF = predictionRDD.toDF("sample","prediction")

//回到filterPanel获取原始标签

val resultsDF = filterPanel.join(predictDF, "sample")

//注册为临时表

resultsDF.registerTempTable("results_table")

//显示结果

display(resultsDF)

以下是预测值和实际值之间可视化输出。

下面举一简单的例子,介绍如何使用R语言计算混淆矩阵.这份笔记的代码主要用Scala编写,我们将用%r示使用R语言进行查询操作。

%r

resultsRDF <- sql(sqlContext, "SELECT pop, prediction FROM results_table")

confusion_matrix <- crosstab(resultsRDF, "prediction", "pop")

head(confusion_matrix)

输出是:

 prediction_pop CHB GBR ASW
1             2  89  30   3
2             1  14  58  17
3             0   0   3  41

在笔记中,还有额外的SQL代码来加入原始样本,地理种群,种群编号预测编号,以便将预测结果映射到单个样本。

在Lightning-Viz上选择强大的图像可视化聚群数据

介绍一个晓有趣味的可视化聚群数据的方法。通过Lightning-Viz使用力图对数据进行可视化。笔记中包含用于创建Lightning-Viz可视化的Python代码。在下面的GIF动画中,可以看到代表三个种群的三个聚群(左上:2,右上:1,下:0)。预测的聚群成员是集群的中心,而不同的颜色表示不同的种群。点击种群显示样本ID,颜色(实际种群)和预测的种群成员(连线到顶点)。

讨论

在这篇文章中,我们提供了关于基因组测序(关于果壳中基因组测序)和变异分析的复杂性(并行化基因组变异分析)的介绍。随着ADAM的推行,我们可以通过分布式并行化技术,从而显着提高分析的性能和准确性。这已经在基因组变异分析中得到证明,它使用Apache Spark notebook 对ADAM数据进行K-Means分析,您可以在Databricks Community Edition运行。基因组变异分析的前景是,我们可以识别出某些易患常见疾病的个体,解决罕见疾病,并提供个性化治疗。就正如我们已经看到大规模并行测序的成本和时间的大幅下降,大规模的并行测序的生物信息学分析将帮助我们解决犹如洪水泛滥的序列数据可重复分析问题,甚至可能有助于发展目前尚不可用的分析方法。最终,它将毋庸置疑地在医学方面作出贡献。

总结

下列资源我们给出引用出处,帮助我们完善笔记

  • 大数据基因组ADAM项目
  • ADAM:基于云计算的基因组格式和处理模式(Berkeley AMPLab)
  • Andy Petrella的'光速'基因组学与Spark和ADAM和相关的GitHub赞助。
  • Neil Ferguson 基于深度学习对基因组数据进行人口分层分析。
  • Matthew ConlenLightning-Viz 项目 -Viz 。
  • Timothy Danford’s 个人演讲(讨论Spark下的基因组学)
  • 孟德尔基因组学中心揭示了上百种罕见病的基因组学基础
  • NIH基因组测序程序针对常见或罕见疾病的基因组学基础
  • 1000个基因组计划

同样,我们要感谢Anthony Joseph,Xiangrui Meng,Hossein Falaki和Tim Hunter的贡献和评价。