2方法
2.1前缀trie和字符串匹配
字符串的前缀trieX(X)是一棵树,其中每条边都用一个符号标记,并且从叶子到根的路径上的边符号的字符串串联给出了一个唯一的前缀X(X)。在前缀trie上,从节点到根的边缘符号的字符串串联提供了一个唯一的子字符串X(X),调用节点表示的字符串。注意,前缀trieX(X)与反向的后缀trie相同X(X)因此后缀trie理论也可以应用于前缀trie。
使用前缀trie,测试查询W公司是的精确子字符串X(X)相当于查找表示W公司,可以在中完成O(运行)(|W公司|)通过匹配中的每个符号W公司从根部开始到边缘。为了允许不匹配,我们可以遍历trie并匹配W公司到每一条可能的路径。我们稍后将展示如何使用前缀信息来加速此搜索W公司。给出了前缀trie for的示例GOOGOL公司’. 每个节点中的后缀数组(SA)间隔如所示第2.3节。
字符串的前缀trieGOOGOL公司’. 符号∧表示字符串的开始。节点中的两个数字给出了节点表示的字符串的SA间隔(参见第2.3节). 虚线显示强力搜索查询字符串的路径英雄联盟',最多允许一个不匹配。方块中的边缘标签标记搜索中查询的不匹配项。唯一命中的是表示字符串“高尔夫球’.
2.2 Burrows–Wheeler变换
设∑为字母表。符号$在∑中不存在,并且在词典上小于∑中的所有符号。一根绳子X(X)=一0一1…一n个−1总是以符号$结尾(即。一n个−1=$),此符号仅显示在末尾。让X(X)[我]=一我,我=0, 1,…,n个−1,成为我-的第个符号X(X),X(X)[我,j个]=一我…一j个子字符串和X(X)我=X(X)[我,n个−1]后缀X(X).后缀数组S公司属于X(X)是整数0的置换…n个−1使得S公司(我)是的开始位置我-第th个最小后缀。的BWTX(X)定义为B类[我]=$时S公司(我)=0和B类[我]=X(X)[S公司(我)−1]否则。我们还定义字符串的长度X(X)作为|X(X)|因此|X(X)|=|B类|=n个。给出了一个如何构造BWT和后缀数组的示例。
为构造后缀数组和BWT字符串X(X)=古戈尔$.字符串X(X)循环生成七个字符串,然后按字典顺序排序。排序后,第一个符号的位置形成后缀数组(6、3、0、5、2、4、1),循环字符串的最后一个符号的串联给出BWT字符串瞧$oogg。
算法如所示在时间和空间上是二次的。然而,这并不是必须的。实际上,我们通常先构造后缀数组,然后生成BWT。大多数构造后缀数组的算法至少需要n个⌈日志2n个⌉位工作空间,相当于人类基因组的12GB。最近,尊敬的等人。(2007)给出了一种新的算法n个位的工作空间,在构建人类基因组的BWT的峰值时间只需要<1GB的内存。该算法在BWT-SW(Lam)中实现等人。,2008). 我们修改了它的源代码,使其能够与BWA一起工作。
2.3后缀数组间隔和序列对齐
If字符串W公司是的子字符串X(X),每次出现的位置W公司在里面X(X)将以后缀数组中的间隔出现。这是因为所有具有W公司因为前缀是一起排序的。基于这一观察结果,我们定义:
特别是,如果W公司是空字符串,R(右)(W公司)=1和.间隔被称为SA间隔属于W公司和所有事件的位置集W公司在里面X(X)是。例如,字符串的SA间隔'去'是[1,2]。此间隔中的后缀数组值为3和0,它们给出了“”的所有出现位置去’.
知道后缀数组中的间隔,就可以得到位置。因此,序列比对相当于搜索X(X)与查询匹配的。对于精确匹配问题,我们只能找到一个这样的区间;对于不精确匹配问题,可能会有很多。
2.4精确匹配:反向搜索
让C类(一)是中的符号数X(X)[0,n个词法上小于一∈∑和O(运行)(一,我)出现的次数一在里面B类[0,我]. 费拉吉纳和曼奇尼(2000)证明如果W公司是的子字符串X(X)以下为:
还有那个当且仅当哦是的子字符串X(X)。此结果可以测试W公司是的子字符串X(X)并计算W公司在里面O(运行)(|W公司|)迭代计算时间R(右)和从的结尾W公司。此过程称为向后搜索。
需要注意的是,方程式(三)和(4)实际实现对前缀trie的自顶向下遍历X(X)假设我们知道父节点的时间间隔,就可以在恒定时间内计算子节点的SA时间间隔。从这个意义上说,反向搜索相当于对前缀trie进行精确的字符串匹配,但没有将trie显式地放入内存中。
2.5不精确匹配:有界遍历/回溯
给出了一个递归算法来搜索X(X)与查询字符串匹配的W公司不超过z(z)差异(不匹配或差距)。本质上,该算法使用反向搜索从基因组中抽取不同的子串。此过程受D类(·)数组,其中D类(我)是W公司[0,我]. 更好的D类被估计,搜索空间越小,算法的效率就越高。通过设置D类(我)全部=0我,但由此产生的算法在差异数量上明显是指数级的,效率会更低。
匹配子串SA区间的非精确搜索算法W公司.参考X(X)$已终止,而W公司A/C/G/T终止。程序I关系S公司耳朵(W公司,z(z))返回匹配的子字符串的SA间隔W公司不超过z(z)差异(不匹配或差距);我nex(连接)R(右)担保(W公司,我,z(z),k个,我)递归计算匹配的子字符串的SA间隔W公司[0,我]不超过z(z)后缀条件的差异W公司我+1匹配间隔[k个,我]. 以星号开头的行用于插入和删除X(X)分别是。D类(我)是字符串差异数的下限W公司[0,我].
C类计算中的D程序给出了一个更好的边界,尽管不是最优的。它在概念上等同于,这更容易理解。我们使用反向(非补码)引用序列的BWT来测试W公司也是的子字符串X(X)注意,要使用BWT字符串进行此测试B类只有C计算D和O(运行)(|W公司|2)程序,而不是O(运行)(|W公司|)如中所述。
了解D类,我们回到搜索W公司=英雄联盟在里面X(X)=GOOGOL公司$(). 如果我们设置D类(我)全部=0我和不允许间隙(删除算法中的两条星形线),I的调用图nex(连接)R(右)担保,它是一棵树,有效地模拟了中显示为虚线的搜索路线。但是,使用C计算D、 我们知道这一点D类(0)=0和D类(1)=D类(2)=1. 然后我们可以避免下降到“G公司'和'O(运行)'前缀trie中的子树以获得更小的搜索空间。
中的算法保证找到允许最大值的所有间隔z(z)差异。它在理论上是完整的,但在实践中,我们也做了各种修改。首先,我们对不匹配、缺口开放和缺口扩展支付不同的惩罚,这对生物数据更为现实。其次,我们使用类堆的数据结构来保持部分命中,而不是使用递归。类堆结构的优先级取决于部分命中的对齐分数,以使BWA始终首先找到最佳间隔。同时处理反向补码读取序列。请注意,中描述的递归有效模拟前缀trie上的深度优先搜索(DFS),而BWA使用这种堆状数据结构实现宽度优先搜索(BFS)。第三,我们采用迭代策略:如果顶部间隔是重复的,我们默认不搜索次优间隔;如果顶部间隔是唯一的,并且z(z)不同的是,我们只搜索高达z(z)+1个差异。这种迭代策略加速了BWA,同时保留了生成映射质量的能力。然而,这也使得BWA的速度对读取和引用之间的不匹配率非常敏感,因为查找差异较大的命中率通常较慢。第四,我们允许对一次读取的前几十个碱基对中允许的最大差异设置一个限制,我们称之为种子顺序。给定70 bp的模拟读取,32 bp种子中最大两个差异的对齐速度比不播种快2.5倍。对准误差率,即模拟中自信映射中错误对准的分数(另请参见第3.2节),仅从0.08%增加到0.11%。种子对较短的读取效果较差。
2.6减少内存
上述算法需要加载发生数组O(运行)和后缀数组S公司在内存中。拿着满满的O(运行)和S公司数组需要巨大的内存。幸运的是,我们可以通过只存储O(运行)和S公司数组,并在运行中计算其余部分。BWT-SW(兰等人。,2008)和鲍蒂(兰米德等人。,2009)使用费拉吉纳和曼奇尼首次引入的类似策略(2000)。
给定基因组大小n个,引用数组O(运行)(·,·)需要4个n个⌈日志2n个⌉位,每个整数取⌈log2n个⌉位,共4位n个在数组中。实际上,我们存储在内存中O(运行)(·,k个)的k个这是128的因子,并使用BWT字符串计算其余元素B类.当我们用两个位表示核苷酸时,B类需要2个n个位。因此,向后搜索的内存为2n个+n个⌈日志2n个⌉/32位。由于我们还需要存储反向基因组的BWT来计算界限,因此计算间隔所需的内存增加了一倍,对于一个3 GB的基因组,大约需要2.3 GB。
枚举每个出现的位置需要后缀数组S公司如果我们把整个S公司在内存中,它将使用n个⌈日志2n个⌉位。然而,也可以重建整个S公司事实上,S公司和反向压缩后缀数组(反向CSA)Ψ−1(格罗西和维特,2000)满足:
其中(Ψ−1)(j个)表示重复应用变换Ψ−1对于j个次。逆CSAΨ−1可以使用引用数组计算O(运行)以下为:
在BWA中,我们只存储在内存中S公司(k个)的k个可以除以32。对于k个这不是32的因子,我们重复使用Ψ−1直到j个, (Ψ−1)(j个)(k个)是32的因数,然后S公司((Ψ−1)(j个)(k个))可以查找和S公司(k个)可以用公式计算(5)。
总之,对齐过程使用4n个+n个⌈日志2n个⌉/8位,或n个基因组的字节数<4 Gb。这包括原始基因组和反向基因组的BWT字符串、部分出现数组和部分后缀数组的内存。此外,堆、缓存和其他数据结构需要几百兆字节的内存。
2.7 Illumina的其他实际问题
2.7.1模糊基础
基于读取的非A/C/G/T基被简单地视为不匹配,这在算法中是隐含的(). 参考基因组上的非A/C/G/T碱基被转换为随机核苷酸。这样做可能会导致错误命中充满模糊基的区域。幸运的是,考虑到相对较长的读取时间,这种情况发生的可能性很小。我们尝试了200万个32 bp的读取,但没有发现任何读取偶然映射到多-N区域。
2.7.2成对映射
BWA支持配对映射。它首先找到所有好点击的位置,根据染色体坐标对其进行排序,然后对所有潜在点击进行线性扫描,使两端配对。计算所有染色体坐标需要经常查找后缀数组。这种配对过程是耗时的,因为用上述方法动态生成完整后缀数组是昂贵的。为了加速配对,我们缓存了较大的间隔。这种策略使配对时间减半。
在配对中,BWA一批处理256K个读取对。在每一批中,BWA将完整的BWA索引加载到内存中,生成每次出现的染色体坐标,从映射质量高于20的两端映射的读取对中估计插入大小分布,然后对其进行配对。之后,BWA从内存中清除BWT索引,加载2位编码的参考序列,并对其配对可以可靠对齐的未映射读取执行Smith–Waterman对齐。Smith–Waterman对齐解决了一些差异过大的读取问题。
2.7.3确定允许的最大差异数
给出长度读数米,BWA最多只能承受一次打击k个差异(不匹配或差距),其中k个选择<4%的米-基本错误率为2%的长读取可能包含超过k个。使用此配置,对于15–37 bp的读取,k个等于2;对于38–63bp,k个=3; 对于64–92个基点,k个=4; 93–123个基点,k个=5; 对于124–156个基点的读数,k个=6.
2.7.4生成映射质量分数
对于每个对齐,BWA计算映射质量分数,即对齐不正确的Phred标度概率。该算法与MAQ类似,只是在BWA中我们假设总是可以找到真正的命中。我们做了这个修改,因为我们知道MAQ的公式高估了错过真正命中的概率,这导致低估了映射质量。模拟表明,由于这种修改,BWA可能会高估制图质量,但偏差相对较小。例如,BWA错误地对齐了1 569 108个模拟70 bp读取中的11个读取,映射质量为60。错误率7×10−6这些Q60映射的(=11/1 569 108)高于理论预期10−6。
2.8映射SOLiD读数
对于SOLiD读取,BWA将参考基因组转换为二核苷酸“颜色”序列,并为颜色基因组构建BWT索引。读取在颜色空间中映射,其中序列的反向补码与反向补码相同,因为颜色补码本身就是。对于SOLiD配对编码映射,如果两种情况中有一种是正确的,则称读对处于正确的方向:(i)两端映射到基因组的前链,R3读具有较小的坐标;和(ii)两端映射到基因组的反向链,F3读数具有较小的坐标。Smith–水印对齐也在颜色空间中完成。
在比对之后,BWA使用动态编程将彩色读取序列解码为核苷酸序列。给定核苷酸参考子序列b条1b条2…b条我+1和彩色读取序列c(c)1c(c)2…c(c)我映射到子序列,BWA推断出一个核苷酸序列使以下目标函数最小化:
哪里q个'是Phred标度的突变概率,q个我是颜色的Phred质量c(c)我和功能克(b条,b条′)=克(b条′,b条)给出了与两个相邻核苷酸对应的颜色b条和b条′. 基本上,我们要支付罚款q个'如果和罚款q个我如果。
这种优化可以通过动态编程实现,因为最佳解码超出位置我只取决于选择.让是解码得分最高的我。迭代方程为
BWA近似基本质量如下。让. The我-th基本质量,我=2…我,计算如下:
BWA输出序列和质量作为SOLiD映射的最终结果。
3结果
3.2评估项目
为了评估BWA的性能,我们测试了另外三个校准程序:MAQ(Li等人。,2008年a),SOAPv2(http://soap.genomics.org.cn)和鲍蒂(兰米德等人。,2009). MAQ索引使用哈希表读取并扫描基因组。这是我们之前为大规模读取映射开发的软件包。SOAPv2和Bowtie是我们知道的另外两个基于BWT的短读对准器。最新的SOAP-2.1.7(Li等人。,未发布数据)使用双向BWT(Lam等人。,未发布的数据)。它能容忍超过35bp种子序列的更多错配,并支持仅限于一个缺口的缺口比对。Bowtie(0.9.9.2版)为BWA部署了类似的算法。尽管如此,它并没有通过将搜索范围限定为D类(我),但通过巧妙地对原始和反向读取序列进行对齐,以绕过对前缀trie的根进行不必要的搜索。默认情况下,Bowtie对前缀trii执行DFS,并在找到第一个合格的命中时停止。因此,即使禁用了种子策略,它也可能会错过最佳的不精确命中。在命令行中应用“–best”可以使Bowtie执行BFS,但这会使Bowti速度变慢。鲍蒂目前不支持间隙对齐。
所有四个程序,包括BWA,都会在多个相同的最佳位置随机进行重复读取。由于我们主要对实践中的自信映射感兴趣,因此需要排除重复点击。SOAPv2提供了一次读取的最佳点击数。只保留唯一的映射。我们还要求SOAPv2将可能的缺口大小限制在最多3个基点。我们使用命令行选项“–best-k 2”运行Bowtie,这将使Bowtiy输出读取的前两个点击。如果第二个最佳命中与最佳命中包含相同数量的不匹配,我们将放弃读取对齐。MAQ和BWA生成映射质量。我们使用MAQ的映射质量阈值1和BWA的映射质量阀值10来确定置信映射。我们使用不同的阈值,因为我们知道MAQ的映射质量被低估了,而BWA的被高估了。
3.3模拟数据评估
我们使用SAMtools包中包含的wgsim程序模拟对人类基因组的读取,并运行四个程序将读取映射回人类基因组。由于我们知道每个读数的精确坐标,我们能够计算对准误差率。
表明BWA和MAQ达到了相似的对准精度。就置信映射读取的分数和置信映射的错误率而言,BWA比Bowtie和SOAPv2更准确。请注意,SOAP-2.1.7针对大于35 bp的读取进行了优化。对于32个bp的读取,SOAP-2.0.1的性能优于最新版本。
表1。
| 单引擎
| 成对输入
|
---|
程序 | 时间(s) | 合格率(%) | 误差(%) | 时间(s) | 合格率(%) | 误差(%) |
---|
鲍蒂-32 | 1271 | 79 | 0.76 | 1391 | 85.7 | 0.57 |
BWA-32型 | 823 | 80.6 | 0.30 | 1224 | 89.6 | 0.32 |
MAQ-32型 | 19797 | 81 | 0.14 | 21589 | 87.2 | 0.07 |
肥皂2-32 | 256 | 78.6 | 1.16 | 1909 | 86.8 | 0.78 |
鲍蒂-70 | 1726 | 86.3 | 0.20 | 1580 | 90.7 | 0.43 |
BWA-70型 | 1599 | 90.7 | 0.12 | 1619 | 96.2 | 0.11 |
MAQ-70型 | 17928 | 91 | 0.13 | 19046 | 94.6 | 0.05 |
SOAP2-70标准 | 317 | 90.3 | 0.39 | 708 | 94.5 | 0.34 |
鲍蒂-125 | 1966 | 88 | 0.07 | 1701 | 91 | 0.37 |
BWA-125型 | 3021 | 93 | 0.05 | 3059 | 97.6 | 0.04 |
MAQ-125型 | 17506 | 92.7 | 0.08 | 19388 | 96.3 | 0.02 |
SOAP2-125标准 | 555 | 91.5 | 0.17 | 1187 | 90.8 | 0.14 |
在速度上,SOAPv2是最快的,实际上,如果禁用间隙对齐,配对映射的速度将提高30-80%。使用默认选项(未显示数据)的蝴蝶结比单端贴图上的当前设置“–best-k 2”快几倍。然而,速度的提高是以牺牲准确性为代价的。例如,使用默认选项,Bowtie可以在151秒内映射200万个单端32 bp读取,但6.4%的可信映射是错误的。这种高对准误差率可能会使结构变化的检测复杂化,并可能影响SNP精度。在BWA和MAQ之间,BWA的速度是6–18倍,具体取决于读取长度。MAQ的速度不受读取长度的影响,因为它在内部将所有读取都视为128 bp。通过不检查类似于Bowtie和SOAPv2所做的次优命中,可以加速BWA。然而,在这种情况下,计算绘图质量是不可能的,我们认为生成适当的绘图质量对于各种下游分析(例如检测结构变化)是有用的。
在内存上,SOAPv2使用5.4 GB。Bowtie和BWA都使用2.3 GB用于单端映射,约3 GB用于配对映射,比MAQ的内存占用量1 GB大。然而,所有三个基于BWT的对齐器的内存使用与要对齐的读取数无关,而MAQ在其中是线性的。此外,所有基于BWT-的对齐器都支持多线程,这减少了多核计算机上每个CPU内核的内存。在现代计算机服务器上,基于BWT的对齐器不需要考虑内存。
3.4真实数据评估
为了评估真实数据的性能,我们从欧洲读取档案(AC:ERR000589)下载了约1220万对51bp的读取。这些读数是由Illumina为NA12750制作的,NA12750是1000基因组项目中的一只雄性(http://www.1000genomes.org). 读取结果被映射到人类基因组NCBI构建36。表明,MAQ和BWA的几乎所有自信映射都以一致的对存在,尽管MAQ给出的自信比对较少。BWA的较慢模式(无种子;搜索次优点击,即使最热门的点击是重复的)做得更好。在这种模式下,BWA自信地在6.3小时内映射了89.2%的所有读取,99.2%的自信映射位于一致对中。
表2。
程序 | 时间(h) | 合格率(%) | 成对(%) |
---|
鲍蒂 | 5.2 | 84.4 | 96.3 |
BWA公司 | 4 | 88.9 | 98.8 |
质量管理体系 | 94.9 | 86.1 | 98.7 |
SOAP2系统 | 3.4 | 88.3 | 97.5 |
在这个实验中,如果禁用间隙对齐,SOAPv2的速度将提高一倍,置信度映射(Conf)和配对率(paired)都将下降1%。相比之下,当BWA仅执行未映射对齐时,其速度是后者的1.4倍。但是,即使禁用了基于BWT的间隙对齐,BWA仍然能够恢复许多与Smith–Waterman对齐的短索引(给定成对读取)。
我们还获得了鸡的基因组序列(2.1版),并将这1220万对读取对与人-鸡杂交参考序列进行比对。与纯人工对齐相比,置信度映射几乎没有变化。至于映射到鸡基因组的读取数,Bowtie将2640、BWA 2942、MAQ 3005和SOAPv2将4531个读取映射到错误的基因组。如果我们考虑鸡序列占人-鸡杂交参考序列的四分之一,BWA的比对错误率约为0.06%(=2942×4/12.2M/0.889)。注意,这种对比对错误率的估计可能被低估,因为错误比对的人类读数往往与人类中的重复序列有关,并被映射回人类序列。由于存在高度保守的序列以及人类基因组组装不完整或鸡基因组组装错误,估计值也可能被高估。
如果我们想要更少的误差,BWA和MAQ生成的映射质量允许我们选择更高精度的对准。如果我们将BWA的定位质量阈值提高到25,那么86.4%的读操作可以与1927个映射到鸡基因组的读操作相一致,在置信度映射百分比和映射到错误基因组的读次数方面都优于Bowtie。
4讨论
对于针对人类参考基因组的短读比对,BWA比MAQ快一个数量级,同时达到类似的比对精度。它支持单端读取的间隙对齐,当读取变长并且往往包含索引时,这一点变得越来越重要。BWA以SAM格式输出对齐,以利用SAMtools中实现的下游分析。BWA plus SAMtools提供了MAQ包的大部分功能和附加功能。
与速度、内存和映射读取数相比,在实际数据上评估对齐精度要困难得多,因为我们不知道实际情况。在本文中,我们使用了三个标准来评估对准器的精度。第一个标准只能用模拟数据进行评估,它是自信映射的数量和自信映射的对齐错误率的组合。注意,仅自信映射的数量可能不是一个好标准:我们可以以牺牲准确性为代价绘制更多映射。第二个标准是对齐读取数和一致对中映射的读取数的组合,它基于真实数据,假设实验中的匹配信息是正确的,并且结构变化很少。尽管该标准与校准器定义配对“一致性”的方式有关,但根据我们的经验,如果配对参数设置正确,则信息量很大。第三个标准是,如果我们有意添加发散物种的参考序列,那么映射到错误参考序列的读取数的比例。
虽然理论上BWA可以处理任意长的读取,但它在长读取时的性能会降低,尤其是在排序错误率很高的情况下。此外,BWA始终要求从第一个碱基到最后一个碱基的完整读取进行对齐(即,相对于读取而言是全局的),但较长的读取更有可能被参考基因组中的结构变化或错误组装所中断,这将导致BWA失败。对于长读取,一个可能更好的解决方案是将读取划分为多个短片段,使用上述算法单独对齐片段,然后连接部分对齐以获得读取的完全对齐。