binom_test与正态分布假设检验结果差异问题排查请求
两组成功率显著性差异检验的结果矛盾排查
问题背景
我有两组试验次数和成功次数均不同的样本,需要对比两组成功率的显著性差异。使用scipy.stats.binom_test和参考编写的正态分布假设检验函数fnDiffProp时,结果差异极大:binom_test的p值趋近于0,而fnDiffProp得出的p值为1.82(不符合逻辑,p值范围应为0-1)。我怀疑binom_test使用有误或fnDiffProp存在错误(猜测hatP计算可能出错)。此外,statsmodels的proportions_ztest结果与binom_test一致,p值均趋近于0。
样本数据
- 样本1:195次成功,135779次试验
- 样本2:5481次成功,81530次试验
各方法运行结果
scipy.stats.binom_test
binom_test(x=5481, n=81530, p=0.0014, alternative='greater') → 0.0 binom_test(x=5481, n=81530, p=0.0014, alternative='two-sided') → 0.0
注:这里的p=0.0014是样本1的成功率(195/135779≈0.001436)。
自定义函数fnDiffProp
fnDiffProp(x1=195, x2=5481, n1=135779, n2=81530) → (-1.3523132192521408, 1.82372486268966)
输出的p值1.82超出合理范围,明显异常。
statsmodels.proportions_ztest
number_of_successes = [5481, 195] total_sample_sizes = [81530, 135779] test_stat, p_value = proportions_ztest(number_of_successes, total_sample_sizes, alternative='larger') → 93.10329278601503,0.0
补充测试用例:
number_of_successes = [5389, 119] total_sample_sizes = [80000, 80000] test_stat, p_value = proportions_ztest(number_of_successes, total_sample_sizes, alternative='larger') → 72.26377467032772,0.0
问题分析
- binom_test使用验证:
binom_test的参数设置是将样本2的成功次数与样本1的成功率对比,从样本数据看,样本2的成功率(5481/81530≈0.0672)远高于样本1的0.0014,因此p值趋近于0是合理的,说明样本2成功率显著高于样本1。 - fnDiffProp的错误推测:输出的p值大于1,显然违反统计常识,大概率是函数内部计算逻辑错误。常见问题包括:
- 合并比例
hatP的计算错误:正确的合并比例应为(x1+x2)/(n1+n2),若函数中误用了其他计算方式(比如颠倒分子分母、或错误加权),会导致标准误计算错误,进而影响Z值和p值。 - p值计算逻辑错误:比如未正确调用正态分布的生存函数,或符号处理错误,导致计算出超出0-1范围的数值。
- 合并比例
内容的提问来源于stack exchange,提问作者user3476463
相关产品推荐
相关产品推荐

