zoukankan      html  css  js  c++  java
  • 基因组组装算法

    目前,构建Graph的主流方法有3种,Overlap-Layout-Consensus(Celera Assembler、PBcR),de Bruijn Graph(SOAPdenovo ) 和 String Graph(Falcon)。


    相关文献

     

    前言


    基因组组装的基本思路:无论是一代sanger、二代短reads、三代长Pacbio,我们得到的测序数据相较于整个基因组而言仍然是极小的;我们的任务就是将这些小片段连接起来;序列之间的联系因为重复序列的存在变得非常复杂,通过overlap我们最终都会构建Graph,所有的算法都会从Graph中得到最优路径,从而得到最初的contig

    1 OLC算法

    适用于reads读长较大的测序数据,如一代和三代的reads。

    主要分为三步:(1)Overlap:,对所有reads进行两两比对,找到片段间的重叠信息;(2)Layout:根据得到的重叠信息将存在的重叠片段建立一种组合关系,形成重叠群,即Contig;(3)根据构成Contig的片段的原始质量数据,在重叠群中寻找一条质量最重的序列路径,并获得与路径对应的序列,即Consensus。

    OLC算法最初成功的用于Sange测序数据的组装,比如Celera Assembler,Phrap,Newbler等均采用该算法进行拼接组装。

    2 DBG算法

    适用于reads比较短的测序数据,二代数据。缺点:难以对重复序列区域进行分析,更依赖于建库。

    首先将reads打断成长度为K的核酸片段,即Kmer,在利用Kmer间的overlap关系构建DBG,再通过DBG得到基因组序列。

    DBG算法最早应用于如细菌类小的基因组的组装上,直到李瑞强等(2010)开发SOAPdenovo 算法,成功的组装了采用二代测序的黄瓜及熊猫的基因组,DBG算法开始普遍运用。

      image
    假设我们获得的reads是20bp,图1a中,生成6个片段,每个片段长度(L)是10bp,至少重叠长度(O)为5bp,然后各个片段建立OLC图。图1b的Kmer为5,建立DBG图。

    DBG算法相比于OLC的优势是什么?

    由于二代测序得到的reads长度较短,包含的信息量较少,因此完成基因组拼接需要较高的覆盖度。OLC算法适用于读长较长的序列组装,通过构成的OLC图寻找Consensus sequence的过程,实际上是哈密顿通路寻找的问题,算法非常复杂。

    若采用OLC算法,会大大增加拼接的复杂性以及运算量。而采用DBG算法,通过K-1的overlap关系,构建DBG图,通过寻找欧拉路径得到Contig序列,从算法的角度极大的简化了组装的难度。

    讲完算法,我们以目前应用广泛的 SOAPdenovo 软件为例来介绍组装过程

    SOAPdenovo软件的组装过程

    (1)通过Kmer之间K-1的overlap关系构建contig(重叠群),如图2:

    image

    (2)利用pair-end信息,将无overlap关系的contigs搭建成scaffold(脚手架),如图3:

    image

    1数据纠错

    要得到一个有较高准确性的基因组图谱,首先对测序得到的数据进行处理:

    image
    将reads逐bp打断成长度为K的连续核酸序列,如上图a所示,若这条reads中间由于测序错误有一个错误的碱基,那么在得到的Kmer中,也会有一些错误Kmer或者低频Kmer。

    绘制Kmer频数分布图时,如上图b所示,Error free代表没有测序错误的Kmer频数分布,Error rate1%代表有1%错误率的Kmer频数分布。

    错误Kmer对后续组装会产生很大的困扰,因此,在构建DBG图之前,需要先对数据进行纠错。纠错的两种方法:

    (1)基于Read间的比对,通过多序列比对,通过概率模型区分测序错误引起的错误Kmer。这种方法纠错准确,但需要消耗较大的计算资源。如ALLPATH-LG,ECHO等纠错软件都基于这种方法。

    (2)通过Kmer频数图谱进行区分,这类软件如SOAPdenovo,Euler等。

    2构建Contig

    根据Kmer之间的overlap关系进行连接,如下图所示:

    image
    reads(read1:AGATCTTGTTATT;read2:GTTATTGATCTCC)逐bp的打断成长度为5bp的Kmer,根据Kmer间的overlap关系进行连接。可以看到两条reads中 GATCT 和 GTTATT 是两个重复的片段,在构建De Bruijn图中,会形成如上图的泡状结构以及多个分支的情况,面对这种很复杂的图,如何才能找到那一条正确的路径呢?

    (1)对De Bruijn图进行化简

    简化De Bruijn图需要去掉无法继续连接的分支、低覆盖度的分支,并且利用序列信息化简重复序列在De Bruijn图的分叉通路,对于少量的杂合位点,采用随机选择策略,合并杂合位点。通常需要考虑如下几种情况:

    image 
    (2)得到一个简化的De Bruijn图后,仍然会因有很多分叉位点无法确定真正的连接关系,因此接下来在每个分叉位点将序列截断,得到了最初contigs。

      image
    留给大家一个思考题:根据上述步骤,我们看下图4中复杂的De Bruijn示意图,可以得到什么样的contigs呢?(答案见文末)

    3构建scaffold

    将测序得到的reads比对回得到的contigs,利用reads之间的连接关系和插入片段大小信息,将contigs组装成scaffolds。

    image

    4补洞

    得到的scaffold中间会有较多的gap,为了使组装的序列更完整,需再次利用测序的双末端数据之间的配对关系连接contigs,并利用测序数据与已经组装的contig之间的覆盖关系对contig之间空隙进行补洞,延长contigs,补洞后的contigs长度相比补洞之前一般增加2-7倍。

      image
    以上就是SOAPdenovo组装的基本过程,看明白了吗?

    “揭开组装的神秘面纱下篇”敬请期待~

    参考文献

    1. Li RQ, Zhu HM, Ruan J, et al. Denovo assembly of human genomes with massively parallel short readsequencing. Genome Res. 2010, 20(2), 265-72.

    2. Li ZY, Chen YX, Mu DS, et al. Comparison of the two majorclasses of assembly algorithms: overlap-layout-consensus andde-bruijn-graph. Brief Funct Genomics. 2012, 11(1), 25-37

    image

     

    3 string graph算法

    有利于组装散列重复序列。

    string graph中的节点是长度不一的序列,这些序列是由overlapping reads生成,需要设置一个最小overlap大小。

     

     

    学习资源:

    Comparison of the two major classes of assembly algorithms: overlap-layout-consensus and de-bruijn-graph.

    The fragment assembly string graph

    基因组组装算法研究(已审核) - 百度文库

  • 相关阅读:
    检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败
    VSTO 开发中 应用ActionPane、CustomTaskPane
    Thread.Join()的详解
    HBase笔记
    Hive命令详解
    视频地址
    几种表
    如何将数据导入到hive中
    hdfs笔记
    分区表简介
  • 原文地址:https://www.cnblogs.com/leezx/p/5590159.html
Copyright © 2011-2022 走看看