R语言prop.test()的p值、置信区间与手动计算的差异疑问
比例置信区间:手动公式与R中prop.test()的差异原因
你手动计算的是Wald正态近似置信区间,而R的prop.test()默认输出的是Wilson得分置信区间,二者计算逻辑完全不同,这就是差异的核心原因,和舍入误差无关。
两种区间的计算逻辑差异
Wald区间(你的手动公式):直接用样本比例$\hat{p}$代入正态近似公式:
$$\hat{p} \pm z^* \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}$$
其中$z^*$是标准正态分布的分位数(95%置信度下为1.96)。这种方法依赖大样本近似,当样本量小或比例接近0/1时偏差较大。Wilson得分区间(prop.test()默认):通过求解二次不等式得到,核心是考虑了样本比例的抽样分布偏倚,推导基于得分检验的逆过程,最终区间为:
$$\frac{\hat{p} + \frac{z^{*2}}{2n}}{1 + \frac{z^{2}}{n}} \pm \frac{z^}{1 + \frac{z^{*2}}{n}} \sqrt{\frac{\hat{p}(1-\hat{p})}{n} + \frac{z{*2}}{4n2}}$$
即使关闭连续性修正(correct=FALSE),prop.test()依然使用Wilson区间,而非Wald区间。
结合你的代码验证
你的数据:$n=52$,$x=21$,样本比例$\hat{p}=21/52≈0.4038$
- 手动Wald区间计算结果:约(0.2711, 0.5365)
prop.test(x,n,correct=FALSE)输出的Wilson区间:(0.2769, 0.5455)- 若开启连续性修正(
correct=TRUE),区间会进一步变宽,结果为(0.2642, 0.5580)
你的代码示例
n=52 x=21 phat=x/n phat ## by formula n*phat n*(1-phat) # so condition is met #95%CI me=qnorm(.975)*sqrt(phat*(1-phat)/n) lb=phat-me lb ub=phat+me ub ## p value p0=.5 z=(phat-p0)/sqrt(p0*(1-p0)/n) z pvalue=2*pnorm(-abs(z)) pvalue ##by prop.test prop.test(x,n,0.5,correct =FALSE) prop.test(x,n,0.5)
内容的提问来源于stack exchange,提问作者Pai
相关产品推荐
相关产品推荐

