跳到主要内容
访问密钥 NCBI主页 MyNCBI主页 主要内容 主导航
生物信息学。2015年6月15日;31(12): 1913–1919.
2015年1月31日在线发布。 数字对象标识:10.1093/生物信息学/btv053
预防性维修识别码:第765884页
采购管理信息:25638815

星码:基于全对搜索的序列聚类

摘要

动机:测序技术的不断增长为计算生物学提供了新的应用和挑战。在其中许多应用程序中,需要更正排序错误。当测序读取未知参考(如随机DNA条形码)时,这一点尤为重要。在这种情况下,可以通过对所有条形码进行成对比较来进行错误纠正,这是一个计算复杂的问题。

结果:在这里,我们解决了这个挑战,并描述了一个精确的算法来确定哪些序列对位于给定的Levenshtein距离内。为了纠错或减少冗余,匹配的对被合并到相似序列的簇中。星码的效率归功于poucet搜索,这是Needleman–Wunsch算法在trie节点上的一种新实现。在匹配随机条形码的任务中,星码在速度和精度上都优于序列聚类算法。

可用性和实施:C源代码位于http://github.com/gui11aume/starcode(网址:http://github.com/gui11aume/starcode).

联系人: moc.liamg@noilif.emualliug

1引言

所有测序技术都有一定程度的不精确性。例如,Illumina平台(马古利斯et(等) 阿尔。, 2005)包含替换的错误率为1–2%(多姆et(等) 阿尔。, 2008;中村et(等) 阿尔。, 2011)PacBio平台的插入和删除错误率为15%(开斋节et(等) 阿尔。, 2009). 这些技术的巨大吞吐量最近为开发高效的纠错算法创造了额外的需求。

通过将读取结果与参考基因组进行比较,可以发现测序错误。然而,这种参考并不总是可用的。当序列是随机的或来自未知源时,聚类是纠正错误的主要策略。例如,当使用随机条形码跟踪单元格或抄本时,会出现这种情况(阿赫塔., 2013;舍佩尔斯et(等) ., 2008). 排序错误会产生错误的(不存在的)条形码,必须删除。

序列聚类可以看作是图上的社区检测问题,其中节点表示序列,边表示相关序列之间的匹配。该过程由一个匹配阶段(计算最密集的阶段)和一个集群阶段组成,在这两个阶段中构建图形,并识别社区。

在这里,我们描述了一种称为“星码”的序列聚类算法,该算法参考了随机条形码的簇,它们通常具有星形。Starcode基于全对搜索,即在图构建阶段识别给定Levenshtein距离以下的所有序列对。匹配通过无损过滤进行,然后对前缀trie的分支进行穷举搜索。该算法的新颖之处在于poucet策略,它使用按字母排序的序列的冗余来避免不必要的重新计算和提高速度。

在本文中,我们介绍了星码并对其进行了基准测试。我们表明,在真实的生物数据集上,星码比现有的序列聚类软件快几个数量级。尽管星码是为纠错而设计的,但我们也表明它可以用于其他问题。作为一个例子,我们用它来识别细菌基因组和蛋白质-RNA相互作用实验中的丰富基序。

2方法

2.1使用tries进行不精确字符串匹配

星码匹配方法基于Needleman–Wunsch(NW)算法的变体(Needleman和Wunsch,1970年). 在原始算法中(图1a) ,两个序列之间的Levenshtein距离是通过在整个矩阵中应用递归关系来确定的术语(编辑矩阵),其中n个是各自的序列长度。这种动态编程方法的复杂性是O(运行)().

保存图片、插图等的外部文件。对象名称为btv053f1p.jpg

NW层序比较。()GTTGCA和GATCCA的比较。使用NW动态规划算法初始化编辑矩阵的边距,并从左到右和从上到下计算单元。E类[j个],坐标项(,j个)计算为min(E类[−1j个] + 1, E类[j个 − 1] + 1, E类[−1j个 − 1] + Δ(j个)),其中Δ(j个)=0,如果第一个序列中的第th个符号与j个第二个符号和Δ(j个)否则=1。两个序列之间的Levenshtein距离是右下角单元格的值。(b条)用于确定GTTGCA和GATCCA是否为2匹配的较低复杂度算法。外部单元格中的值在初始化期间设置。动态编程算法如上所述进行,不同的是,如果对角线单元格(粗体边框)的值大于2,则中止该算法。初始化单元格中的值可能与原始NW方案(箭头)不同,但计算单元格中的数值仍然相同。从不计算空单元格的值,这有助于降低复杂性

