Statsmodels的proportions_ztest采用哪种方差计算方式?
proportions_ztest 与手动正态计算p值不匹配的原因
两者结果不一致的核心原因是proportions_ztest默认的方差估计逻辑和你手动计算时用的方差来源不同,和你用原始计数还是比例计算没有关系:
- 你手动写的
stats.norm.cdf(40, 60, np.sqrt(20000* 0.003*(1-0.003)))数学逻辑完全自洽:二项分布的正态近似中,直接对原始计数计算累积概率,和先把计数转成样本比例、标准化为Z值再算累积概率是完全等价的,线性缩放不会改变正态分布的累积概率结果。 proportions_ztest存在一个容易被忽略的参数prop_var,默认值为False。默认配置下,函数不会使用你传入的零假设值value=0.003计算比例方差,而是用样本实际观测到的比例p_hat = count/nobs做方差估计。对应你的案例,样本比例p_hat=40/20000=0.002,用该值计算的标准误小于用零假设p0=0.003计算的标准误,最终得到的Z统计量绝对值更大,p值自然和你手动计算的结果不匹配。- 要让两者结果完全对齐,只需要在调用函数时显式指定
prop_var=0.003,告知函数使用零假设下的比例计算方差即可,修正后的代码如下:
stat, pvalue = proportions_ztest( count=40, nobs=20000, value=0.003, alternative="smaller", prop_var=0.003 ) pvalue
- 补充说明:该函数默认参数
correction=False,即不启用耶茨连续性修正,这部分逻辑和你手动计算的逻辑一致,不是本次结果差异的来源。如果手动开启连续性修正,函数会对离散二项计数做0.5的偏移调整,此时结果才会产生新的差异。
内容的提问来源于stack exchange,提问作者paka
相关产品推荐
相关产品推荐

