Python与R的二项式测试

时间:2017-06-08 05:45:41

标签: python r scipy binomial-cdf

我正在尝试重新实施在R中使用Python初步开发的二项式测试。但是,我不确定我是否使用了正确的功能。

R中,我得到:

> binom.test (2, 8, 11/2364, alternative = "greater")
0.25

Python& SciPy,我用

from scipy.stats import binom
binom.sf(2, 8, float(11)/float(2364))
5.5441613055814931e-06

实际上我必须做binom.sf(2, 8, float(11)/float(2364))以确保第三个参数不是0因为int div。

为什么值不同?我是否必须为Scipy / binom.sf指定时刻? 我应该使用其他一些图书馆吗?

1 个答案:

答案 0 :(得分:3)

这是我在R中得到的:

> binom.test(2, 8, 11/2364, alternative = "greater")

    Exact binomial test

data:  2 and 8
number of successes = 2, number of trials = 8, p-value = 0.0005951
alternative hypothesis: true probability of success is greater than 0.00465313
95 percent confidence interval:
 0.04638926 1.00000000
sample estimates:
probability of success 
                  0.25 

>

请注意,p值为0.0005951。

将其与scipy.stats.binom_test(仅返回p值)的结果进行比较:

In [25]: from scipy.stats import binom_test

In [26]: binom_test(2, 8, 11/2364, alternative='greater')
Out[26]: 0.00059505960517880572

所以这与R同意。

要使用scipy.stats.binom的生存函数,您必须调整第一个参数(如Marius的评论中所述):

In [27]: from scipy.stats import binom

In [28]: binom.sf(1, 8, 11/2364)
Out[28]: 0.00059505960517880572

(我使用的是Python 3,因此11/2364等于0.004653130287648054。如果您使用的是Python 2,请确保将该分数写为11.0/2364float(11)/2364。)