我的“DNA基序”由位置权重矩阵(PWM)a.k.a位置特定的评分矩阵(PSSM)代表,采用transfac格式:
transfac格式:
例如 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函数?
答案 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
基本上,生物模型和代码相距太远,实际上还没有做多少。有意义的遗传密码,需要有用的机器外观让我们超越巴比伦。
可以某种方式压缩多变量值。我们所瞄准的是一个现实的递归机器图片,具有足够的分形真理来维护我们世俗的事物。