Menu

R 语言置信区间:t.test()、confint() 与 prop.test()

为均值、比例和模型系数求置信区间:t.test()、prop.test()、confint(),以及“95% 置信”到底是什么意思,样本量又如何决定区间宽度。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

“95% 置信”到底是什么意思

置信区间把一个点估计(“样本均值是 5.61”)变成一个如实反映不确定性的范围(“真实均值很可能在 5.29 到 5.93 之间”)。但“95% 置信”是统计学中最常被误读的说法之一,所以我们先把它讲清楚。

这个 95% 描述的是方法,而不是区间本身。想象一下把你的研究重复一遍又一遍:每次抽取新样本,每次得到新区间。这些区间会来回跳动,其中大约 95% 会包含真实值,5% 会错过。你手上那一个区间,只是这个过程中的一次抽取。95% 的意思并不是:“真实均值有 95% 的概率落在这两个数之间。”真实均值是一个固定的(未知的)数,它不会在区间里进进出出;变化的是区间。

实际使用时,通俗的理解也没问题:区间就是与你的数据相符的那些取值范围。只是当有人追问时,你要清楚自己有资格做出哪种表述。

均值的置信区间:简单方法

每次 t.test() 都会附带一个置信区间;你可以只为了拿到它而运行这个检验:

均值为 5.61,95% 置信区间大约是 5.29 到 5.93。区间能做到单纯的均值做不到的事:它告诉你十个观测值实际能换来多少精度。

手动计算同一个置信区间

这个区间背后的公式值得亲手推一遍,因为它能帮你看懂今后遇到的每一个置信区间:估计值 ± 临界值 × 标准误。

和 t.test() 的输出对比一下:区间完全一样,一位不差。其中有三个组成部分:

  • 标准误 sd(x)/sqrt(n) 衡量样本均值的波动有多大(标准差和标准误的区别见描述性统计)。
  • qt(0.975, df) 是 t 临界值:要达到 95% 的覆盖率,两侧尾部各留 2.5%,所以是 0.975。当 df = 9 时,它约为 2.26,比正态分布的 1.96 更大。这是小样本要付出的代价,因为标准差也是从同一份数据里估计出来的。
  • 误差范围是两者的乘积,也就是新闻标题里引用的那个“±”数字。

调整置信水平:90%、99% 与权衡

conf.level 控制覆盖率,也随之决定了宽度:

更高的置信度要用更宽的区间来换:99% 的区间必须宽到一百次里有九十九次是对的,所以会被拉长;90% 的区间更窄,但错过真实值的频率是 95% 区间的两倍。天下没有免费的午餐,只有一个可以调节的旋钮。95% 纯粹是一种惯例:没有特别理由时值得沿用的默认值,而不是自然法则。

比例的置信区间:prop.test()

假设在接受调查的 120 名用户中,有 47 人使用了一项新功能。真实使用率的合理范围是多少?

样本比例为 0.39,95% 置信区间大约是 0.30 到 0.49。所以只有附上这个 ±9 个百分点的范围,“使用率约为 40%”才是如实的说法。prop.test() 使用的近似方法比教科书上的 p ± 1.96 × sqrt(p(1−p)/n) 公式更好(它是带连续性校正的 Wilson 型区间),这在比例接近 0 或 1 时最为重要:教科书上的区间可能会超出 [0, 1] 的范围,而这个不会。计数非常小时,binom.test(47, 120)$conf.int 给出精确版本。

模型系数的置信区间:confint()

拟合好的模型通过一个泛型函数就能得到区间:

每一行给出线性回归中一个系数的区间:wt 斜率的 95% 区间大约是每 1000 磅 −6.5 到 −4.2 mpg。这比摘要中的 p 值信息量更大:它说明这个效应不仅不为零,而且至少约为 4 mpg,可能高达约 6.5 mpg。

对于逻辑回归 glm(),confint(fit) 的用法相同,但返回的是对数优势比的上下限;取指数就能得到优势比的区间:exp(confint(fit))。记住,此时“没有效应”的参照值从 0 变成了 1。

样本量:平方根定律

宽度随 sqrt(n) 缩小,由此可以得出一个好记的结论:数据变为四倍,区间宽度减半。用模拟数据来看看效果:同一个分布,一份样本的大小是另一份的 4 倍(设置种子让结果可复现,见随机数):

两个宽度之比接近 2:1(由于抽样噪声,不会完全精确)。正是这个平方根让精度变得昂贵:前 100 个观测值带来的区间收窄,比之后 300 个加起来还多;而要把一个已经很窄的区间再缩小一半,总是要付出到目前为止全部投入的 4 倍。

置信区间与 p 值:同一个检验的两种视角

置信区间和假设检验是同一份信息的两种呈现方式。95% 置信区间所包含的,恰好是在 0.05 水平下的双侧检验无法拒绝的那些参数值。所以:

  • 均值差的置信区间不包含 0 ⇔ t 检验给出 p < 0.05。
  • 优势比的置信区间不包含 1 ⇔ 该系数的 p < 0.05。

有了区间,你通常就有了更好的概括:它既给出了同样的显著性结论,又给出了以实际单位表示的效应大小。“p = 0.03”只说明存在差异;“95% 置信区间:0.2 到 7.6”则说明差异存在,而且可能微不足道,也可能非常大,而这往往才是真正重要的发现。

要点回顾

  • 95% 描述的是这个方法长期的命中率,而不是这一个区间包含真实值的概率。
  • 均值:t.test(x)$conf.int,或手动计算:均值 ± qt(0.975, n−1) × 标准误。
  • 比例:prop.test(x, n)$conf.int;模型系数:confint(fit)(对 glm 取指数得到优势比)。
  • 置信度越高 = 区间越宽;95% 是惯例,不是定律。
  • 宽度随 sqrt(n) 缩小:数据变为 4 倍,区间宽度减半。
  • 置信区间包含所有在 0.05 水平下的检验不会拒绝的值;而且与 p 值不同,它能显示效应大小。

下一篇:这一切背后的模拟工具箱,用 rnorm、runif、sample 和 set.seed 生成随机数。

常见问题

在 R 中如何计算 95% 置信区间?

对于均值,最快的方法是 t.test(x)$conf.int。对于比例,用 prop.test(successes, trials)$conf.int。对于已拟合的 lm() 或 glm() 模型的系数,用 confint(fit)。三者默认都是 95%;用 conf.level = 0.90(或 0.99)修改。

95% 置信区间到底是什么意思?

它描述的是方法本身:如果把研究重复很多次,每次都构造一个区间,那么大约 95% 的区间会包含真实值。它并不是说“参数有 95% 的概率落在这个具体的区间里”:参数是一个固定的数,任何一个具体的区间要么包含了它,要么没有。

在 R 中如何手动计算置信区间?

均值 ± 临界值 × 标准误。对于均值:m <- mean(x); se <- sd(x)/sqrt(length(x)); m + c(-1, 1) * qt(0.975, df = length(x) - 1) * se。qt(0.975, df) 求的是 t 临界值,它在两侧尾部各留下 2.5%。

样本量如何影响置信区间?

区间宽度随 n 的平方根缩小:样本量变为四倍,区间宽度减半。正是这个平方根,让最后那一点精度变得昂贵:从 ±2 缩小到 ±1,需要四倍而不是两倍的数据。

Coddy 编程语言插图

和 Coddy 一起学编程

开始