最近在做一批宏基因组数据的拼接工作,这里的拼接主要指从Read到Contig这个水平。然后因为是第一次做,有很多没懂的地方,在学习和实践的过程中,总结了一下。写成几篇博客记录一下,以后又不清楚了可以回来看一下。这篇博客主要记录一下宏基因组拼接的算法之一——基于德布莱英图(De Bruijn graph)的方法。

一、为什么使用德布莱英图?

对于短序列read的拼接有两种基本算法,一种是基于Overlap Graph的算法,另一种是基于德布莱英图的算法。大多数为了桑格测序(Sanger sequencing)得到的测序数据拼接的算法都是基于Overlap Graph的,最典型的就是Overlap-layout-consensus方法,简称为OLC方法,这个方法通过两两之间有overlap区域的reads来构图,每个Read作为图中的点,而拥有足够的overlap则是建立图中的连接的基础。

这种方式在处理序列数很有限,而且序列间overlap区域很明显的时候能取得最好的效果。一些对于二代测序数据设计的assembler使用了OLC方法,但是这种传统的方法计算量实在过大,就算是非常简单的物种的从头组装也需要上百万甚至上千万条序列,所以仍然使用OLC方法显然不太实际。而且二代测序数据的读长片段,现在来说250bp和300bp的读长都是属于新兴事物,想要在茫茫多的短序列中找到可供使用的overlap区域也是OLC方法面临的瓶颈之一。

由于OLC方法跟不上更短的Read长度和更大的Read条数,更多的为二代测序数据拼接的assembler都选择了基于德布莱英图方法的,本文中将其简称为DBG,指de Bruijn graph。DBG方法通过将序列打断成更小的长度为k的小片段(称为k-mer)来降低计算的规模。对于一条长度为N的序列从头到尾(比如从5’-端到3‘-端)依次取k-mer一共可以取到**N-k+1*个k-mer,每两个相邻的k-mer之间都有长度为k-1的overlap区域。

通过将序列打断为k-mers,德布莱英图方法降低了大量短序列数据集中的数据冗余性,就好比上图中的这条序列在被切为3-mers后,GAT这个k-mer是重复出现的,并在德布莱英图中被反复利用,也就达到了降低了整体数据量和计算量的目的。对于某一特定的组装来说,最大的有效k-mer size取决于读长和error rate,同时如何选择k的取值也是决定了组装质量的重要条件(我现在也正在调查研究这一点)。实际上,在拼接前是有方法可以先看看合适的k值的,比如kmergenie这款软件就可以给出一个预测的k-mer值。

德布莱英图的另一个很优秀的特性就是在基因组中的一些重复片段会在德布莱英图中被打断,避免了一些错误的组装结果(当然不能很好地解决)。

第一节的内容和图片整理来自:https://banana-slug.soe.ucsc.edu/_media/bioinformatic_tools:abyss_technote_illumina.pdf

二、从德布莱英图到拼接结果

对于某一组测序数据来说,通过相应的算法获得了德布莱英图,怎么将图转化为序列呢?首先我们必须知道,德布莱英图是具有**欧拉图(Eulerian Graph)的性质的,也就是说我们需要寻找的通路(path)是一条遍历每个边至少一次的。当然我们也希望它是遍历每个点至少一次,但是哈密顿图(Hamiltonian Graph)**作为世界难解的NP-Complete问题,还很难被归化成一个具有概括性的模型。

根据上面的欧拉通路性质,对于下面的这组德布莱英图,我们认为它的拼接结果应该是GATTACATTACAA,或者说图中的ACA-CAT-ATT这个分支环路至少要被遍历一次。

事实上,当序列被打断为短k-mer后,序列的模糊性就变高了,就比如上图中的分支环路到底遍历几次,或者像下图这样的:

好像有很多条通路都可以满足条件。所以在实际情况中,assembler返回的是一组子通路(substring)的集合,通过这些子通路就可以组装出多条通路。比如针对上面这张图,返回的子通路集合是这样的{ACTGA, GACC, GAGTG, GAATG},其中第一个元素代表这个图的“入口”,第二个元素好代表这个图的“出口”,第三个元素代表的是上面蓝色的分支环路,第四个元素代表的是下面绿色的分支环路,通过按顺序选择分支就可以得到一条完整的路径。

通过拼接得到的contig是不能有分支节点的,也就是说我们想要得到的就是简单的单一路径,或者说单一序列。所以如果我们最终得到的contig是下图这样的,我们就会把它们按分支节点拆开,作为最终的contig结果。

这一部分其实还有大佬讲的更详细一点,参考:https://zhuanlan.zhihu.com/p/54466660。

三、几个值得关注的问题(之后边学习边写)

