1

確率=0.1の「イベント」の配列を作成し、10の各グループの成功数を数えることで、ポアソン分布を設定する簡単なスクリプトがあります。これはほぼ機能しますが、分布は正しくありません(P (0)はP(1)に等しいはずですが、代わりにP(1)の約90%です)。まるで1つずつエラーがあるようですが、それが何であるかわかりません。スクリプトはここからCounterクラスを使用し(私はPython 2.6を使用しており、 2.7は使用していないため)、グループ化では、ここで説明するように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
4

1 に答える 1

1

私はあなたの数学の組み合わせ現実チェックをしました、そしてあなたの結果は実際に正しいようです。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
于 2010-11-09T17:13:58.760 に答える