【发布时间】:2014-08-04 12:50:31
【问题描述】:
作为即将到来的生物信息学课程的准备,我正在做一些来自 rosalind.info 的作业。我目前被困在作业“Mendel's First Law”中。
我想我可以强行通过这个,但不知何故,我的想法一定太复杂了。我的方法是这样的:
构建一个包含三个级别的概率树。有两种生物交配,生物 A 和生物 B。第一级是,选择生物 A 纯合显性 (k)、杂合 (m) 或纯合隐性 (n) 的概率是多少。似乎以纯合显性为例,由于总共有(k+m+n)个生物,其中k个是纯合显性的,概率是k/(k+m+n)。
然后在这棵树中,假设我们知道 A 被选为什么生物,那么在每一个下面都会出现生物 B 为 k / m / n 的概率。例如,如果生物 A 被选为杂合子 (m),那么生物 B 也是杂合子的概率为 (m-1)/(k+m+n-1),因为现在剩下的杂合子少了一个。
这将给出两个级别的概率,并且会涉及大量代码以达到这一点,因为我实际上是在构建一个树结构,并且为每个分支手动编写了该部分的代码。
现在选择生物 A 和 B 后,他们每个人都有两条染色体。这些染色体之一可以随机挑选。所以对于 A 染色体 1 或 2 可以被挑选出来,对于 B 来说是一样的。所以有 4 种不同的选择:挑选 A 的 1,挑选 B 的 1。挑选 A 的 2,挑选 B 的 1。挑选 A 的 1,挑选 B 的 2。挑选A 中的 2 个,B 中的 2 个。这些中的每一个的概率都是 1/4。所以最后这棵树会有这些叶子概率。
然后我会以某种方式通过魔法将所有这些概率相加,看看两种生物产生具有显性等位基因的生物的概率是多少。
我怀疑这项任务是否设计为需要数小时才能完成。我在想什么?
更新:
以最荒谬的蛮力方式解决了这个问题。只需运行数千次模拟交配并找出最终具有显性等位基因的部分,直到有足够的精度通过分配。
import random
k = 26
m = 18
n = 25
trials = 0
dominants = 0
while True:
s = ['AA'] * k + ['Aa'] * m + ['aa'] * n
first = random.choice(s)
s.remove(first)
second = random.choice(s)
has_dominant_allele = 'A' in [random.choice(first), random.choice(second)]
trials += 1
if has_dominant_allele:
dominants += 1
print "%.5f" % (dominants / float(trials))
【问题讨论】:
-
你应该问biostars.org
-
iprb 代表什么?
标签: python bioinformatics rosalind