通过动态规划来精确计算概率值

对于一个允许以特定概率进行插入、缺失和替换的测序过程模型,我们可以精确计算概率pr=Pr【r|A】,即给定一个拼接A观察到read r的概率。总体上,我们 想要得到一个read align到一个拼接所有位置的概率之和。

可能的alignment的数目是read 长度的指数函数,大部分的alignment的概率极小,然而一些alignment的概率等同于或者接近于最优值。比方,当把ACG对齐到ACCG上时,A-CG和AC-G都是最优对齐,有相同的概率。当计算一个read的概率时,所有可能对齐的分布必须要加以考虑。

我们用一种动态规划的方法按以下步骤计算把一个read 对齐到拼接上所有概率的和,这种方法类似于隐马模型的前向算法。在公式3中,pr,j(forward)和pr,j(reverse)是把read r对齐到reference和reverse complement上,且在位置j终止的所有可能的概率的和。

我们把T【x,y】定义为观察到的r的前缀为【1....y】的概率,如果y碱基是在reference上测序且终止于位置x。因此,pr,j=T【j,l】。T【x,0】意思是如果我们对零个碱基测序,观察到空序列的概率,定为1.T【0,y】表示从reference测序r个碱基,观察到read的前缀是【1...y]且read终止与位置0.设定此概率为0.

对于x》=1和y》=1,T【x,y】被递归地定义为:T【x,y】=T【x-1,y-1】Pr【substitute(A[X],R[Y])】+T【x,y-1】Pr【insert(r【y】)】+T【x-1,y】Pr【delete(A【x】)】

r【y】和A【x】分别代表着核苷酸在read r的y位置和x在拼接A的概率。pr【substitute(A【x】,r【y】)】表示对核苷酸A【x】测序结果测到了核苷酸r【y】的概率。在我们的实验中,我们不区分不同错误的种类,认为它们的概率都是e,而观测到正确的核苷酸的概率是1-e。

上面列出的动态规划算法每个read的运行时间是O(lL)。尽管这个复杂度是多项式的,实际中却运行很慢。但是,我们可以用alignment seeds来加速算法。这些seeds可以告诉我们一个read以较高概率align到拼接上的哪些区域。我们可以只对这些区域应用动态规划算法,这样就能对整个概率做出良好估计。我们可以用给定长度的精确seeds(k-mers)来对拼接序列建立哈希表。之后,每个read要和它与拼接序列有共同kmer的区域进行比较。

你可能感兴趣的:(通过动态规划来精确计算概率值)