python中的一致性得分和WSP得分

2024-04-26 10:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有3个DNA序列,我想用一些函数来评估它们:

 seq1='AG_CT'
 seq2='AG_CT'
 seq3='ACT_T'

在python中,如何计算这三个DNA序列的一致性得分和加权对数总和(WSP score)?在

一致性得分是序列与一致性序列之间的成对得分之和,一致性(A)=sum{l}^{i=1}d(i)l是序列的长度,d是两个碱基之间的距离,例如:d(A,B)=2代表A!=B,d(A,-)=d(-,A)=1代表A!='-',否则为0。对于上述示例,A和B可以是“A或C或G或T”

^{pr2}$

共识(A)=8

加权对和 WSP(A)=\sum{i=1}^{k-1}\sum{j=i+l}^k\sum{h=1}^l wij*s(A[i,h],[j,h] l:序列长度,k序列数,wij序列i和j的权重

s(A,B)=2代表A!=B,s(A,-)=d(-,A)=-1代表A!='-',3其他。全部权重系数为1。在

             seq1= A  G  _  C  T
             seq2= A  G  _  C  T
             seq3= A  C  T  _  T
                   3  3  3  3  3
                   3  2 -1 -1  3
                   3  2 -1 -1  3
                   ++++++++++++++
                  (3+3+3)*1+(3+2+2)*1+(3-1-1)*1+(3-1-1)*1+(3+3+3)*1=9*1+7*1+1*1+1*1+9*1
                   9+7+1+1+9=27

因此,三个序列的WSP得分为27


Tags: 函数代表序列actdna一致性权重sum
1条回答
网友
1楼 · 发布于 2024-04-26 10:37:33

我将按以下方式处理这个问题。首先,创建计算单个距离和加权和的函数:

def distance(a, b):
    """Distance between two bases a and b."""
    if a == b:
        return 0
    elif a == "_" or b == "_":
        return 1
    else:
        return 2

以及

^{pr2}$

其次,使用^{} function在相同位置创建一组基:

list(zip(seq1, seq2, seq3)) == [('A', 'A', 'A'), 
                                ('G', 'G', 'C'), 
                                ('_', '_', 'T'), 
                                ('C', 'C', '_'), 
                                ('T', 'T', 'T')]

第三,使用^{}在每个位置生成对:

list(combinations(('G', 'G', 'C'), 2)) == [('G', 'G'), 
                                           ('G', 'C'), 
                                           ('G', 'C')]

最后,将距离和和相加:

from itertools import combinations

consensus = 0
wsp = 0
for position in zip(seq1, seq2, seq3): # sets at same position
    for pair in combinations(position, 2): # pairs within set
        consensus+= distance(*pair) # calculate distance
        wsp += w_sum(*pair) # calculate pair sum

注意使用*pair将碱基对的2元组解压为计算函数的两个参数。在

相关问题 更多 >