2017-03-04 56 views
0

我有這樣的數據集:Python,計算二項式P值:這段代碼是否正確?

ItemNumber Successes Trials Prob 
15   14   95  0.047 
9625  20   135  0.047 
19   14   147  0.047 
24   12   120  0.047 
20   15   133  0.047 
22   8   91  0.047 
9619  16   131  0.047 
10006  8   132  0.047 
25   15   127  0.047 

欲識別culmulative二項式分佈p值對每個項目,瞭解觀察項目出現的相同或更高數目的概率。

我用這個代碼:

import sys 
import scipy 
from scipy.stats.distributions import binom 
import sys 

for line in open(sys.argv[1], 'r').readlines(): 
    line = line.strip().split() 
    Item,num_succ,num_trials,prob = line[0],int(line[1]),int(line[2]),float(line[3]) 
    print Item + "\t" + str(num_succ) + "\t" + str(num_trials) + "\t" + str(prob) + "\t" + str(1 - (binom.cdf(num_succ, num_trials, prob))) 

輸出看起來是這樣的:

Item NumSucc NumTrials Prob Binomial 
15  14  95   0.047 3.73e-05 
9625 20  135  0.047 1.48e-06 
19  14  147  0.047 0.004 
24  12  120  0.047 0.0043 
20  15  133  0.047 0.00054 
22  8  91   0.047 0.027 
9619 16  131  0.047 0.0001 
10006 8  132  0.047 0.169 
25  15  127  0.047 0.0003 

的問題:當我挑一條線,並檢查所獲得的累積二項式P值對像一個在線工具這個:http://stattrek.com/online-calculator/binomial.aspx,結果不一樣。

例如,

對於項目20(#成功= 15,#試驗= 133,習題= 0.047):

My Binomial P Val = 0.00054 
StatTrek P Val = 0.0015 

不過,我可以從StatTrek看到,我已經看過因爲我想要「等於或大於」,我實際上想要計算的是P(X> = 15)(它是0.0015)。

我竭力要正確編輯上面的代碼,改變從返回P值「找到發病率大於數」「找到發生率大於或等於數量」。如果有人能證明我會感激。如果你看看this question,我試圖關注Volodymyr的評論。

回答

0

二項分佈是一個離散分佈。因此,下列情況屬實:P(X> 14)= P(X> = 15) 。如果binom.cdf計算P(X> N)的概率(是嗎?我沒有找到它的文檔),如果你想要將它改爲P(X> N-1)測試P(X> = N)。