序列比对(19)基序发现和中间字符串问题

本文介绍了基序发现问题和中间字符串问题。

引言:DNA调控元件

我们知道,DNA调控元件往往是一段相似的DNA序列。理想情况下这些序列完全一致,比如下面这样:
在这里插入图片描述
图片引自《生物信息学算法导论》

但实际上,这些序列不会完全一样,总会有若干位点发生“变异”,从而不同,比如下面这样:
在这里插入图片描述
图片引自《生物信息学算法导论》

如果给定一组DNA序列(暂且假定它们长度相等),那么如何找出这些相似的序列呢?由此可以引出两个问题,即基序发现问题和中间字符串问题。

一、基序发现问题

要说明基序是什么,首先介绍一下序列剖面(Profile)。

假设给定 t t t条长度为 n n n D N A DNA DNA序列,我们为其中每条序列选择一个起点 s i   ( i = 1 , 2 , . . . , t ) s_i \ (i=1,2,...,t) si (i=1,2,...,t),截取该序列中以 s i s_i si为起点的长度为 l l l的一个序列,称为一条 l l l-元组序列。那么这 t t t l l l-元组序列就构成了一个 t × l t \times l t×l联配矩阵(alignment matrix),统计该矩阵的每一列中各个碱基出现次数,则构成了一个新的 4 × l 4 \times l 4×l的矩阵,称为剖面矩阵(profile matrix)。剖面矩阵各列最大值对应的碱基放到一起构成了一条长度为 l l l的序列,称为共有序列(consensus)。

比如下图中 t = 7 , l = 8 t=7, l=8 t=7,l=8,序列剖面(Profile)就是一个 4 × 8 4 \times 8 4×8的一个矩阵:
在这里插入图片描述
图片引自《生物信息学算法导论》

接下来我们给出一系列符号定义,以便下文的讨论:

我们将这 t t t条长度为 n n n的序列记为 D N A DNA DNA
定义 s ⃗ = { s 1 , s 2 , . . . , s t } ,   1 ≤ s i ≤ n − l + 1 ,   f o r   ( i = 1 , 2 , . . . , t ) \boldsymbol{\vec{s}} = \{s_1,s_2,...,s_t\}, \ 1 \leq s_i \leq n-l+1, \ for \ (i=1,2,...,t) s ={s1,s2,...,st}, 1sinl+1, for (i=1,2,...,t)起始位点向量
定义 P ( s ⃗ ) \boldsymbol{P}(\boldsymbol{\vec{s}}) P(s ) t × l t \times l t×l剖面矩阵
将剖面矩阵 P ( s ⃗ ) \boldsymbol{P}(\boldsymbol{\vec{s}}) P(s )中第 j j j列的最大值记为 M P ( s ⃗ ) ( j ) ,   f o r   ( j = 1 , 2 , . . . , l ) M_{\boldsymbol{P}(\boldsymbol{\vec{s}})}(j), \ for \ (j=1,2,...,l) MP(s )(j), for (j=1,2,...,l)
共有序列的得分记为 S c o r e ( s ⃗ , D N A ) = ∑ j = 1 l M P ( s ⃗ ) ( j ) Score(\boldsymbol{\vec{s}}, DNA) = \displaystyle \sum_{j=1}^l M_{\boldsymbol{P}(\boldsymbol{\vec{s}})}(j) Score(s ,DNA)=j=1lMP(s )(j)

那么,基序发现问题用我们上面的符号表示就是要找到: (1.1) a r g m a x s ⃗   S c o r e ( s ⃗ , D N A ) \underset{\boldsymbol{\vec{s}}}{\mathrm{argmax}} \, Score(\boldsymbol{\vec{s}},DNA) \tag{1.1} s argmaxScore(s ,DNA)(1.1)
也就是说我们要计算得到:
(1.2) max ⁡ s ⃗   S c o r e ( s ⃗ , D N A ) \underset{\boldsymbol{\vec{s}}}{\max} \, Score(\boldsymbol{\vec{s}},DNA) \tag{1.2} s maxScore(s ,DNA)(1.2)

二、中间字符串问题

同样地,要讲清楚中间字符串问题,我们首先给出一些符号:

