单样本比例检验

7
我想使用 Python 进行“比例的单样本检验”。我找到了这篇文档one sample proportion ztest example,但我不知道如何使用。例如,count 和 nobs 是什么意思?在这两个示例中,example1 给出了 count 和 nobs 的单个数字,而 example2 给出了 2 个数字。
对于结果,我想知道事件发生率高于 60% 的 p 值。
例子1:
>>> count = 5
>>> nobs = 83
>>> value = .05
>>> stat, pval = proportions_ztest(count, nobs, value)
>>> print('{0:0.3f}'.format(pval))
0.695

Example2

>>> import numpy as np
>>> from statsmodels.stats.proportion import proportions_ztest
>>> count = np.array([5, 12])
>>> nobs = np.array([83, 99])
>>> stat, pval = proportions_ztest(counts, nobs)
>>> print('{0:0.3f}'.format(pval))
0.159

我的数据看起来像这样

Yes No
1   0
1   0
1   0
0   1
0   1
1   0
1   0
0   1
0   1
0   1
0   1
0   1

你能帮忙解释如何使用它并给出一些例子吗?

谢谢!

3个回答

8
在示例1中: nobs是试验的总数,即您列表中的行数。 count是成功试验的次数,即您列表中Yes事件的数量。 value是要测试的比例,即基于您问题文本的0.6
在这里,零假设是由这些值给出的单个样本从具有等于指定value比例的分布中绘制而来。
在示例2中:
有两个独立的样本,nobscount向量的第一个条目表示第一个样本,第二个条目表示第二个样本。然后省略value,零假设将是两个样本具有相等的真实比例。

谢谢!我尝试了 count = 6726 nobs = 592458 value = 0.6407 stat, pval = proportions_ztest(count, nobs, value) print('{0:0.3f}'.format(pval)) 但输出结果是 0.000。 - Osca
是的,这是正确的结果。这意味着,如果真实的成功比例为0.6407,则在592458个事件中看到6726个成功的概率几乎为零。样本比例6726/592458 = 0.0114远离0.6407。 - user10605163
我明白了,但是我想打印出p值,它不是零,只是对于Python来说太小了无法打印出来。有没有办法像这样打印结果“< 2.22e-16 ***”? - Osca
您需要手动捕获该情况并打印出非零值。此值仅略高于标准浮点计算仍然有意义的最小精度。 - user10605163
1
你可以使用 from decimal import Decimal print('{0:.2E}'.format(Decimal(pval))) 来打印科学计数法。 - Osca

0

用户user10605163提供的答案对于所问的问题是正确的。

然而,由于statsmodel中的proportions_ztest使用经典统计方法来近似二项分布的正态分布,因此从proportions_ztest得到的p值与从第一原理计算得到的p值不同。

在这个计算时代,似乎不再需要使用正态分布来近似二项分布,特别是对于如此小的试验样本。

您可以使用一些组合数学来计算概率空间,或者您可以模拟许多试验集并直接获得p值,而无需进行任何测试统计。


-1

如何使用 this document 的说明在注释中。 将 p 值以科学计数法输出:

from decimal import Decimal
print('{0:.2E}'.format(Decimal(pval))) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接