You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:50:32