以上就是我现在比较关心的从read到contig的这样一个拼接过程的简单流程,但是在实用阶段中还有如下几个问题:

  1. 以上介绍的都是单k-mer实现序列拼接,但是现在的Assemblers普遍输入k-mer list,也就是说它会有多个k值进行迭代式的拼接。为什么要用multi-k-mer的方法?k值以及k-max、k-min该如何选择?
  2. Assembler的参数该如何选择?或者说该如何针对不同的数据情况选择?
  3. 德布莱英图只是一个基础,不同的Assembler,比如Megahit、MetaSPAdes、IDBA-UD等都在DBG的方法上进行了自己的改良优化,它们的详细原理是什么(关系到它们的适用场景和参数选择)?
  4. 还有很多使用中遇到的问题……

在学习的过程中写了这些笔记,整理出来发成一个文档集。之后应该还会写以上几个问题的学习笔记和几款Assembler的使用说明(弄清楚了咋整的之后……),stay tuned

Metagenome Assembly - Part1:基于德布莱英图(De Bruijn graph)的宏基因组de novo拼接相关推荐

  1. 神秘常量0x077CB531,德布莱英序列的恩赐

    本文发布于游戏程序员刘宇的个人博客, 转载请注明来源,博客园同步更新https://www.cnblogs.com/xiaohutu/p/10950011.html 某天我在优化游戏的算法,在将一个个 ...

  2. Non Hybrid Long Read Consensus Using Local De Bruijn Graph Assembly

    参考:https://www.biorxiv.org/content/biorxiv/early/2017/02/06/106252.full.pdf Non Hybrid Long Read Con ...

  3. Hifiasm-meta | 你没看错!基于宏基因组的完成图!!

    哈佛大学医学院Dana-Farber癌症研究所李恒课题组重磅推出三代HiFi宏基因组组装软件--hifiasm-meta.研究论文"Metagenome assembly of high-f ...

  4. MPB:广东生态土壤所孙蔚旻组-DNA稳定同位素示踪与宏基因组单菌草图组装联用技术...

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  5. MPB:青岛大学苏晓泉组分享基于分类学和系统发育的宏基因组比较DMS算法

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  6. IEEE ICME 2023论文|基于预训练和图网络的语音主题分类

    论文题目: SPEECH TOPIC CLASSIFICATION BASED ON PRE-TRAINED AND GRAPH NETWORKS 作者列表: 牛方静,曹腾飞,胡英,黄浩,何亮 研究背 ...

  7. 万字逐行解析与实现Transformer,并进行德译英实战(一)

    文章目录 本文内容 环境准备 Part 1: 模型架构 Encoder and Decoder 的堆叠 Encoder Decoder Attention Position-wise 前馈神经网络 E ...

  8. 图模型+Bert香不香?完全基于注意力机制的图表征学习模型Graph-Bert

    作者 | Jiawei Zhang.Haopeng Zhang.Congying Xia.Li Sun 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导读 ...

  9. 基于全局场景背景图和关系优化的全景3D场景理解(ICCV 2021)

    DeepPanoContext: 基于全局场景背景图和关系优化的全景3D场景理解(ICCV 2021) 论文标题:DeepPanoContext: Panoramic 3D Scene Underst ...

最新文章

  1. 计算程序运行时间(time_t, clock_t)
  2. android数据回传多个页面_Android页面之间进行数据回传
  3. [css] ui设计中px、pt、ppi、dpi、dp、sp之间的关系?
  4. FreeSql (十七)联表查询
  5. 全Sql语句实现SBO事务日志记录与查询
  6. 扫靓号4.2去会员限制版|靓号扫号|免费扫号器|熊猫扫号|蚂蚁扫号|腾讯王卡阿里宝卡米粉卡等42个卡种扫号器
  7. 5个步骤搞定protoc环境安装
  8. ubuntu20.04下编译rovio代码报“undefined reference to ‘__glew***‘“
  9. 【微信小程序】-- 页面导航 -- 编程式导航(二十三)
  10. MySQL Workbench报错说 seems to be a different OS
  11. linux usb总线接4g,Linux下4G LTE连接
  12. UVa514 Rails(铁轨)
  13. 序列比对(四)——Smith-Waterman算法之仿射罚分
  14. 【活着活着就老了-冯唐】阅后
  15. 【Simulink教程案例7】基于Simulink的滑模控制器设计与实现
  16. 分享一个嗖嗖移动管理系统
  17. netbeans java项目_如何在NetBeans中组合两个Java项目
  18. 点云数据详解——点云数据变为图像
  19. 九宫格拼图游戏设计,及代码时序问题解决
  20. 铁通宽带真差,千万不能用。

热门文章

  1. vagrant网络配置
  2. Linux:centos:计划任务管理《at》
  3. 最新最全论文合集——KDD 历年最佳论文汇总
  4. hive 分区表select全部数据_hive分区表
  5. Lake Shore超低温 Rox tm—带引线延长线的传感器
  6. Java设计模式(一)面向对象设计原则
  7. BUCTF[0CTF 2016]piapiapia
  8. 惠普6520S笔记本电脑进水故障维修实例
  9. PyTorch之MLP
  10. layDate开始时间和结束时间