将一个 l l l-元组序列 v v v和一个以 s i s_i si为起始位点的 l l l-元组序列的汉明距离记为 d H ( v , s i ) d_H(v, s_i) dH(v,si),表示这两个序列中不相同位点的数目;
将一个 l l l-元组序列 v v v以及一组分别以 s ⃗ = { s 1 , s 2 , . . . , s t } \boldsymbol{\vec{s}} = \{s_1,s_2,...,s_t\} s ={s1,s2,...,st}作为起始位点的 l l l-元组序列的总汉明距离表示为 d H ( v , s ⃗ ) = ∑ i = 1 t d H ( v , s i ) d_H(v,\boldsymbol{\vec{s}}) = \displaystyle \sum_{i=1}^t d_H(v,s_i) dH(v,s )=i=1tdH(v,si)
将一个 l l l-元组序列与一组 D N A DNA DNA序列的任意起始位点的总汉明距离的最小值记为 T o t a l D i s t a n c e ( v , D N A ) = min ⁡ s ⃗   d H ( v , s ⃗ ) TotalDistance(v,DNA) = \underset{\boldsymbol{\vec{s}}}{\min} \, d_H(v,\boldsymbol{\vec{s}}) TotalDistance(v,DNA)=s mindH(v,s )

那么,中间字符串用上述符号表示就是要找到:
(2.1) a r g m i n v   min ⁡ s ⃗   d H ( v , s ⃗ ) \underset{v}{\mathrm{argmin}} \, \underset{\boldsymbol{\vec{s}}}{\min} \, d_H(v,\boldsymbol{\vec{s}}) \tag{2.1} vargmins mindH(v,s )(2.1)
也就是说我们要计算得到:
(2.2) min ⁡ v   min ⁡ s ⃗   d H ( v , s ⃗ ) \underset{v}{\min} \, \underset{\boldsymbol{\vec{s}}}{\min} \, d_H(v,\boldsymbol{\vec{s}}) \tag{2.2} vmins mindH(v,s )(2.2)

三、两个问题是等价的

我们可以证明计算式子(1.2)和计算(2.2)是一回事。
首先,根据第一部分的定义,式(1.2)其实就是:
(3.1) max ⁡ s ⃗   S c o r e ( s ⃗ , D N A ) = max ⁡ s ⃗   ∑ j = 1 l M P ( s ⃗ ) ( j ) \underset{\boldsymbol{\vec{s}}}{\max} \, Score(\boldsymbol{\vec{s}},DNA) =\underset{\boldsymbol{\vec{s}}}{\max} \, \displaystyle \sum_{j=1}^l M_{\boldsymbol{P}(\boldsymbol{\vec{s}})}(j) \tag{3.1} s maxScore(s ,DNA)=s maxj=1lMP(s )(j)(3.1)

而式(2.2)也可以做变换。我们再给出一些符号,假定:

