1
我有一個簡單的腳本,通過構造概率= 0.1的「事件」數組,然後計算每組10個成功的數量來設置泊松分佈。它幾乎可以工作,但分佈不太正確(P(0)應該等於P(1),但是代替P(1)的約90%)。這就像是一種錯誤,但我無法弄清楚它是什麼。該腳本使用來自here的Counter類(因爲我有Python 2.6而不是2.7),並且分組使用itertools,如here所述。這不是一個隨機問題,重複的結果非常嚴格,整體意義看起來不錯,團隊規模看起來不錯。任何想法,我已經搞砸了?泊松模擬不能按預期工作?
from itertools import izip_longest
import numpy as np
import Counter
def groups(iterable, n=3, padvalue=0):
"groups('abcde', 3, 'x') --> ('a','b','c'), ('d','e','x')"
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
def event():
f = 0.1
r = np.random.random()
if r < f: return 1
return 0
L = [event() for i in range(100000)]
rL = [sum(g) for g in groups(L,n=10)]
print len(rL)
print sum(list(L))
C = Counter.Counter(rL)
for i in range(max(C.keys())+1):
print str(i).rjust(2), C[i]
$ python script.py
10000
9949
0 3509
1 3845
2 1971
3 555
4 104
5 15
6 1
$ python script.py
10000
10152
0 3417
1 3879
2 1978
3 599
4 115
5 12
你不必在這裏泊松分佈,只是一個近似值到一個。你計算一個(伯努利?)分佈,n = 10,p = 0.1。當p變爲0時,保持np = 1,你會得到一個泊松分佈。我建議嘗試stats.stackexchange.com看看這種分佈是否合理。 – 2010-11-09 17:01:57
我+1你堆棧溢出的數學。 – 2010-11-09 17:23:43
<重擊自我>聽起來是對的。愚蠢的錯誤。 – telliott99 2010-11-09 17:50:30