计算泊松分布概率百分比。

16

在Excel(或OpenOffice Calc)中使用POISSON函数时,需要提供两个参数:

  • 一个整数
  • 一个“平均”数字

它会返回一个浮点数。

在Python中(我尝试过RandomArray和NumPy),它返回一个随机泊松数的数组。实际上我想要的是此事件发生的百分比(它是一个常数,而数组每次都有不同的数字——所以这是否是一个平均数?)。

例如:

print poisson(2.6,6)

返回 [1 3 3 0 1 3](且每次运行结果都不同)。

我从计算/Excel得到的数字是3.19 (POISSON(6,2.16,0)*100)。

我是在错误地使用Python的泊松分布函数(开玩笑!)还是我漏掉了什么?

3个回答

26

scipy 可以满足您的需求。

>>> scipy.stats.distributions
<module 'scipy.stats.distributions' from '/home/coventry/lib/python2.5/site-packages/scipy/stats/distributions.pyc'>
>>> scipy.stats.distributions.poisson.pmf(6, 2.6)
array(0.031867055625524499)
值得注意的是,手动计算也相当容易,这里 也有详细说明。

2
另一种导入方式是:from scipy.stats import poisson,然后 poisson.pmf(6, 2.6) = 0.031867055625524499。 - Jarad

14

手动计算很容易,但这种方式可能会导致溢出。您可以使用循环计算指数和阶乘以避免溢出:

def poisson_probability(actual, mean):
    # naive:   math.exp(-mean) * mean**actual / factorial(actual)

    # iterative, to keep the components from getting too large or small:
    p = math.exp(-mean)
    for i in xrange(actual):
        p *= mean
        p /= i+1
    return p

1

这个页面解释了为什么你会得到一个数组,以及其中数字的含义,至少是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接