2013-02-11 10 views
7

私はmatplotlibを使って作っているヒストグラムにポアソンの連続エラーバーを入れようとしていますが、私はpoissonianと仮定して95%の信頼区間を与えられますデータ。理想的には、解はscipyに依存しないが、何かが効くだろう。そのような機能は存在しますか?私はブートストラップについて多くを見つけましたが、これは私の場合には少し過剰です。 scipy.stats.poissonを使用ポアソン信頼区間とnumpy

答えて

7

、及びinterval方法:それは唯一の非整数値のポアソン分布を計算するために限られた意味が

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

にもかかわらず、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]]) 

それは使用することも可能ですppf方法:

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

しかし

分布は、戻り値は整数になる離散的で、かつ信頼区間は、正確には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]) 
+0

正確な戻り値を取得する方法を知っていますか? – Shep

+0

@Shepちょうどカイ2乗に基づいてメソッドのバージョンを追加しましたが、 'interval'を使用して私の答えにしました。 – Jaime

6

some properties I found on Wikipedia

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 

これは、私のフィールドでより標準的な連続的な(離散ではなく)境界を返します。

1

この問題は、天文学に多くを来て、この論文は、外出先-するために、これらの信頼区間のための参照である(私のフィールド!):Gehrels 1980

それが持つ任意の信頼区間のためにそれに数学をたくさん持っていますポアソン統計であるが、両面95%信頼区間(2シグマのガウス信頼区間、または本稿の文脈ではS = 2に相当する)に対して、N事象の場合の上限および下限信頼限界の簡単な解析式測定されます

upper = N + 2. * np.sqrt(N + 1) + 4./3. 
lower = N * (1. - 1./(9. * N) - 2./(3. * np.sqrt(N))) ** 3. 

ここで私はあなたのためにPythonの形式でそれらを入れているeady。あなたが必要とするのは、numpyか他のお気に入りの平方根モジュールだけです。 +/-値ではなく、イベントの上限と下限を指定することに注意してください。あなたはそれらを得るためにこれらの両方からNを差し引くだけです。

これらの公式の正確さについては、必要な信頼区間については論文を参照してください。しかし、これらの式は、ほとんどの実用的なアプリケーションに対して十分に正確である必要があります。

+0

@firelynxの編集ありがとうございます。この方法ではるかに読みやすくなります。私はソフトウェアエンジニアリングよりも科学を行うので、私は頻繁にPEP8に従うことを忘れています。 –

関連する問題