在许多情况下,感兴趣的信息是找出序列是否为τ-匹配(即其距离小于或等于固定阈值τ)。在这种情况下,复杂性可以降低到O(运行)(τ最小值(n个)). 它不是计算编辑矩阵的所有项,而是按如下所示进行初始化图1并且只计算对角线周围的项。如果对角线项的值大于τ,则该过程将停止,因为序列不是τ-匹配。

此方法可用于根据前缀树(也称为trie)匹配序列(Ukkonen,1995年). 编辑矩阵的术语沿行更新,而深度优先搜索遍历trie(图2). 每次访问节点时,都会计算一行,每次搜索回溯时,都将删除一行。如果对角线项超过阈值τ,则所有下游序列的Levenshtein距离也必然大于τ。因此,在该路径中不会发现更多点击,深度优先搜索将回溯到父节点。当进程停止时,此搜索路径上的每个尾部节点(对应于数据库序列)都是查询的τ-匹配。此方法非常有效,因为它消除了搜索空间中的大片区域,并且查询与数据库每个前缀的NW比较只计算一次。

保存图片、插图等的外部文件。对象名称为btv053f2p.jpg

尝试NW算法。索引的每个序列都是trie中的一条路径图1b.通过深度优先搜索(以箭头结束的路径)遍历trie。在每个深度,添加到路径中的节点都写在编辑矩阵的左侧,并计算该行。从1到4的检查点(带圆圈的数字)显示搜索过程中编辑矩阵的状态。标记为3的节点是一个叶子,因此对应于查询的2个匹配。发现命中后,搜索路径将回溯到标记为2的节点,并删除编辑矩阵的最后一行。然后搜索路径到达标记为4的节点,在这种情况下,新计算的对角线单元格超过阈值(圈选)。即使此节点有子节点,也不会访问它们(交叉),因为没有要发现的2-匹配

2.2 poucet搜索算法

搜索策略可以进一步改进。如果两个连续查询共享一个长度为的前缀k个,计算的连续性k个对于这两个查询,编辑矩阵的第行将完全相同。因此,计算中间体可以存储在trie的节点中,以便下一个trie搜索可以从深度开始k个然而,将编辑矩阵的行存储在节点中会遇到一些困难。的确,在k个第行,对角线右侧的术语取决于两个查询之间不共享的字符。这个问题可以通过在每个节点中存储行和列术语的组合来解决,这些术语形成一个角度形状,看起来像水平翻转的L(图3). 使用此结构,计算中间层存储在深度节点中k个只取决于第一个k个查询的字符。

保存图片、插图等的外部文件。对象名称为btv053f3p.jpg

Poucet搜索算法。该算法遵循与上所示相同的原理图2不同的是,编辑矩阵不是沿行更新,而是沿水平翻转的L更新。随着深度第一次搜索的继续,这些值存储在trie的节点中。由于翻转的L的垂直部分中的值对于节点的每个子节点都是相同的,因此只计算一次(箭头)。搜索路径访问节点时,将计算灰色单元格中的值。将中间产物存储在节点中可以让下一个查询在深度上重新启动k个如果它共享一个通用的长度前缀k个使用当前查询

为了充分利用此属性,输入序列按字母顺序排序,从而最大化连续查询之间的前缀共享。在童话故事《小普塞》中,主人公撒下白色鹅卵石,让哥哥们回家,这让人联想到一个较小的查询(按字母顺序)为下一个查询铺平了道路。因此,我们将此搜索算法称为“poucet”。

2.3无损过滤