l l l-元组序列 v = { v 1 , v 2 , . . . , v l } v = \{v_1,v_2,...,v_l\} v={v1,v2,...,vl}
第一部分涉及到的 t × l t \times l t×l阶的联配矩阵为 A s ⃗ i j A_{\boldsymbol{\vec{s}}}^{ij} As ij, 其中 i = 1 , 2 , . . . , t ;   j = 1 , 2 , . . . , l 。 i=1,2,...,t; \, j=1,2,...,l。 i=1,2,...,t;j=1,2,...,l
定义 S ( x , y ) S(x, y) S(x,y)来判断碱基 x x x和碱基 y y y是否相同,即:
S ( x , y ) = { 1 , if  x = y 0 , if  x ≠ y S(x,y)= \begin{cases} 1, & \text {if $x = y$} \\ 0, & \text{if $x \neq y$} \end{cases} S(x,y)={1,0,if x=yif x̸=y
定义 D ( x , y ) D(x, y) D(x,y)来判断碱基 x x x和碱基 y y y是否不同,即:
D ( x , y ) = { 0 , if  x = y 1 , if  x ≠ y D(x,y)= \begin{cases} 0, & \text {if $x = y$} \\ 1, & \text{if $x \neq y$} \end{cases} D(x,y)={0,1,if x=yif x̸=y

那么:
min ⁡ v   min ⁡ s ⃗   d H ( v , s ⃗ ) = min ⁡ s ⃗   min ⁡ v   d H ( v , s ⃗ ) = min ⁡ s ⃗   min ⁡ v ∑ i = 1 t d H ( v , s i ) = min ⁡ s ⃗   min ⁡ v ∑ i = 1 t ∑ j = 1 l D ( A s ⃗ i j , v j ) = min ⁡ s ⃗   min ⁡ v ∑ j = 1 l ∑ i = 1 t D ( A s ⃗ i j , v j ) = min ⁡ s ⃗ ∑ j = 1 l min ⁡ v j ∑ i = 1 t D ( A s ⃗ i j , v j ) = min ⁡ s ⃗ ∑ j = 1 l min ⁡ v j   [ t − ∑ i = 1 t S ( A s ⃗ i j , v j ) ] = min ⁡ s ⃗ ∑ j = 1 l [ t − max ⁡ v j ∑ i = 1 t S ( A s ⃗ i j , v j ) ] = min ⁡ s ⃗ ∑ j = 1 l [ t − M P ( s ⃗ ) ( j ) ] = l t − max ⁡ s ⃗ ∑ j = 1 l M P ( s ⃗ ) ( j ) = l t − max ⁡ s ⃗   S c o r e ( s ⃗ , D N A ) \begin{aligned} \underset{v}{\min} \, \underset{\boldsymbol{\vec{s}}}{\min} \, d_H(v,\boldsymbol{\vec{s}}) & = \underset{\boldsymbol{\vec{s}}}{\min} \, \underset{v}{\min} \, d_H(v,\boldsymbol{\vec{s}}) \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \, \underset{v}{\min} \displaystyle \sum_{i=1}^t d_H(v, s_i) \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \, \underset{v}{\min} \displaystyle \sum_{i=1}^t \sum_{j=1}^l D(A_{\boldsymbol{\vec{s}}}^{ij}, v_j) \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \, \underset{v}{\min} \displaystyle \sum_{j=1}^l \sum_{i=1}^t D(A_{\boldsymbol{\vec{s}}}^{ij}, v_j) \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \displaystyle \sum_{j=1}^l \underset{v_j}{\min} \sum_{i=1}^t D(A_{\boldsymbol{\vec{s}}}^{ij}, v_j) \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \displaystyle \sum_{j=1}^l \underset{v_j}{\min} \, \Bigg[t - \sum_{i=1}^t S(A_{\boldsymbol{\vec{s}}}^{ij}, v_j) \Bigg] \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \displaystyle \sum_{j=1}^l \Bigg[t - \underset{v_j}{\max} \sum_{i=1}^t S(A_{\boldsymbol{\vec{s}}}^{ij}, v_j) \Bigg] \\ & = \underset{\boldsymbol{\vec{s}}}{\min} \displaystyle \sum_{j=1}^l \Bigg[t - M_{\boldsymbol{P}(\boldsymbol{\vec{s}})}(j) \Bigg] \\ & = lt - \underset{\boldsymbol{\vec{s}}}{\max} \displaystyle \sum_{j=1}^lM_{\boldsymbol{P}(\boldsymbol{\vec{s}})}(j) \\ & = lt - \underset{\boldsymbol{\vec{s}}}{\max} \, Score(\boldsymbol{\vec{s}},DNA) \end{aligned} vmins mindH(v,s )=s minvmindH(v,s )=s minvmini=1tdH(v,si)=s minvmini=1tj=1lD(As ij,vj)=s minvminj=1li=1tD(As ij,vj)=s minj=1lvjmini=1tD(As ij,vj)=s minj=1lvjmin[ti=1tS(As ij,vj)]=s minj=1l[tvjmaxi=1tS(As ij,vj)]=s minj=1l[tMP(s )(j)]=lts maxj=1lMP(s )(j)=lts maxScore(s ,DNA)

上式中 l t lt lt是常数。这样,我们就可以看出基序发现问题和中间字符串问题在求解上其实是一回事。

小结

本文内容基于《生物信息学算法导论》,笔者所作的工作就是将算法推导过程补充详细。至于实现代码,我们会在后续文章中讨论。

(公众号:生信了)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值