章节学习页
# 第 5 章 参数假设检验
本章在学什么
一句话:本章学习如何用样本证据判断一个关于总体参数的假设是否应该被拒绝。
在统计学习链条中的位置:
点估计/区间估计 -> 构造检验统计量 -> 设定错误率 -> 拒绝或不拒绝原假设
课程和工作用途:当你要判断“新方法是否有效”“均值是否偏离基准”“两个方案是否有差异”“方差是否变大”“比例是否超过目标”时,参数假设检验就是标准语言。
教材目录
- 5.1 假设检验的若干基本概念
- 5.2 正态总体参数的假设检验
- 5.3 似然比检验
- 5.4 一致最优检验与无偏检验
- 5.5 假设检验与区间估计
- 习题 5
必须掌握的概念
- [x] 原假设 H0
- [x] 备择假设 H1
- [x] 显著性水平 alpha
- [x] 检验统计量
- [x] 拒绝域
- [x] p 值
- [x] 第一类错误
- [x] 第二类错误
- [x] 检验功效 power
- [x] 单侧检验和双侧检验
- [x] 似然比检验
- [x] 假设检验与置信区间的关系
了解即可的内容
- [ ] 一致最优检验 UMPT:知道它是在一类备择下功效最强的检验,本阶段不追完整证明。
- [ ] 无偏检验:知道它要求在备择下拒绝概率不低于显著性水平,本阶段先理解直觉。
概念填充区
参数假设检验 hypothesis testing
- 一句话定义:假设检验是用样本数据判断是否拒绝一个关于总体参数的原假设。
- 直觉解释:先假设一个基准说法成立,再看样本结果是否“异常到不太像这个假设下会发生”。
- 专业表达:给定 \(H_0\)、\(H_1\)、显著性水平 \(\alpha\) 和检验统计量 \(T(X)\),根据拒绝域或 p 值决定是否拒绝 \(H_0\)。
- 常见符号:\(H_0\)、\(H_1\)、\(\alpha\)、p-value、reject region。
- 典型场景:检验总体均值是否等于某基准值、两个均值是否相等、方差是否变化。
- 容易混淆的点:不拒绝 \(H_0\) 不等于证明 \(H_0\) 为真。
- 和后续章节的关系:第 6 章会学习不强依赖参数分布假设的非参数检验。
- 给 AI 的高质量提示词:请把这个问题写成假设检验形式,包括 H0、H1、检验统计量、拒绝规则和结论表达。
原假设 H0
- 一句话定义:原假设是检验开始时暂时接受、准备被样本证据挑战的假设。
- 直觉解释:它通常代表“没有变化、没有差异、没有效果、等于基准”。
- 专业表达:如 \(H_0:\mu=\mu_0\)、\(H_0:p=p_0\)、\(H_0:\sigma^2=\sigma_0^2\)。
- 典型场景:新教学方法是否提高成绩时,\(H_0\) 常写作“平均成绩没有提高”。
- 容易混淆的点:原假设不一定是研究者相信的结论,而是检验时要控制错误率的基准。
备择假设 H1
- 一句话定义:备择假设是当原假设被拒绝时支持的方向或范围。
- 直觉解释:它表达你真正想寻找的差异、变化或效果。
- 专业表达:双侧 \(H_1:\mu\ne\mu_0\),右侧 \(H_1:\mu>\mu_0\),左侧 \(H_1:\mu<\mu_0\)。
- 典型场景:如果只关心是否提高,用右侧检验;如果关心是否不同,用双侧检验。
- 容易混淆的点:单双侧检验必须在看数据前决定,不能看结果后选择。
显著性水平 alpha
- 一句话定义:显著性水平是允许第一类错误发生的最大概率。
- 直觉解释:它是你愿意承担“错杀原假设”的风险上限。
- 专业表达:在 \(H_0\) 成立时,拒绝 \(H_0\) 的概率不超过 \(\alpha\)。
- 常见取值:0.10、0.05、0.01。
- 容易混淆的点:\(\alpha=0.05\) 不是 \(H_0\) 为假的概率。
检验统计量 test statistic
- 一句话定义:检验统计量是把样本压缩成一个用于判断是否拒绝原假设的数。
- 直觉解释:它衡量样本结果离原假设预期有多远。
- 专业表达:例如 \(Z=(\bar X-\mu_0)/(\sigma/\sqrt n)\),\(T=(\bar X-\mu_0)/(S/\sqrt n)\)。
- 典型场景:均值检验用 z 或 t 统计量,方差检验用 chi-square 统计量。
拒绝域 rejection region
- 一句话定义:拒绝域是检验统计量落入后就拒绝 \(H_0\) 的区域。
- 直觉解释:它是“样本结果异常到足以拒绝原假设”的范围。
- 专业表达:双侧 z 检验在 \(\alpha=0.05\) 时拒绝域为 \(|Z|>1.96\)。
- 容易混淆的点:拒绝域由 \(\alpha\) 和备择方向决定。
p 值 p-value
- 一句话定义:p 值是在 \(H_0\) 成立时,观察到当前或更极端样本结果的概率。
- 直觉解释:p 值越小,说明当前样本在原假设下越反常。
- 专业表达:p-value = \(P_{H_0}(\text{test statistic as extreme or more extreme than observed})\)。
- 典型场景:若 p 值小于 \(\alpha\),拒绝 \(H_0\)。
- 容易混淆的点:p 值不是 \(H_0\) 为真的概率,也不是效果大小。
- 给 AI 的高质量提示词:请解释这个 p 值的正确含义,并指出不能如何误读。
第一类错误 Type I error
- 一句话定义:第一类错误是 \(H_0\) 真实成立时却拒绝了 \(H_0\)。
- 直觉解释:把没问题的情况误判成有问题。
- 专业表达:\(P(\text{reject }H_0|H_0\text{ true})=\alpha\)。
- 典型场景:新药其实无效,但检验误判为有效。
第二类错误 Type II error
- 一句话定义:第二类错误是 \(H_0\) 实际不成立时却没有拒绝 \(H_0\)。
- 直觉解释:有真实效果,但检验没发现。
- 专业表达:\(\beta=P(\text{fail to reject }H_0|H_1\text{ true})\)。
- 典型场景:新方法确实提高成绩,但样本量太小导致未显著。
检验功效 power
- 一句话定义:检验功效是在备择假设真实时正确拒绝 \(H_0\) 的概率。
- 专业表达:power = \(1-\beta\)。
- 直觉解释:功效越高,越不容易漏掉真实效果。
- 影响因素:样本量、效应大小、噪声水平、显著性水平。
- 典型场景:实验设计前做样本量估计,保证有足够功效发现预期效果。
似然比检验 likelihood ratio test
- 一句话定义:似然比检验比较原假设参数空间和总体参数空间下,数据能被解释得多好。
- 直觉解释:如果 \(H_0\) 下的最佳解释远差于不受限模型的最佳解释,就拒绝 \(H_0\)。
- 专业表达:
\[ \Lambda(x)=\frac{\sup_{\theta\in\Theta_0}L(\theta)}{\sup_{\theta\in\Theta}L(\theta)} \]
- 典型场景:复合假设检验、模型约束检验、嵌套模型比较。
- 容易混淆的点:似然比不是概率比,而是两个最大似然值的比。
小的 \(\Lambda\) 倾向于拒绝 \(H_0\)。
公式与推导
假设检验通用步骤
- 写出 \(H_0\) 和 \(H_1\)。
- 选择显著性水平 \(\alpha\)。
- 构造检验统计量并确定其在 \(H_0\) 下的分布。
- 计算统计量观测值和 p 值,或判断是否落入拒绝域。
- 给出统计结论和业务解释。
单样本均值 z 检验:方差已知
若 \(X_i\sim N(\mu,\sigma^2)\),且 \(\sigma\) 已知,检验:
\[ H_0:\mu=\mu_0 \]
检验统计量:
\[ Z=\frac{\bar X-\mu_0}{\sigma/\sqrt n}\sim N(0,1)\quad (H_0\text{ 下}) \]
双侧检验在显著性水平 \(\alpha\) 下,若 \(|Z|>z_{\alpha/2}\),拒绝 \(H_0\)。
单样本均值 t 检验:方差未知
若总体正态但 \(\sigma\) 未知:
\[ T=\frac{\bar X-\mu_0}{S/\sqrt n}\sim t(n-1) \]
双侧检验若 \(|T|>t_{n-1,\alpha/2}\),拒绝 \(H_0\)。
两样本均值检验:大样本近似
两个独立样本,比较 \(\mu_X-\mu_Y\):
\[ Z=\frac{(\bar X-\bar Y)-0}{\sqrt{S_X^2/n_X+S_Y^2/n_Y}} \]
大样本下近似服从标准正态。小样本时需考虑两样本 t 检验和方差假设。
正态总体方差检验
检验:
\[ H_0:\sigma^2=\sigma_0^2 \]
使用:
\[ \chi^2=\frac{(n-1)S^2}{\sigma_0^2}\sim \chi^2(n-1) \]
双侧检验要看 chi-square 分布的左右两端。
比例检验:大样本近似
检验:
\[ H_0:p=p_0 \]
统计量:
\[ Z=\frac{\hat p-p_0}{\sqrt{p_0(1-p_0)/n}} \]
大样本下近似服从 \(N(0,1)\)。
假设检验与置信区间
对于双侧检验,常见关系是:
- 若 \(\mu_0\) 不在 95% 置信区间内,则在 \(\alpha=0.05\) 的双侧检验下拒绝 \(H_0:\mu=\mu_0\)。
- 若 \(\mu_0\) 在区间内,则通常不拒绝。
注意:这个对应关系依赖检验和区间使用同一模型和同一标准误。
代码任务 1:单样本 t 检验
import numpy as np # 导入 numpy,用于存放和计算样本数据
from scipy import stats # 导入 scipy.stats,用于执行 t 检验
sample = np.array([68, 72, 75, 71, 69, 73, 70, 74, 76, 72]) # 构造一个成绩样本
mu0 = 70 # 设置原假设中的总体均值
result = stats.ttest_1samp(sample, popmean=mu0) # 执行单样本 t 检验,默认双侧检验
print("t 统计量:", result.statistic) # 输出 t 检验统计量
print("p 值:", result.pvalue) # 输出双侧 p 值
alpha = 0.05 # 设置显著性水平
if result.pvalue < alpha: # 判断 p 值是否小于显著性水平
print("拒绝 H0:样本均值与 70 存在显著差异") # p 值小,拒绝原假设
else:
print("不拒绝 H0:样本证据不足以说明均值与 70 不同") # p 值不小,不拒绝原假设
结果解释:这个检验回答“总体均值是否显著不同于 70”。不拒绝 \(H_0\) 不代表总体均值一定等于 70,只是样本证据不够强。
代码任务 2:两样本 t 检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
np.random.seed(42) # 固定随机种子,保证结果可复现
group_a = np.random.normal(70, 10, size=30) # 模拟 A 组成绩
group_b = np.random.normal(75, 10, size=30) # 模拟 B 组成绩
result = stats.ttest_ind(group_a, group_b, equal_var=False) # Welch 两样本 t 检验,不假设两组方差相等
print("A 组均值:", np.mean(group_a)) # 输出 A 组样本均值
print("B 组均值:", np.mean(group_b)) # 输出 B 组样本均值
print("t 统计量:", result.statistic) # 输出 t 统计量
print("p 值:", result.pvalue) # 输出 p 值
结果解释:这个检验判断两组总体均值是否存在显著差异。实际报告中还应给出均值差和置信区间,不只看 p 值。
代码任务 3:方差检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
np.random.seed(42) # 固定随机种子
sample = np.random.normal(0, 2, size=25) # 从标准差为 2 的正态总体中抽样
sigma0_squared = 1 # 原假设中的总体方差
n = len(sample) # 样本量
sample_var = np.var(sample, ddof=1) # 样本方差
chi2_stat = (n - 1) * sample_var / sigma0_squared # 构造 chi-square 检验统计量
p_left = stats.chi2.cdf(chi2_stat, df=n - 1) # 左尾概率
p_right = 1 - stats.chi2.cdf(chi2_stat, df=n - 1) # 右尾概率
p_value = 2 * min(p_left, p_right) # 双侧 p 值取两端较小尾概率的两倍
print("样本方差:", sample_var) # 输出样本方差
print("chi-square 统计量:", chi2_stat) # 输出检验统计量
print("双侧 p 值:", p_value) # 输出双侧 p 值
结果解释:这个检验判断总体方差是否等于 \(\sigma_0^2\)。它对正态总体假设比较敏感,实际应用中要注意分布假设。
代码任务 4:比例检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
success = 58 # 成功次数,例如 100 个用户中 58 个转化
n = 100 # 样本量
p0 = 0.5 # 原假设中的总体比例
p_hat = success / n # 样本比例
se0 = np.sqrt(p0 * (1 - p0) / n) # 在 H0 下计算样本比例的标准误
z_stat = (p_hat - p0) / se0 # 构造 z 检验统计量
p_value = 2 * (1 - stats.norm.cdf(abs(z_stat))) # 双侧 p 值
print("样本比例:", p_hat) # 输出样本比例
print("z 统计量:", z_stat) # 输出 z 统计量
print("p 值:", p_value) # 输出 p 值
结果解释:这个检验判断总体比例是否显著不同于 0.5。若研究问题是“是否大于 0.5”,应使用单侧检验。
代码任务 5:模拟第一类错误和检验功效
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
np.random.seed(42) # 固定随机种子
alpha = 0.05 # 设置显著性水平
n = 30 # 样本量
repeat = 3000 # 重复模拟次数
mu0 = 0 # 原假设均值
sigma = 1 # 总体标准差
false_rejects = 0 # 记录 H0 真实时错误拒绝的次数
for i in range(repeat): # 重复模拟
sample = np.random.normal(mu0, sigma, size=n) # 在 H0 真实的情况下抽样
p_value = stats.ttest_1samp(sample, popmean=mu0).pvalue # 对每个样本做 t 检验
if p_value < alpha: # 如果拒绝 H0
false_rejects += 1 # 这就是第一类错误
type1_rate = false_rejects / repeat # 第一类错误模拟频率
true_mu = 0.5 # 设置备择下真实均值,与 mu0 有差异
correct_rejects = 0 # 记录 H1 真实时正确拒绝 H0 的次数
for i in range(repeat): # 重复模拟
sample = np.random.normal(true_mu, sigma, size=n) # 在 H1 真实的情况下抽样
p_value = stats.ttest_1samp(sample, popmean=mu0).pvalue # 仍然检验 H0: mu=0
if p_value < alpha: # 如果拒绝 H0
correct_rejects += 1 # 这是正确发现真实差异
power = correct_rejects / repeat # 检验功效
print("设定 alpha:", alpha) # 输出设定的显著性水平
print("模拟第一类错误率:", type1_rate) # 输出 H0 真实时的错误拒绝率
print("模拟功效:", power) # 输出 H1 真实时的正确拒绝率
结果解释:当 \(H_0\) 真实时,错误拒绝率应接近 \(\alpha=0.05\)。当真实均值偏离 \(\mu_0\) 时,拒绝 \(H_0\) 的比例就是功效。
课后作业与答案
题 1:什么是原假设和备择假设?
答案:原假设 \(H_0\) 是检验时暂时作为基准的假设;备择假设 \(H_1\) 是样本证据足够强时希望支持的方向或范围。
解释:例如检验均值是否提高,可以写 \(H_0:\mu=70\),\(H_1:\mu>70\)。
题 2:p 值是什么意思?
答案:p 值是在 \(H_0\) 成立时,观察到当前或更极端样本结果的概率。
解释:p 值不是 \(H_0\) 为真的概率,也不是结果有实际意义的程度。
题 3:\(Z=2.3\) 的双侧 z 检验在 \(\alpha=0.05\) 下是否拒绝 \(H_0\)?
答案:拒绝。
解释:双侧 5% 检验的临界值约为 \(\pm1.96\),因为 \(|2.3|>1.96\)。
题 4:如果 95% 置信区间为 \([1.2,2.8]\),检验 \(H_0:\mu=0\) 会怎样?
答案:拒绝 \(H_0\)。
解释:0 不在 95% 置信区间内,对应双侧 5% 检验通常拒绝 \(H_0\)。
题 5:第一类错误和第二类错误分别是什么?
答案:第一类错误是 \(H_0\) 真却拒绝 \(H_0\);第二类错误是 \(H_0\) 假却没有拒绝 \(H_0\)。
解释:第一类错误像“误报”,第二类错误像“漏报”。
题 6:判断题:p 值小于 0.05 说明效果很大。
答案:错误。
解释:p 值受样本量影响很大。样本量很大时,很小的实际差异也可能显著。效果大小需要看效应量和置信区间。
题 7:代码题:检验一组样本均值是否大于 50。
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
sample = np.array([52, 55, 49, 53, 56, 54, 51, 57]) # 输入样本
mu0 = 50 # 原假设均值
result = stats.ttest_1samp(sample, popmean=mu0) # 先得到双侧 t 检验结果
one_sided_p = result.pvalue / 2 # 当样本均值大于 mu0 且 t 为正时,右侧 p 值为双侧 p 值的一半
print("t 统计量:", result.statistic) # 输出 t 统计量
print("右侧 p 值:", one_sided_p) # 输出右侧 p 值
答案解释:如果 t 统计量为正且右侧 p 值小于 \(\alpha\),则拒绝 \(H_0\),认为总体均值显著大于 50。
题 8:报告表达题:如何写一个规范的检验结论?
答案:
我们设定原假设 \(H_0:\mu=\mu_0\),备择假设为 \(H_1:\mu\ne\mu_0\)。在显著性水平 \(\alpha=0.05\) 下,基于样本构造 t 检验统计量并计算 p 值。若 p 值小于 0.05,则拒绝原假设,认为样本提供了总体均值不同于 \(\mu_0\) 的统计证据;否则,不拒绝原假设,但这并不等于证明 \(H_0\) 成立。
报告可写表达
- “本检验的原假设表示没有差异,备择假设表示存在差异。”
- “显著性水平设为 0.05,意味着我们将第一类错误概率控制在 5% 以内。”
- “p 值小于 0.05,因此在 5% 显著性水平下拒绝原假设。”
- “统计显著不等于实际重要,仍需结合效应量、置信区间和业务背景解释。”
- “不拒绝原假设只能说明当前样本证据不足,不能证明原假设为真。”
可以追问老师/同学的问题
- 作业里 p 值法和拒绝域法都需要写吗?
- 单侧检验是否必须在看数据前确定?
- 正态总体参数检验中,哪些情况用 z,哪些情况用 t 或 chi-square?
- 似然比检验需要掌握一般公式,还是要会推具体分布的例题?
- 统计显著和实际显著在课程报告中要不要区分?
给 AI 的高质量提示词
请帮我完成这个假设检验题:先写出 H0 和 H1;判断是单侧还是双侧;选择 z、t、chi-square、比例检验或似然比检验;写出检验统计量及其在 H0 下的分布;计算 p 值或拒绝域;最后用课程报告语言解释结论,并提醒常见误读。
反向链接
README统计推断_自测题与答案索引
统计推断
统计推断核心概念索引