我正在尝试解决 rosalind 项目中的一个练习,但显然一直在犯一些错误。全文可见here ,但我更简短的抽象解释和尝试如下。请帮我找出我做错了什么:
我们有 3 组项目:AA
、Aa
、aa
。我们从 Aa
中的 1 开始,进行 k
次迭代生成新项目。在每次迭代中,组中的每个项目:
Aa
可以产生:AA
(25%),Aa
(50%),aa
(25 %)AA
可以产生:AA
(50%),Aa
(50%)aa
可以产生:aa
(50%),Aa
(50%)
作为迭代的结果,我们计算每组的预期项目数,假设我们在前一次迭代中从每个项目生成 2 个新项目。所以我们最终得到:
- 第 0 个迭代器:
AA
:0,Aa
:1,aa
:0 - 第一个迭代:
AA
:.5,Aa
:1,aa
:.5 - 第二个迭代:
AA
:1,Aa
:2,aa
:1 - 等- 组间比例保持在 1:2:1
每次迭代的期望值/总体的总和为 2^iteration
并且项目在组 Aa
中的概率始终为 50%。
到目前为止,我希望我是对的,但我们实际追求的是:在组 Aa
中至少有 N
个项目的机会是多少如果我们重复实验两次。 (应该等同于:如果我们将组列表扩展到 AABB
,那么组 AaBb
中至少有 N
项的机会是多少, AABb
,....来自原始问题)
所以项目在 Aa
中的概率是 50%,迭代期望值的总体总和(或 2^iteration
),并使用测试数据(k=2,N=1),我们只为 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
我哪里做错了? (如果可能的话请只指出错误,而不是给出解决方案,以免剧透留给尝试自行解决的人)
最佳答案
我先是按照你的例子,觉得好像有道理,但过了一会儿我发现了问题所在。
这里指出了您的错误:
你已经计算了在第二代中至少得到一个Aa--
和至少一个--Bb
的概率。但这还不足以找出二代是否至少有一个AaBb
,Aa--
和--Bb
有重合。
例如考虑以下第二代:aaBb, AABb, Aabb, AaBB
所有个体都具有 Aa--
或 --Bb
但是这一代没有AaBb
。
关于算法/概率练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14764571/