这种格式的数据的Shannon熵(DNA主题)?

时间:2014-05-05 19:13:40

标签: python format bioinformatics python-2.6 entropy

我的“DNA基序”由位置权重矩阵(PWM)a.k.a位置特定的评分矩阵(PSSM)代表,采用transfac格式:

transfac格式

  • 主题名称显示在“DE”
  • 之后的行中
  • 每个编号的行代表四个可能的DNA碱基(“字母”)的观察频率:A,G,T和C,在整个DNA基序序列的给定位置(这些位置由第一列显示)< / LI>
  • 第0行是DNA基序序列的第一个字母,“XX”之前的行是沿着DNA基序序列的最终位置
  • 根据观察到的频率,最严格的列显示该序列中该位置最具代表性的字母;如果没有特定的字母代表,可以给出歧义代码(不是A,G,C,T)
  • 最后“XX”界定多个DNA基序

例如 SRF:GCCCATATATGGGTTGTNNTC和HMG-1:GTTGNNTC

DE    SRF
0    0.0435    0.0217    0.8478    0.0870    G
1    0.1957    0.7174    0.0435    0.0435    C
2    0.0000    0.9782    0.0217    0.0000    C
3    0.0217    0.9782    0.0000    0.0000    C
4    0.6956    0.0217    0.0000    0.2826    A
5    0.0652    0.0217    0.0000    0.9130    T
6    1.0000    0.0000    0.0000    0.0000    A
7    0.0217    0.0000    0.0000    0.9782    T
8    0.9348    0.0000    0.0000    0.0652    A
9    0.3261    0.0217    0.0000    0.6522    T
10    0.0435    0.0000    0.9565    0.0000    G
11    0.0435    0.0217    0.9348    0.0000    G
XX
DE    HMG-1
0    0.0000    0.3846    0.6154    0.0000    G
1    0.0000    0.0000    0.2308    0.7692    T
2    0.0000    0.3077    0.0000    0.6923    T
3    0.0000    0.1539    0.7692    0.0769    G
4    0.0000    0.0769    0.0000    0.9230    T
5    0.4615    0.0769    0.2308    0.2308    N
6    0.2308    0.3846    0.0000    0.3846    N
7    0.0000    0.0769    0.1539    0.7692    T
8    0.0000    0.6154    0.0769    0.3077    C
XX

问题:如何计算Python中每个DNA基序的Shannon熵?是否有任何Python包用于这样的数据(我不知道这些数据结构的非生物术语)?或者也许有人可以提供一个整洁的Python函数?

2 个答案:

答案 0 :(得分:2)

有一个与评论相关的警告(见下文),但我想出了一些处理你给出的文本文件的代码:

import numpy as np
import sys

def compute_entropy(motif):
    arr = np.array(motif)
    H = (arr[arr > 0] * np.log2(arr[arr > 0])).sum(axis=1)
    print 'entropy:', -H.mean(), 'bits'

motif = []
for line in sys.stdin:
    line = line.strip().lower()
    if line.startswith('de'):
        print line
    elif line == 'xx':
        if motif:
            compute_entropy(motif)
        motif = []
    else:
        motif.append(map(float, line.split()[1:-1]))

需要注意的是,不清楚哪种方法是为从不同分布中提取的多元值序列定义熵的正确方法---或者,至少有几种方法可以做到这一点,并且每种方法都有一个不同的基础统计模型。

我认为生物信息学人员已经确定了正确的方法,但我这样做的方法是将序列中的每个字母视为从该序列位置的多项式中独立绘制,然后我平均每个字母的熵那些抽奖。

您可能会争辩说您需要对各个熵值(或任何其他方法进行组合)求和,以便由您决定。

答案 1 :(得分:0)

这里有一些背景噪音:https://www.youtube.com/watch?v=VPLGN0yIDTg

基本上,生物模型和代码相距太远,实际上还没有做多少。有意义的遗传密码,需要有用的机器外观让我们超越巴比伦。

可以某种方式压缩多变量值。我们所瞄准的是一个现实的递归机器图片,具有足够的分形真理来维护我们世俗的事物。