Poisson置信区间与numpy

She*_*hep 8 python math statistics numpy scipy

我试图把泊松连续误差条上的柱状图我与matplotlib做,但我似乎无法找到将给予我95%的置信区间假设泊松数据numpy的功能.理想情况下,解决方案不依赖于scipy,但任何事情都可行.这样的功能存在吗?我发现了很多关于自举的内容,但在我看来这似乎有些过分.

She*_*hep 8

我最终根据我在维基百科上找到的一些属性编写了自己的函数.

def poisson_interval(k, alpha=0.05): 
    """
    uses chisquared info to get the poisson interval. Uses scipy.stats 
    (imports in function). 
    """
    from scipy.stats import chi2
    a = alpha
    low, high = (chi2.ppf(a/2, 2*k) / 2, chi2.ppf(1-a/2, 2*k + 2) / 2)
    if k == 0: 
        low = 0.0
    return low, high
Run Code Online (Sandbox Code Playgroud)

这将返回连续(而非离散)边界,这在我的字段中更为标准.


Jai*_*ime 7

使用scipy.stats.poisson和interval方法:

>>> scipy.stats.poisson.interval(0.95, [10, 20, 30])
(array([  4.,  12.,  20.]), array([ 17.,  29.,  41.]))
Run Code Online (Sandbox Code Playgroud)

即使计算非整数值的泊松分布只有有限的意义,也可以计算OP请求的确切置信区间,可以按如下方式进行:

>>> data = np.array([10, 20, 30])
>>> scipy.stats.poisson.interval(0.95, data)
(array([  4.,  12.,  20.]), array([ 17.,  29.,  41.]))
>>> np.array(scipy.stats.chi2.interval(.95, 2 * data)) / 2 - 1
array([[  3.7953887 ,  11.21651959,  19.24087402],
       [ 16.08480345,  28.67085357,  40.64883744]])
Run Code Online (Sandbox Code Playgroud)

也可以使用该ppf方法:

>>> data = np.array([10, 20, 30])
>>> scipy.stats.poisson.ppf([0.025, 0.975], data[:, None])
array([[  4.,  17.],
       [ 12.,  29.],
       [ 20.,  41.]])
Run Code Online (Sandbox Code Playgroud)

但由于分布是离散的,返回值将是整数,置信区间不会完全超过95%:

>>> scipy.stats.poisson.ppf([0.025, 0.975], 10)
array([  4.,  17.])
>>> scipy.stats.poisson.cdf([4, 17], 10)
array([ 0.02925269,  0.98572239])
Run Code Online (Sandbox Code Playgroud)