二项分布样本成功率双尾假设检验求助:p值结果异常
问题诊断与修正
核心错误点
- 样本2成功率计算笔误:代码中
hatP2 = x1/n2是错误的,应该用样本2的成功数x2计算,即hatP2 = x2/n2,误用样本1的成功数导致两组成功率差值计算完全错误。 - 双尾p值计算逻辑错误:当Z值为负数时,
1 - stats.norm.cdf(Z)会得到大于0.5的结果,乘以2后必然超出p值0-1的合理范围。正确的双尾p值计算应基于Z的绝对值,利用正态分布的对称性处理。
修正后的代码
import math import scipy.stats as stats x1=195 x2=5481 n1=135779 n2=81530 # 合并成功率计算(简化等价写法) hatP = (x1 + x2)/(n1 + n2) hatQ = 1 - hatP # 修正样本成功率计算 hatP1 = x1/n1 hatP2 = x2/n2 # 计算Z统计量 Z = (hatP1 - hatP2)/(math.sqrt(hatP*hatQ*(1/n1 + 1/n2))) # 正确双尾p值计算方式 pVal = 2 * stats.norm.cdf(-abs(Z)) # 等价写法:2*(1 - stats.norm.cdf(abs(Z))) print(f"Z: {Z}") print(f"pVal: {pVal}")
结果说明
修正后,样本2的实际成功率(约0.0672)远高于样本1(约0.0014),Z值会呈现绝对值较大的负数,对应的p值会远小于1,完全符合统计学中p值的合理范围。
内容的提问来源于stack exchange,提问作者user3476463
相关产品推荐
相关产品推荐

