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

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

  • 相关阅读:
    HDU 4069 Squiggly Sudoku
    SPOJ 1771 Yet Another NQueen Problem
    POJ 3469 Dual Core CPU
    CF 118E Bertown roads
    URAL 1664 Pipeline Transportation
    POJ 3076 Sudoku
    UVA 10330 Power Transmission
    HDU 1426 Sudoku Killer
    POJ 3074 Sudoku
    HDU 3315 My Brute
  • 原文地址:https://www.cnblogs.com/leezx/p/5590159.html
Copyright © 2011-2022 走看看