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

Я хочу определить кумулятивное значение 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), но, поскольку я хочу "равный или больший", то на самом деле я хочу вычислить P(X>). = 15) (что составляет 0,0015).

Я изо всех сил пытаюсь правильно отредактировать приведенный выше код, чтобы изменить значение P, возвращаемое из "найти количество инцидентов больше, чем", чтобы "найти количество инцидентов больше или равно". Если бы кто-то мог продемонстрировать, я был бы признателен. Если вы посмотрите на этот вопрос, я пытался последовать комментарию Владимира.

2 ответа

Биноминальное распределение является дискретным распределением. Поэтому верно следующее P(X>14) = P(X>=15).

Поэтому, если binom.cdf вычисляет вероятность для P(X > N) (не так ли? Я не нашел документацию для него), вы должны изменить его на P(X > N - 1), если хотите проверить на P(X >= N).

Если вы хотите вычислить значение p_value для каждой записи, используйте этот код, который намного проще:

#alternative : {‘two-sided’, ‘greater’, ‘less’},
from scipy.stats import binom_test
binom_test(x= number_of_occurance, n = number_of_trail, p= probability, alternative= 'greater')
Другие вопросы по тегам