跳转至

7.3   学生氏检验

电池抽检里,厂家给了长期标准差 \(\sigma\)。但现实里更多时候,小率只有一小份样本。比如社团帮社区检测 16 只节能灯泡,包装宣称平均寿命 1100 小时,样本测得:

样本量 样本均值 样本标准差
16 1080 小时 100 小时

这一次,\(\sigma\) 不知道,只能用样本标准差 \(s\) 顶上。问题也就变成:这个额外的不确定性要不要补偿?

图 7.3.0 小率带来小样本灯泡寿命数据

如果没有总体标准差,直接把 z 公式里的 σ 换成 s 不就好了?
可以换,但分布也要换。因为 s 本身也是从小样本里估出来的。

7.3.1   σ 未知时要用胖尾补偿

z 检验的分母是:

\[ \frac{\sigma}{\sqrt n} \]

t 检验把未知的 \(\sigma\) 换成样本标准差 \(s\)

\[ t=\frac{\bar x-\mu_0}{s/\sqrt n} \]

\(s\) 本身会波动,尤其当 \(n\) 很小时,分母并不稳定。于是参考分布不再是标准正态,而是 t 分布(t-distribution)

图 7.3.1 σ 未知时 t 分布用胖尾补偿不确定性

自由度(degrees of freedom)为:

\[ df=n-1 \]

样本越小,t 分布尾巴越胖,临界值越大;样本越大,t 分布越接近 z 分布。

你知道吗

t 分布由 William S. Gosset 在 1908 年提出。他在吉尼斯酒厂工作,发表论文时使用笔名 Student,所以它也常被称为 Student's t 分布。


7.3.2   单样本 t 检验:灯泡数据怎么判

灯泡问题写成假设:

\[ H_0:\mu=1100,\qquad H_1:\mu\ne1100 \]

统计量:

\[ t=\frac{1080-1100}{100/\sqrt{16}}=-0.80 \]

自由度:

\[ df=16-1=15 \]

\(\alpha=0.05\) 双侧检验下,临界值约为 \(\pm 2.131\)。因为 \(|-0.80|<2.131\),所以不拒绝 \(H_0\)

平均少了 20 小时,居然还不显著?
样本只有 16 个,波动又有 100 小时。差距还没大到能越过噪声。

7.3.3   两组比较优先用 Welch

若比较两个独立小组,比如 A 班和 B 班的练习成绩,常用 独立双样本 t 检验(two-sample t-test)

传统 Student t 检验假设两组方差相等。但现实里两组方差常常不一样,所以更推荐 Welch t 检验(Welch's t-test)

\[ t=\frac{\bar x_1-\bar x_2} {\sqrt{s_1^2/n_1+s_2^2/n_2}} \]

Welch 的自由度由近似公式计算,软件会自动处理。

默认建议

在 Python 中比较两个独立样本时,优先使用 scipy.stats.ttest_ind(a, b, equal_var=False)。这就是 Welch t 检验,少了一个“方差相等”的额外假设。

那 Student t 检验是不是就不用学了?
要知道它的假设,但实战默认 Welch 更稳。老方法不是不能用,只是别无意识地用。

7.3.4   三种 t 检验别混

场景 问题 Python
单样本 t 一组均值是否等于某值 ttest_1samp
独立双样本 t 两组不同对象均值是否不同 ttest_ind
配对 t 同一批对象前后是否变化 ttest_rel

配对 t 检验会在 §7.8 单独讲。这里先记住:如果是同一批学生训练前后各测一次,就不能当成两个独立样本。

独立和配对是设计问题

统计检验不是看表格长相决定的,而是看数据如何产生。两列数据若来自同一批对象的前后测量,就是配对结构。


7.3.5   Python 跑单样本和 Welch t

import numpy as np
from scipy import stats

# 单样本 t:灯泡寿命
n = 16
xbar = 1080
s = 100
mu0 = 1100
t_stat = (xbar - mu0) / (s / np.sqrt(n))
p_two = 2 * stats.t.cdf(-abs(t_stat), df=n - 1)
print(f"单样本 t = {t_stat:.2f}, p = {p_two:.4f}")

# Welch t:两班成绩
rng = np.random.default_rng(2026)
a = rng.normal(78, 12, 20)
b = rng.normal(72, 10, 25)
t, p = stats.ttest_ind(a, b, equal_var=False)
print(f"Welch t = {t:.2f}, p = {p:.4f}")

完整脚本见:

# docs/assets/scripts/ch07_hypothesis_testing/03_t_test/main.py

7.3.6   什么时候 t 检验会失灵

t 检验依赖几个基本条件:

  • 观测值近似独立。
  • 数据没有极端离群值主导。
  • 小样本时总体分布不要严重偏态。
  • 双样本比较时先分清独立还是配对。

如果样本很小又强偏态,可以考虑非参数检验;如果数据是同一批对象前后变化,使用配对 t;如果是比例问题,不要硬套 t。

z 和 t 的分界线终于清楚了:σ 已知用 z,σ 未知就用 t,尤其小样本更要用 t。
是的。下一节我们把“拒不拒”的关键数字 p 值单独拆开。

小率的笔记本

t 检验用于 \(\sigma\) 未知的均值问题。单样本统计量是 \(t=(\bar x-\mu_0)/(s/\sqrt n)\),自由度通常是 \(n-1\)。两独立组比较时默认 Welch;同一批对象前后测量要用配对 t。