2013-02-08 41 views
5

我试图从rosalind项目中解决一个练习,但显然不断做出一些错误。全文可用here,但我较短的抽象解释和尝试如下。请帮我看看我做错了什么:算法/可能性练习

我们有3组物品:AA,Aa,aa。我们从Aa开始,并做k迭代产生新项目。在每次迭代中组每一个项目:

  • Aa能产生:AA(25%),Aa(50%),aa(25%)
  • AA能产生:AA(50%),Aa( 50%)
  • aa能产生:aa(50%),Aa(50%)

作为迭代的结果,我们计算的预计数每个组的项目,假设我们在前一次迭代中从每个项目生成2个新项目。所以,我们最终得到:

  • 零ITER:AA:0,Aa:1,aa:0
  • 1 ITER:AA:3.5,Aa:1,aa:.5
  • 第二ITER:AA:1,Aa:2,aa:1
  • 等 - 的比例保持在1:2:1组之间

每次迭代的期望值/人口总数为2^iteration,并且项目在组Aa中的概率始终为50%。

到目前为止,我希望我是对的,但我们实际上是:如果我们重复实验两次,至少有N项目在Aa组两次都有至少N项目的机会。 (应相当于:什么是具有组AaBb至少N项目,如果我们组的列表扩展到AABBAABb,...,从原来的问题的机会)

所以项目的概率在Aa为50%,来自迭代(或2^iteration)的期望值的总体总和,并且使用测试数据(k = 2,N = 1)在scipy中投掷该数据,我们得到该组Aa中的至少一个项目:

In [75]: bin = scipy.stats.binom(4, .5) 
In [76]: sum(b.pmf(x) for x in range(1, 4+1)) 
Out[76]: 0.93750000000000022 

并且这至少对于一个项目如果我们有两组组合,那么AaBb

In [77]: sum(b.pmf(x) for x in range(1, 4+1))**2 
Out[77]: 0.87890625000000044 

这与答案完全不同的原题:0.684

哪里我犯了一个错误?(如果可能的话,请只指出错误,而不是给出解决方案,以免有人试图自行解决它的破坏者)

+0

你可以添加一个pastebin吗?你的代码? – Killrawr

+0

@Killrawr是的。这真是太难了,因为它是一次性脚本,但它的确如我所描述的那样:http://pastebin.com/uJz9Gb2Q – viraptor

+0

我没有看到AA和aa来自哪里;这是否应该与人类繁殖的方式一致,即来自每个父母的一组染色体?那会给AB,Ab,aB和ab作为染色体的可能性,不是吗? –

回答

1

我首先按照你的例子,认为它似乎有意义,但过了一段时间,我发现问题出在哪里。

这里是一个指向你的错误:

您已经计算得到至少一个Aa--在第二generetion和至少一个--Bb的概率。但是这还不足以确定第二代是否至少有一个AaBbAa----Bb必须重合。

例如考虑以下第二代:aaBb, AABb, Aabb, AaBB所有个人都有Aa----Bb,但在这一代中没有AaBb

+0

好的,但考虑到p1 ==找到至少一个'Aa'的概率和p2 ==找到至少一个'Bb'的概率,我们知道p1 == p2并且因为它们是独立的,所以至少找到一个' AaBb'是p1 * p2。找到至少一个'Aa-'和至少一个'-Bb'将会是1 /(1/p1 + 1/p2),对吗?我预计p ** 2将考虑到相同的地理类型。 – viraptor

+1

@viraptor是的,它们是独立的,所以如你所说,找到'AaBb'的概率是'p1 * p2'。这是您在二项分布中应该用作“p”的值。 (这与最终结果的平方不一样) – user1884905

+0

是的,谢谢 - 那就是问题了:) – viraptor