Index Similar DNA Sequence 多基因组索引技术 笔记

Indexing Similar DNA Sequences

研究背景:

 研究物种的基因变异经常需要挖掘多条非常相似的基因组序列之间的信息。例如当我们研究由于基因组中某几个碱基突变引发的疾病时,经常需要对多组正常人和患者的基因组中相同DNA区域进行对比试验。我们需要对比研究几个甚至几百个不同人的基因组,每个基因组序列长度可达几百万碱基甚至几亿碱基。当我们研究这些相似基因组序列时,一个非常普遍的操作就是在这些基因组上搜索某段序列。因为基因组非常大,为了节省搜索时间,我们必须对其建立有效的索引结构。

 很直观的一种想法就是将所有的基因组看做一整条很长的序列,然后利用后缀树建立索引或者用BWT方法建立压缩索引。但是这些索引需要的内存空间将会远远的超过主流PC机的负载能力。一般来说,对一个碱基建立索引,用后缀树方法需要10字节,用BWT方法也需要0.5-1个字节,像其他压缩索引技术比如CSA、FM-index将会使用更多空间。假如women对250个基因组建立索引,每个基因组有2亿碱基,对它们建立索引的话,就是用BWT方法也得需要大约40GB内存,无疑我们普通的电脑是无法承受的。这个想当然的处理方法的最大弊端在于没有有效的利用基因组之间的高度相似性。基因组之间有大约95%的序列时相同的,我们可以充分利用这些相同的部分,减少内存使用。

 利用基因组之间的高度相似性,这篇文章中建立了两种模型,我是这么叫的,一种是基因间SNP区间模型。另一种是随机性变异模型。(目前在NCBI的数据库上我们可以找到基因组之间的不同片段部分,这些部分就构成了我们的变异知识库。因此,研究多基因组的问题,就演变成了研究一个携带大量变异知识库的单基因组问题。)

第一种模型是这样的:

Index Similar DNA Sequence 多基因组索引技术 笔记_第1张图片

在这种模型中我们假定有r个参考基因组,T0——Tr-1 这些参考基因组大部分序列信息都是相同的。我们用C段表示相同的部分,每一列的Ci都是完全相同的,因此我们可以只存储一条基因组中的C0,C1···Ck-1表示所有的相同序列,共有k个C段。R段用来表示不同的变异段,每个R段长度不一定相同,而且可能为空,共有r(k+1)个R段。

然后,我们用N表示所有这些R段的总长度,用n表示C0,C1···Ck-1 的总长度。注意到R的长度是很小的大部分只有一个碱基, 这样我们存贮250个200M长的基因组,所需内存仅仅为2.7G,不到BWT方法的7%。

另一种模型是这样的:

Index Similar DNA Sequence 多基因组索引技术 笔记_第2张图片

在这种模型中,r条参考基因组是等长的,每两条参考基因组有个别的位置处不同,且都与T0有不同的变异位点。

我们先考虑第一种模型,对这种模型进行建模。

看下面的这个例子:

Index Similar DNA Sequence 多基因组索引技术 笔记_第3张图片

例子中(a)表示三个基因组,带下划线的是R段,其余是C段,我们将各个C段用$符号连接起来构成C字符串,它的反置我们称之为CR。Startc这个数组存放每个C段在C字符串中的位置。同样我们把R段连接起来形成T字符串,同样有个SatrtT数组存放每个R段的序号,这个序号我们记为w,是所有R段顺序排在一起的编号。注意,i = [w/(k+1)]  t = w mod (k+1) i代表第i条基因组,t代表第i条基因组上的第t个R段。(d)是一个SAR结构,针对R段建立的一个SA,具体来说就是以R段的每一个碱基为开端的后缀数组。然后排序,形成的一个SAR,第一个参数是R段序号,即w,第二个是偏移,即以R中的第几个碱基为开端。把那些偏移量为0 的SAR后缀拿出来就形成了(e)中的SAR0,即以R第一个碱基开端的所有后缀。C-rank是表示SAR0中这些后缀的开始R段之前是第几个C段,如果前面每一C段则c-rank记成-1.这个在后续的搜索策略中十分有用。

再啰嗦一遍,C= c0$c1$...ck-1$,$是新引入的符号,它的字典序比ACGT字符都小。还有一个startC结构,存放Ci在C中的位置。T = R00 R01 ···Rr-1,k StartC记录了每一个C段在C数组中的起始位置,StartR记录了每一个R段在T数组中的起始位置。我们考虑所有以R段内碱基为开始的后缀,当然这些后缀数目和R段总base数N是一样的。我们对这些后缀排序,建立了一个BWT,和一个后缀数组,称之为SAR[],因此,SAR[i] 的值代表了字典序为i名的字符串在原来参考基因组上的参考位置。这个参考位置自然不是在基因组上的绝对位置了,它是一个二元组(w ,offset)w是段号,将所有段按顺序排列起来也就是0——N-1之间的第几个号,offet是这个R中第几个base处。每一行有k+1个R段,也就是如果我们直到了某R的段号为w,我们就知道了它所在的行号 i = w/(k+1) 。

在这个模型中,我们对C端的处理时为C的反串CR建立BWT索引,用搜索模块P的反串PR进行比对,那么为什么要对反串建立BWT索引呢?因为P可能夸C段延长至R段,我们比对的是P的前缀和C的后缀。BWT相当于是一个对前缀树的搜索,P也是从后向前比对,但是我们希望P正向比对,所以对C的倒置串建立BWT,用P的倒置串进行对比,这样就使P用前缀和C比对了。

对这个模型搜索策略如下:

如果我们搜索一个m长的模块P,P可能出现在Ti中中的任何一个位置,有三种情况:

1)P处于一个C段

2)P是以R为开头Ti的后缀的前缀

3)P可以分为P1P2两部分,P1是C段的后缀,P2是接下来以R位开头的Ti的后缀的一段前缀。

对于第一种情况,因为我们对CR建立了BWT,所以可以直接在BWT上查找P,对第二种情况,我们在SAR中搜索P,可以将P分为P1和P2两部分,对P1进行CR上的BWT搜索,(P1是动态增长的,从第一个base开始)对P2进行SAR上的搜索(同时P2是动态减少的,一开始有m-1个base)P1每增长一个base或者说P2每减少一个base,都去进行判断,从SAR中搜索得到的匹配区间中的C-rank是否在从BWT搜索获得的SA空间中。如果有的话,就是一个完整匹配。

具体算法表述如下:

Index Similar DNA Sequence 多基因组索引技术 笔记_第4张图片


你可能感兴趣的:(Index Similar DNA Sequence 多基因组索引技术 笔记)