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

使用R语言与手动计算置信区间结果不一致的原因咨询

置信区间计算差异问题解析

数据集

data <- c(187, 181, 178, 188, 173, 179, 177, 172, 187, 193, 189, 183, 169, 179, 173, 175, 174, 183, 175, 172, 167, 189, 183)

两种计算方法及结果

方法1:R代码计算

代码实现:

x <- mean(data)
n <- length(data)
s <- sd(data)
margin <- qt(0.8, df=n-1)*s/sqrt(n)
low <-  x - margin
high <- x + margin

low  # 输出:178.109
high # 输出:180.6736

得到置信区间:(178.109, 180.6736)

方法2:手动计算

基于单样本t检验公式转换:

t = (x - μ)/(s/√n) 
推导得:μ = x ± t*(s/√n)

代入数值:
μ = 179.3913 ± 1.32124*(7.165188/4.795832)

得到置信区间:(177.4173, 181.3653)

差异原因分析

核心错误在于R代码中误用了t分布的单侧分位数,而非置信区间所需的双侧分位数:

  • 对于80%置信区间,我们需要的是t分布中间80%的区域,即两侧各有10%的概率。对应的分位数应为qt(1 - (1-0.8)/2, df = n-1),也就是qt(0.9, df=22),该值为1.321237,与你手动计算使用的t值1.32124完全一致。
  • 你R代码中使用的qt(0.8, df=22)返回的是单侧80%分位数(即P(T ≤ 0.8577673) = 0.8),对应的双侧区间概率仅为60%,因此计算出的置信区间比预期的80%区间更窄。

若修正R代码中的分位数参数,使用qt(0.9, df=22)重新计算:

margin_correct <- qt(0.9, df=n-1)*s/sqrt(n)
low_correct <- x - margin_correct  # 177.4173
high_correct <- x + margin_correct # 181.3653

结果会与手动计算的80%置信区间完全一致。

关于你提到的“R计算的90%置信区间与手动计算的80%置信区间一致”,本质是混淆了置信水平与分位数参数的对应关系:计算90%置信区间需要使用qt(0.95, df=22)(双侧各5%概率),若错误使用qt(0.9, df=22),得到的实际是80%置信区间,因此与你的手动结果匹配。

内容的提问来源于stack exchange,提问作者curiousRguy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:20:12