我有一个简单的脚本来建立泊松分布,方法是构造一个概率= 0.1的“事件”数组,然后计算每10组中成功的次数。这几乎可以用,但是分布并不正确(P (0)应该等于P(1),但大约等于P(1)的90%。好像有一种错误,但我不知道这是什么。该脚本使用here中的Counter类(因为我有Python 2.6而不是2.7),并且分组使用了如here所述的itertools。这不是一个随机的问题,重复给出的结果非常严格,总体平均水平看起来不错,小组规模也很好。有什么想法我搞砸了吗?

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

最佳答案

我对您的数学进行了组合现实检查,看起来您的结果实际上是正确的。 P(0)不应大致等于P(1)

.9^10 = 0.34867844 = probability of 0 events
.1 * .9^9 * (10 choose 1) = .1 * .9^9 * 10 = 0.387420489 = probability of 1 event


我想知道您是否偶然地这样算了数学:

.1 * .9^10 * (10 choose 1) = 0.34867844 = incorrect probability of 1 event

关于python - 泊松模拟无法按预期工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4135837/

10-09 16:43