2013-02-08 42 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