【问题标题】:Poisson simulation not working as expected?泊松模拟没有按预期工作?
【发布时间】:2010-11-09 16:10:57
【问题描述】:

我有一个简单的脚本来设置泊松分布,方法是构造一个概率 = 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

【问题讨论】:

  • 这里没有泊松分布,只有一个近似值。您正在计算 n = 10,p = 0.1 的(伯努利?)分布。当 p 变为 0 时,保持 np = 1,您将得到泊松分布。我建议尝试 stats.stackexchange.com 看看这种分布是否合理。
  • 我 +1 你的堆栈溢出数学。
  • 听起来不错。愚蠢的错误。

标签: python poisson


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 1970-01-01
    • 2019-08-08
    • 2015-06-12
    • 1970-01-01
    • 2021-08-18
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多