当查询没有匹配项时,最好省略trie搜索。为此,starcode使用与下面描述的类似的分区方法Wu和Manber(1992)。查询最初以τ为单位进行分区 + 1段。假设所有片段的长度至少为τ,那么数据库中存在的每个τ-匹配将至少包含一个查询片段的逐字副本。事实上,在查询和要以τ分布的匹配之间最多有τ版本 + 1个区域,因此至少有一个段未修改。由于前面片段中可能存在插入和删除,共享片段可能会从其在查询中的原始位置向上移动到左侧(所有插入)或右侧(所有删除)的τ核苷酸。

这些观察结果是100%灵敏度过滤方法的基础。更准确地说,片段的定义如下:序列的第一个τ核苷酸被删除,序列的其余部分被划分为τ + 1段尺寸相差不超过1(为了一致性,较长的段总是在3'处)。每次向trie中添加序列时,都会对其进行分区,并将其分段添加到τ中 + 1个不同的索引。第一个片段被添加到第一个索引,第二个片段被添加到第二个索引,等等。在搜索之前,以相同的方式对查询进行分区,并在索引中查找其片段。如果没有找到匹配,则此查询在当前数据库中没有τ-匹配,因此省略trie搜索。相反,如果至少找到一个段,则必须执行trie搜索。

如上所述,可以发现查询和τ-匹配之间共享的片段向上移动为τ核苷酸。因此,根据图4,确保不会错过任何匹配:在τ中查找最右边的段 + 在τ-th指数中查找第一个指数、第二个最右边的段和移动了一个核苷酸的相邻段,依此类推,直到在第一个指数中查找移动了最多τ个核苷酸的第一个段及其相邻段。

保存图片、插图等的外部文件。对象名称为btv053f4p.jpg

长度为20且τ为 = 3.删除查询的最后τ核苷酸,其余的被分为四个连续段。每个系列都根据编号为I–IV的不同索引进行查询。例如,针对索引I查询的唯一段是GTTG,而针对索引II查询的段是GCAA、CAAT和AATA。如果在适当的索引中找到任何一个段,则执行trie搜索,否则将忽略它,因为可能没有τ-匹配。无论结果如何,标记为I–IV的段都会添加到相应的相应索引中(即每个索引中只添加一个段)

2.4寻找和构建

为了减少搜索空间的大小,starcode使用了一种动态的“查找和构造”方法,在处理查询的同时构建trie。换句话说,每个序列在插入之前都会与trie进行匹配。如果A和B是相互τ-匹配的,则当B在trie中时将查询A,反之亦然。无论哪种方式,都会发现匹配的A-B。这样可以确保发现每个τ-匹配,同时尽可能保持trie的“瘦”,从而减少搜索时间。算法1和2所示的伪代码总结了整个匹配过程。

算法1星码算法-

1:定义:τ

2:变量: 种子,开始 = 0,高度,序列,特里,lastseq公司,k个

三:容器: 击打,鹅卵石

4:阅读序列文件

5:小时e(电子)小时t吨  决定最大序列长度

6:衬垫序列最多高度

7:分类按字母顺序排列

8:k个  计算过滤器段长度

9:t吨第页e(电子)  创造空虚的身高高度

10:插入的根节点特里在里面鹅卵石深度0

11:为所有人序列

12:e(电子)q个  得到下一个序列

13:如果至少一个k个-的mer序列位于筛选器索引中然后

14:e(电子)e(电子)d日  长度当前序列和下一序列之间的共享前缀

15:t吨第页t吨  长度之间共享前缀的序列lastseq公司

16:清楚的击打

17:清楚的 鹅卵石深度>t吨第页t吨

18:为所有人 鹅卵石在深度开始

19:n个o个d日e(电子)  得到下一个节点鹅卵石

20:呼叫 水龙头(序列,节点,种子,击打,鹅卵石)

21:结束

22:过程 击打链接匹配到序列

23:t吨e(电子)q个  e(电子)q个

24小时:结束条件为

25日:插入 序列路径在特里

26:插入 序列k-mers进入过滤器索引

27:结束

算法2 Poucet搜索算法-

1:程序 水龙头(查询,节点,种子,击打,鹅卵石):

2:计算 节点-NW后面的特定列图1

三:3:为所有人 小孩中的节点节点

4:计算 小孩-NW后面的特定行图1

5:5:计算使用行和列的中心值图1

保存图片、插图等的外部文件。对象名称为btv053f5p.jpg

可扩展性。()运行时间的对数与待聚类序列数的对数。(b条)运行时间是聚类距离的函数。(c(c))运行时间与输入序列的长度。(d日)不同数量的并行线程的相对性能提高

6:6:如果中心值>τ 然后超过不匹配。

保存图片、插图等的外部文件。对象名称为btv053f6p.jpg

已知集群结构的人工数据集的基准测试结果(见正文)。()通过已识别簇的数量来测量精确度。星码识别正确的簇数,而种子和cd-hit识别每个真阳性约40个假阳性。绘制了第一个平分线,并指示了完美的结果。(b条)通过识别对的数量测量精度。Slidesort识别的对比星码少5-10%。水平线表示比率为1。(c(c))不同工具的运行时间。随着集群的大小,星码的运行时间增加,但仍具有竞争力。(d日)不同工具的内存使用情况。星码的内存使用量随着集群大小的增加而减少。

7:持续与下一个小孩

8:结束 如果

9:如果 节点深度 = 高度 然后找到命中。

10:节约 节点中的顺序击打

11:持续与下一个小孩

12:结束 如果

13:如果 节点深度≤e(电子)e(电子)d日 然后

14:节约 节点在里面鹅卵石在当前深度

15:结束 如果

16:呼叫水龙头(查询,小孩,种子,击打,鹅卵石)

17:结束 对于

18:结束 程序

2.5并联

查询在连续的块中进行排序和分区。然后,匹配步骤分两个阶段进行。在构建阶段,根据上述算法,从每个块的序列构建不同的trie。在第二种情况下,针对所有其他尝试查询所有序列块。如果查询在中进行分区N个块,第一阶段包括N个寻找和构建工作,而第二个工作包括N个(N个−1)/2个查询作业。在每个阶段,作业之间没有相互依赖性,因此匹配算法可以有效地并行化N个大于独立线程的数量。

2.6聚类

星码的默认聚类算法是为了纠正排序错误而设计的。此方法使用消息传递(麦凯,2002年)识别和统计“规范”序列(在聚类术语中也称为质心)。默认情况下,每个序列都会将其读取计数转移到最接近的τ-匹配,前提是后者的计数至少多出五倍。如果不满足条件,则不会进行转移。如果序列有多个相等接近的τ-匹配,则计数在它们之间平均分配。该过程以递归方式重复,从读取计数最低的序列开始。在过程结束时具有正读取计数的序列被认为是规范的。簇由所有将其读取计数转移到同一规范序列的序列组成(将其读取数转移到不同规范的序列被丢弃)。请注意,簇的半径可以大于用于匹配的最大距离。

由于没有任何测序技术的错误率高于20%,预计测序错误产生的序列的读取计数将始终是标准序列的五倍或更低。否则,序列很可能是不相关的,或者两者都是从同一个规范序列派生的。可以使用命令行选项修改此行为群集比率允许更灵活或更严格的聚类,例如将唯一的输入序列聚类在一起,群集比率必须设置为1。

对于其他序列聚类问题,starcode实现了一种称为“球体聚类”的多用途算法。在球体聚类中,序列按出现频率排序。从最常见的序列开始,每个序列都成为规范序列并声明其所有τ-匹配,从而形成半径τ的簇(因此而得名)。声明的序列会立即删除,因此它们只能属于一个簇。

2.7基准条件

所有测试都是在16核双处理器Intel Xeon E5-2687W v2系统上进行的,该系统具有256个处理器1866年的GB DDR3-RAM马赫。所有软件中的命令行参数都被等效设置为以单核模式运行,允许长度为50的输入序列出现最多三个不匹配。表1和22分别总结仿真数据集和实际数据集中使用的执行选项。

表1。

仿真基准测试中使用的软件执行选项

软件命令行选项
星码-1.0星号 -第3页
幻灯片排序-2幻灯片排序v2 -d日 3 -吨 E类 -c(c) DNA
Cd-hit-est-4.6.1cd命中est -n个 9 -c(c) 0.9 -M(M) 0 -第页 0
种子-1.4.1种子 –不匹配 3

表2。

实际数据基准测试中使用的软件执行选项

软件命令行选项
星码-1.0星号 -第3页
幻灯片排序-2幻灯片排序v2 -d日 3 -u个 -吨 E类 -c(c) DNA
Cd-hit-est-4.6.1cd命中est -n个 8 -c(c) 0.94 -M(M) 0
种子-1.4.1种子 –不匹配 3 –轮班 3
彩虹-2.0.3彩虹 集群 -米 3

3结果

3.1演示和基本性能

Starcode是一种通用的DNA序列聚类工具,重点关注错误纠正。错误被假定为不匹配、插入或删除(此处显示的实现与最多八个错误的序列相匹配)。输入序列可以是单个或成对读取,上限为1024个核苷酸(成对端为512个)。序列可能是可变长度的,它们可能会被修剪和过滤以保证质量。与星码兼容的文件格式包括原始序列、带计数的原始序列、FASTA或FASTQ(在这种情况下,星码会忽略质量)。Starcode要么返回聚类结果的详细信息,即规范序列、聚类大小及其组成序列的完整列表。或者,只打印规范序列,这有助于从输入文件中筛选出冗余序列。默认情况下,聚类是在假设实验错误(测序错误、聚合酶链反应突变等)会产生差异的情况下进行的,对于其他聚类问题,也可以使用更通用的算法(第3.3节给出了一个例子)。

我们展示了星码在伪随机序列数据集上的基本性能和可伸缩性(图5). 标准配置是一组1000000个长度为40的序列,在一条线上运行,最大Levenshtein距离为3。在每次测试中,只修改一个参数,而其他参数保持不变。由于聚类步骤不需要额外的内存分配,并且比全对搜索快得多,因此第3.1和3.2节中给出的性能结果适用于消息传递和球体聚类算法。

图5a显示星码的运行时间,作为输入序列数的函数n个在双对数尺度下,趋势是一条斜率为1.5的直线,这表明星码的运行时间复杂度低于二次型(所有对搜索的朴素实现)。请注意,此数据集的序列没有匹配项,请参阅第3.2节,以评估更真实的数据集的性能。图5b表明,运行时间随用于聚类的最大Levenshtein距离呈指数增长。原因是trie呈指数扇出,随着最大距离的增加,搜索在更大深度上退出。作为序列长度的函数,运行时间首先增加,然后急剧下降并保持在较低水平(图5c) ●●●●。超过阈值长度后,过滤算法开始变得高效,大多数查询都是在不搜索trie的情况下解决的图5d.搜索算法是完全并行的,并且相对性能线性地增加到12个线程。此后观察到的弯曲有两个来源;第一是输入读取和聚类步骤很短,但不是并行的,第二是由于硬件限制,即内存带宽不足,无法满足并行内存访问增加的需求。

3.2基准

我们根据序列聚类算法slidesort对星码进行了基准测试(清水和津田,2011年),种子(et(等) 阿尔。, 2011),彩虹(Chong(冲)et(等) 阿尔。, 2012)和cd-hit(et(等) 阿尔。, 2012). 尽管slidesort是一种全对搜索算法,但它包含在基准测试中,因为序列比较是序列聚类问题中计算量最大的步骤。Rainbow只在配对读取上运行,而其他工具在单个读取上运行。因此,所有工具都不能在同一个数据集上运行。

序列聚类算法的性能对数据集中簇的大小很敏感,在许多应用中,簇的大小是未知的。因此,我们在人工数据集上建立了一个基准,以测试工具在已知簇结构上的准确性和伸缩性。我们生成了四个数据集,共有100万50万人,分布在1到1000个集群中。每个星团由相同质心序列的100个重复组成,再加上通过合并三个误差(最多一个indel)从质心衍生的卫星。每个集群的卫星数量从999颗不等900至900。Rainbow没有在此基准测试中进行测试,因为生成的数据是单次读取。此外,评估slidesort的准确性存在问题,因为每个数据集中3个匹配的数量未知(同一集群中的卫星对可能是3个匹配,也可能不是)。由于这个原因,我们只比较了星码找到的对的数量和slidesort找到的对数量。测试结果总结如下图6.

虽然starcode在所有四个数据集上都实现了完美的聚类,但通过seed和cd-hit实现的聚类是不完整的。这两种工具在所有数据集的每个真实集群上都可以识别大约40个假集群(图6a) 。我们还观察到,slidesort在所有数据集中找到的3个匹配项比starcode少5-10%(图6b) ●●●●。我们对这个结果感到惊讶,因为slidesort被认为是一个精确的算法。然而,当我们在较小的数据集上运行额外的测试时,情况显然不是这样,在这些数据集上,朴素的两两比较是可行的(有关星码存储库的更多信息,请参阅http://github.com/gui11aume/starcode/tree/master/misc).

不同工具的运行时间与集群大小的函数如所示图6c.slidesort和starcode的运行时间分别显示线性和亚线性趋势。种子和cd-hit大约在恒定时间内运行,与集群大小无关。尽管有这样的结果,星码的性能仍然具有竞争力,即使对于100万个序列的集群也是如此。内存使用情况如所示图6c.通过slidesort和cd-hit实现最小内存占用,与其他工具的最大差异为一个数量级。请注意,与slidesort进行比较并不完全公平,因为它没有在内存中保存集群所需的完整图形。对于1000大小的集群,星码的内存使用率最高,但随着集群大小的增加,星码内存使用率会降低,并低于种子的内存使用量。总之,星码是以增加内存占用为代价在这些数据集上实现完美精度的唯一工具。考虑到输出的准确性,星码在运行时间方面保持了具有竞争力的性能。

人工数据的性能并不总是与实验数据集的性能一致。典型的实验带来了额外的困难。例如,集群的大小可能不均匀,读取可能包含近似恒定的区域,这些区域通常会降低基于过滤器的算法的性能。我们对序列聚类算法进行了基准测试,以解决将数千名记者聚集在并行(TRIP)条码中的问题(阿赫塔et(等) 阿尔。, 2013). 简言之,TRIP的原理是用随机条形码标记报告转录本,并测量RNA中条形码的丰度,作为基因表达的代理。由于标签序列未知,因此没有参考来匹配异常条形码。

用于基准测试的数据集的基本属性总结如下表3。已对数据集1(SRR950457)进行预处理,以提取条形码并删除读取的常量部分。文件中仅包含15到17个核苷酸之间的条形码。数据集2(PRJEB7686)由原始Illumina单次读取组成。这些数据集因读取大小、总读取计数和经验簇大小而异。根据starcode的输出,数据集1的最大集群包含大约70个000个序列,而数据集2包含四个具有超过100万个序列的簇。数据集3(SRR950477)已被包括在内,用于在成对聚类模式下根据彩虹对星码进行基准测试。

表3。

用于基准测试的生物数据集摘要

数据集读取计数读取长度类型
950457斯里兰卡卢比654230916±1单个
PRJEB7686型12767553750单个
950477斯里兰卡卢比2460226100 + 100成对端

所有数据集都是Illumina读取的。

starcode、seed、slidesort、rainbow和cd-hit的运行时间总结如下表4。我们调整了第一个数据集的距离阈值,以补偿减少的序列长度。starcode和slidesort都是使用选项“-d日 2'而cd-hit的标识设置为'-c(c) 0.85’. 由于最小序列长度的限制,我们无法在数据集1上运行seed。Starcode在所有数据集上都比其他工具快得多。Seed和cd-hit位居第二,在数据集1和2上的运行时间分别约为35倍和20倍。Rainbow在成对读取的集群工作中几乎慢了一个数量级。我们没有记录过去10天的准确运行时间,因为这比星际码的运行时间高几个数量级。

表4。

软件在三个生物数据集上的运行时间(秒)

软件950457斯里兰卡卢比PRJEB7686型950477斯里兰卡卢比
星码5289844
种子60374
幻灯片排序4055>10天
彩虹306
Cd-hit-est公司170512591

过去10天没有记录确切的运行时间。破折号表示软件无法用于此数据集。

相同数据集上不同工具的内存占用如所示表5。这些值表示在上述数据集上运行的整个过程中的峰值内存使用量。在短读(数据集1)中,starcode利用trie压缩优于其他工具。在数据集3上,星码的内存使用量明显大于彩虹。Starcode和cd-hit在数据集2上使用了相似的内存量。两者所需的内存是slidesort的两倍,slidesoort的优点是在全对比较期间不存储完整的图形。

表5。

内存使用率(GB)

软件950457斯里兰卡卢比PRJEB7686型950477斯里兰卡卢比
星码0.6530.95.2
种子53.9
幻灯片排序1.3013.9
彩虹0.5
Cd-hit-est公司0.8028.5

3.3鉴定富集序列基序

作为一种序列聚类算法,星码还可以用于其他应用,例如识别丰富的基序。序列基序被认为在DNA代谢中起着重要作用。关键调控因子,如转录因子、核小体和非编码RNA具有针对其作用位点的序列偏好。识别这些序列是查明调控因子及其参与机制的一种方法。然而,序列基序在不同的位点并不完全相同,因此通过不精确的匹配可以更好地识别它们。由于组合缩放,对于长基序(大于12–13个核苷酸),这个问题变得很难计算。

我们根据脑膜炎致病菌进行了测试脑膜炎奈瑟菌这种细菌的基因组中散布着一个常见的12bp序列称为DNA摄取序列(史密斯et(等) 阿尔。, 1999). 我们从2.19的两个方向提取了12-mersMb基因组,产生439万个12 mers,由277万个独特序列组成。将12个mers与Levenshtein距离为2的星码进行聚类,我们确定了已知的DNA摄取序列N。脑膜炎(ATGCCGTCTGAA)作为最丰富的12 mer,准确命中1466次,不准确命中2096次。这一结果证明了星码可以用于识别细菌基因组中与生物学相关的基序。

为了在另一个应用程序上测试星码,我们使用了RNA竞争产生的RNA–蛋白质相互作用数据(et(等) 阿尔。, 2009). 哺乳动物剪接因子SRSF1已知能结合富含RNA GA的基序,但对其识别的基序存在一些分歧(潘迪特et(等) 阿尔。, 2013). 对于RNA竞争数据集中的每个人类SRSF1复制,我们用其秩替换微阵列信号,并从微阵列探针中提取10个单体。10个mers的得分与它们所属探针的等级相等,使用最大Levenshtein距离为2的星码球形聚类发现了丰富的基序。因此,最富集的10-mer的分数是该距离内所有10-mer等级的总和。在这六个重复中,最富集的10-mers是AGGACACGGA、AGGACAGGA、AGAGGAGG、AGGACGGAG、AGGA CACGGA和AGGATACGG。除了最后一个复制品外,图案由AGGAC和GGA组成,间隔物长度可变。这表明SRSF1与RNA的结合可能涉及一个间隔序列,这可以解释来自6或7倍体的基序之间的差异。

4讨论和结论

Starcode是一种基于全对匹配的序列聚类算法。它实现了高精度,并且在实验数据集上,它可以比流行的启发式算法更快。通过设计,starcode可以在具有足够内存的多核平台上处理高通量测序数据。由于其卓越的精度和更快的运行时间,它通过充分利用中高端硬件,填补了可用软件之间的空白。

令人有些惊讶的是,在实验数据集上,starcode明显快于竞争工具,而在人工数据集上,seed和cd hit更快。Starcode是根据TRIP实验数据集开发的,选择poucet搜索以获得最佳的实证结果。我们推测,与伪随机读取相比,trie结构受益于实验数据中通常观察到的熵赤字。

星码的速度和精度也使其适用于其他聚类任务,例如在微生物基因组和实验数据中识别富集的基序。这里,我们给出了这类应用的两个示例。首先,我们在N。脑膜炎在第二部分中,我们恢复了人类RNA结合蛋白SRSF1的基序,并注意到它似乎由一个连接子分隔的两半组成。这个假设与SRSF1通过两个已知能连续结合3-4个核苷酸的连续RNA-再认识基序结合RNA的事实相一致(多布内et(等) 阿尔。, 2013). 与位置权重矩阵表示法相比,包含插入和删除的Levenshtein距离更有可能捕获双部分绑定主题。使用聚类方法来解决这个问题是不寻常的,但它说明了基于距离的方法的潜在优势。

星码似乎比其他工具更快的原因之一是,它被设计成集群相对相似的序列。当聚类相关序列时,Levenshtein距离必须增加,导致运行时间呈指数增长(图5b) ●●●●。然而,对于纠正由测序引入的错误这一重要的实际案例,starcode表明,仍有空间开发比当前技术更快、更准确的算法。

致谢

我们要感谢玛丽亚·查卓(Maria Chatzou)对初稿的宝贵反馈,并感谢陈恒昌(Heng-Chang Chen)执行了果蝇属TRIP实验。

基金

这项研究得到了加泰罗尼亚政府(经济和知识部)和西班牙经济和竞争力部国家计划BFU2012-37168(Centro de Excelencia Severo Ochoa 2013-2017)的支持(SEV-2012-0208). P.C.奖学金得到了西班牙经济和竞争力部的部分支持【国家培训子计划:2013年博士生培训学前奖学金(FPI)】。

利益冲突:未声明。

工具书类

  • Akhtar W.等人(2013年)。数以千计的记者平行分析染色质位置效应.单元格 , 154, 914–927. [公共医学][谷歌学者]
  • 鲍毅等(2011)。SEED:下一代序列的高效聚类.生物信息学 , 27, 2502–2509.[PMC免费文章][公共医学][谷歌学者]
  • Chong Z.等(2012)。Rainbow:一个集成工具,用于高效集群和组装RAD-seq读取.生物信息学 , 28, 2732–2737. [公共医学][谷歌学者]
  • Daubner G.M.等人(2013年)。RRM-RNA识别:核磁共振或结晶学和新发现.货币。操作。结构。生物。,23, 100–108. [公共医学][谷歌学者]
  • Dom J.C.等人(2008年)。高通量DNA测序的超短读数据集中的重大偏差.核酸研究。,36,e105。[PMC免费文章][公共医学][谷歌学者]
  • Eid J.等人(2009年)。单聚合酶分子实时DNA测序.科学类 , 323, 133–138. [公共医学][谷歌学者]
  • Fu L.等人(2012年)。CD-HIT:加速下一代测序数据的聚类.生物信息学 , 28, 3150–3152.[PMC免费文章][公共医学][谷歌学者]
  • 麦凯D.J.C.(2002)。信息理论、推理和学习算法剑桥大学出版社,纽约。[谷歌学者]
  • Margulies M.等人(2005年)。微加工高密度微柱反应器中的基因组测序.自然 , 437, 376–380.[PMC免费文章][公共医学][谷歌学者]
  • Nakamura K.等人(2011年)。Illumina测序仪的序列特定误差曲线.核酸研究。,39,e90。[PMC免费文章][公共医学][谷歌学者]
  • Needleman S.B.,Wunsch C.D.(1970年)。一种适用于寻找两种蛋白质氨基酸序列相似性的通用方法.分子生物学杂志。,48, 443–453. [公共医学][谷歌学者]
  • Pandit S.等人(2013年)。全基因组分析揭示了SR蛋白在调控剪接中的合作与竞争.分子电池 , 50, 223–235.[PMC免费文章][公共医学][谷歌学者]
  • Ray D.等人(2009年)。RNA-结合蛋白RNA识别特异性的快速系统分析.自然生物技术。,27, 667–670. [公共医学][谷歌学者]
  • Schepers K.等人(2008年)。用细胞条形码分析T细胞谱系关系.实验医学学报,205, 2309–2318.[PMC免费文章][公共医学][谷歌学者]
  • Shimizu K.、Tsuda K.(2011年)。SlideSort:针对短读的所有配对相似性搜索.生物信息学 , 27, 464–470.[PMC免费文章][公共医学][谷歌学者]
  • Smith H.O.等人(1999年)。自然转化细菌的DNA摄取信号序列.研究微生物。,150, 603–616. [公共医学][谷歌学者]
  • Ukkonen E.(1995)。后缀树的在线构造.算法 , 14, 249–260.[谷歌学者]
  • Wu S.、Manber U.(1992年)。快速文本搜索:允许出现错误.Commun公司。ACM公司 , 35, 83–91.[谷歌学者]

文章来自生物信息学由以下人员提供牛津大学出版社