章节学习页
# 第 6 章 非参数假设检验
本章在学什么
一句话:本章学习当总体分布形式不可靠、样本量较小或数据是等级/类别时,如何用更少分布假设完成检验。
在统计学习链条中的位置:
参数检验依赖分布假设 -> 分布假设不稳或数据类型不适合 -> 使用非参数检验
课程和工作用途:当你不确定数据是否正态、样本量小、数据是排名/等级/类别,或者异常值影响很强时,非参数检验提供了更稳健的检验路线。
教材目录
- 6.1 引言
- 6.2 符号检验及符号秩和检验
- 6.3 Wilcoxon 两样本秩和检验
- 6.4 拟合优度检验
- 6.5 列联表中的独立性和齐一性检验
- 6.6 其他的非参数检验方法
- 习题 6
必须掌握的概念
- [x] 非参数检验
- [x] 符号检验
- [x] 符号秩和检验
- [x] Wilcoxon 两样本秩和检验
- [x] Mann-Whitney U 检验
- [x] 拟合优度检验
- [x] 列联表
- [x] 独立性检验
- [x] 齐一性检验
- [x] 秩 rank
了解即可的内容
- [ ] 其他非参数检验方法:如 Kolmogorov-Smirnov 检验、游程检验等,先知道用途。
- [ ] 各类秩检验的精确分布推导:本阶段先掌握应用场景和统计量直觉。
概念填充区
非参数检验 nonparametric test
- 一句话定义:非参数检验是不严格假设总体属于某个具体参数分布族的检验方法。
- 直觉解释:参数检验常问“均值是否变了”;非参数检验更常问“位置、分布、等级或类别关系是否变了”。
- 专业表达:非参数检验通常基于符号、秩、频数或经验分布,而不是直接依赖正态总体参数。
- 常见方法:符号检验、Wilcoxon 检验、Mann-Whitney U 检验、chi-square 拟合优度检验、列联表独立性检验。
- 典型场景:样本量小、数据明显偏态、存在极端值、数据是等级评分或分类计数。
- 容易混淆的点:非参数不等于“没有任何假设”,它仍可能要求独立性、连续性、对称性或足够样本量。
- 和后续章节的关系:Bayes 方法和决策理论也会处理不确定性,但思路不同;非参数检验是频率学派下减少分布假设的一类工具。
- 给 AI 的高质量提示词:请判断这个数据问题是否应该用参数检验还是非参数检验,并说明所需假设和报告表达。
符号检验 sign test
- 一句话定义:符号检验只看观测值相对基准值是大于还是小于,而不看差距大小。
- 直觉解释:如果基准中位数正确,那么样本中高于基准和低于基准的数量应该大致平衡。
- 专业表达:对每个非零差值记录正号或负号,正号个数在原假设下服从二项分布。
- 常见符号:\(+\)、\(-\)、\(B(n,0.5)\)。
- 典型场景:检验总体中位数是否等于某个值;配对前后比较只关心方向。
- 容易混淆的点:符号检验稳健但信息利用少,因为它忽略差值大小。
符号秩和检验 Wilcoxon signed-rank test
- 一句话定义:符号秩和检验同时利用差值方向和差值绝对值的秩。
- 直觉解释:它比符号检验多利用“变化幅度的相对大小”,但不直接依赖正态分布。
- 专业表达:对配对差值取绝对值排序,再把正差值对应的秩相加形成统计量。
- 典型场景:配对样本前后比较,如同一批学生培训前后成绩差异。
- 容易混淆的点:Wilcoxon signed-rank 通常要求差值分布关于中位数对称。
Wilcoxon 两样本秩和检验 / Mann-Whitney U 检验
- 一句话定义:用于比较两个独立样本的分布位置是否有差异。
- 直觉解释:把两组数据混在一起排序,如果一组整体更大,它的秩通常会更靠后。
- 专业表达:基于合并样本的秩和或 U 统计量检验两组分布是否相同或位置是否偏移。
- 典型场景:比较两种教学方法、两个实验组、两个模型指标样本。
- 容易混淆的点:它不一定严格等价于“均值检验”;更适合解释为分布位置或随机优势差异。
拟合优度检验 goodness-of-fit test
- 一句话定义:拟合优度检验判断观测频数是否与某个理论分布相符。
- 直觉解释:如果理论分布正确,各类别实际出现次数不应和期望次数差太远。
- 专业表达:常用 chi-square 统计量:\(\sum (O_i-E_i)^2/E_i\)。
- 典型场景:检验骰子是否公平、事件是否服从某个离散分布、类别比例是否符合理论比例。
- 容易混淆的点:它通常用于频数数据,不是直接拿原始连续数值做均值比较。
列联表 contingency table
- 一句话定义:列联表是用交叉频数展示两个分类变量关系的表。
- 直觉解释:行表示一个分类变量,列表示另一个分类变量,格子里是同时属于这两类的数量。
- 典型场景:性别和是否通过考试、地区和是否购买、处理组和结局类型。
- 容易混淆的点:列联表记录的是频数,不是均值或连续测量值。
独立性检验 independence test
- 一句话定义:独立性检验判断两个分类变量是否相互独立。
- 直觉解释:如果两个变量无关,那么每个格子的实际频数应接近“行总数 x 列总数 / 总数”的期望频数。
- 专业表达:使用 chi-square 统计量比较观测频数 \(O_{ij}\) 和独立假设下期望频数 \(E_{ij}\)。
- 典型场景:检验“地区”和“是否购买”是否有关。
齐一性检验 homogeneity test
- 一句话定义:齐一性检验判断多个总体或组别的类别分布是否相同。
- 直觉解释:不同组别的类别比例是否一致。
- 典型场景:比较三个地区的用户满意度分布是否相同。
- 容易混淆的点:齐一性检验和独立性检验计算形式类似,但抽样设计和问题表述不同。
公式与推导
符号检验统计量
设检验中位数 \(m=m_0\),对 \(X_i-m_0\) 记录正负号,去掉等于 0 的观测。若 \(H_0\) 成立,则正号个数:
\[ S^+\sim B(n,0.5) \]
直觉:如果 \(m_0\) 是真实中位数,那么大于和小于 \(m_0\) 的概率都应约为 0.5。
Wilcoxon signed-rank 检验统计量
对配对差值 \(D_i=X_i-Y_i\):
- 去掉 \(D_i=0\) 的样本。
- 对 \(|D_i|\) 从小到大排序,得到秩。
- 计算正差值对应秩和 \(W^+\)。
- 用 \(W^+\) 判断差值中心是否为 0。
直觉:如果前后没有系统差异,正秩和与负秩和应大致平衡。
Wilcoxon 两样本秩和检验
将两组独立样本合并排序。若第一组秩和为 \(R_1\),样本量为 \(n_1\),则 Mann-Whitney U 统计量可写为:
\[ U_1=R_1-\frac{n_1(n_1+1)}{2} \]
直觉:如果两组来自同一分布,第一组的秩不会系统性偏大或偏小。
chi-square 拟合优度统计量
\[ \chi^2=\sum_{i=1}^k\frac{(O_i-E_i)^2}{E_i} \]
其中 \(O_i\) 是观测频数,\(E_i\) 是理论期望频数。
直觉:每一类的“实际-理论”差异越大,统计量越大,越倾向于拒绝理论分布。
列联表独立性检验统计量
对 \(r\times c\) 列联表,在独立假设下:
\[ E_{ij}=\frac{\text{第 }i\text{ 行总数}\times \text{第 }j\text{ 列总数}}{\text{总样本量}} \]
\[ \chi^2=\sum_{i=1}^r\sum_{j=1}^c\frac{(O_{ij}-E_{ij})^2}{E_{ij}} \]
自由度为:
\[ (r-1)(c-1) \]
代码任务 1:符号检验,用二项检验实现
import numpy as np # 导入 numpy,用于处理数组
from scipy import stats # 导入 scipy.stats,用于二项检验
sample = np.array([72, 68, 75, 71, 70, 74, 69, 73, 76, 72]) # 一组样本数据
m0 = 70 # 原假设中的总体中位数
diff = sample - m0 # 计算每个样本与假设中位数的差
nonzero_diff = diff[diff != 0] # 去掉等于 0 的差值,因为它们没有正负方向
positive_count = np.sum(nonzero_diff > 0) # 统计正号个数
n = len(nonzero_diff) # 有效样本量
result = stats.binomtest(positive_count, n=n, p=0.5, alternative="two-sided") # 用二项检验做双侧符号检验
print("正号个数:", positive_count) # 输出正号数量
print("有效样本量:", n) # 输出去掉 0 差值后的样本量
print("p 值:", result.pvalue) # 输出 p 值
结果解释:如果 p 值小于显著性水平,则拒绝“中位数等于 70”的原假设。符号检验只使用方向,不使用差值大小。
代码任务 2:Wilcoxon 符号秩检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
before = np.array([60, 62, 65, 63, 64, 66, 61, 67]) # 培训前成绩
after = np.array([63, 65, 66, 66, 68, 67, 64, 70]) # 培训后成绩
result = stats.wilcoxon(after, before, alternative="two-sided") # 对配对样本做 Wilcoxon 符号秩检验
print("Wilcoxon 统计量:", result.statistic) # 输出检验统计量
print("p 值:", result.pvalue) # 输出 p 值
结果解释:这个检验判断培训前后是否存在系统性差异。它适合配对数据,并且比简单符号检验利用更多幅度信息。
代码任务 3:Mann-Whitney U 检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
np.random.seed(42) # 固定随机种子
group_a = np.array([65, 67, 70, 72, 68, 69, 71]) # A 组样本
group_b = np.array([72, 74, 75, 78, 73, 76, 77]) # B 组样本
result = stats.mannwhitneyu(group_a, group_b, alternative="two-sided") # 两独立样本的非参数检验
print("A 组中位数:", np.median(group_a)) # 输出 A 组中位数
print("B 组中位数:", np.median(group_b)) # 输出 B 组中位数
print("U 统计量:", result.statistic) # 输出 U 统计量
print("p 值:", result.pvalue) # 输出 p 值
结果解释:这个检验判断两组分布位置是否有差异。不要简单说它只是在检验均值差异。
代码任务 4:chi-square 拟合优度检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
observed = np.array([18, 22, 20, 17, 23, 20]) # 一个骰子六个面的观测频数
expected = np.array([20, 20, 20, 20, 20, 20]) # 公平骰子下每个面期望出现 20 次
result = stats.chisquare(f_obs=observed, f_exp=expected) # 执行 chi-square 拟合优度检验
print("chi-square 统计量:", result.statistic) # 输出统计量
print("p 值:", result.pvalue) # 输出 p 值
结果解释:如果 p 值很小,说明观测频数与公平骰子的理论频数差异太大,倾向于拒绝“骰子公平”的假设。
代码任务 5:列联表独立性检验
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
observed = np.array([
[30, 10], # A 地区:购买 30,不购买 10
[20, 20], # B 地区:购买 20,不购买 20
[15, 25] # C 地区:购买 15,不购买 25
]) # 构造 3x2 列联表
chi2, p_value, dof, expected = stats.chi2_contingency(observed) # 执行列联表独立性检验
print("chi-square 统计量:", chi2) # 输出统计量
print("p 值:", p_value) # 输出 p 值
print("自由度:", dof) # 输出自由度
print("期望频数:\n", expected) # 输出独立假设下的期望频数
结果解释:这个检验判断“地区”和“是否购买”是否独立。如果 p 值小,说明购买行为可能与地区有关。
课后作业与答案
题 1:什么时候考虑非参数检验?
答案:当总体分布假设不可靠、样本量小、数据明显偏态、存在异常值、数据是等级或类别频数时,可以考虑非参数检验。
解释:非参数检验减少了对具体参数分布族的依赖,但仍有自身假设。
题 2:符号检验主要使用了数据的什么信息?
答案:只使用观测值相对基准值的方向,即正号和负号。
解释:它不使用差值大小,因此稳健但信息利用较少。
题 3:Wilcoxon signed-rank 检验适合什么数据?
答案:适合配对样本或单样本差值,常用于比较前后变化是否以 0 为中心。
解释:它利用差值绝对值的秩和符号,通常要求差值分布近似对称。
题 4:Mann-Whitney U 检验和两样本 t 检验有什么区别?
答案:两样本 t 检验主要比较均值并依赖一定分布/方差条件;Mann-Whitney U 检验基于秩,更少依赖正态性,常解释为两组分布位置或随机优势差异。
题 5:拟合优度检验中的 \(O_i\) 和 \(E_i\) 分别是什么?
答案:\(O_i\) 是第 i 类观测频数,\(E_i\) 是理论分布下第 i 类期望频数。
解释:chi-square 统计量比较实际频数和理论频数的偏离程度。
题 6:列联表独立性检验的期望频数如何计算?
答案:
\[ E_{ij}=\frac{\text{行总数}\times \text{列总数}}{\text{总样本量}} \]
解释:这是在两个分类变量独立时,每个格子应有的频数。
题 7:代码题:检验两个独立样本是否存在分布位置差异。
import numpy as np # 导入 numpy
from scipy import stats # 导入 scipy.stats
a = np.array([12, 15, 14, 13, 16]) # 第一组样本
b = np.array([18, 17, 19, 20, 16]) # 第二组样本
result = stats.mannwhitneyu(a, b, alternative="two-sided") # 使用 Mann-Whitney U 检验
print(result.statistic) # 输出 U 统计量
print(result.pvalue) # 输出 p 值
答案解释:如果 p 值小于显著性水平,则认为两组分布位置存在显著差异。
题 8:报告表达题:如何说明为什么不用 t 检验而用非参数检验?
答案:
由于样本量较小且数据分布存在明显偏态/异常值,正态性假设难以保证。为降低对具体分布形式的依赖,本分析采用基于秩的非参数检验。该方法主要比较两组样本的分布位置差异,而不是直接检验均值差异。
报告可写表达
- “非参数检验并不意味着没有假设,而是减少了对具体参数分布族的依赖。”
- “本题数据为等级/秩次/类别频数,因此使用非参数检验比均值型参数检验更合适。”
- “Wilcoxon 检验基于秩信息,对异常值比 t 检验更稳健。”
- “列联表独立性检验用于判断两个分类变量是否存在统计关联。”
- “统计显著只说明频数差异不太符合独立假设,还需要结合实际背景解释关联强度。”
可以追问老师/同学的问题
- 本课程中 Mann-Whitney U 检验和 Wilcoxon 秩和检验是否视为同一方法?
- 小样本时需要使用精确 p 值还是正态近似?
- 拟合优度检验中期望频数太小怎么办?
- 齐一性检验和独立性检验的计算形式相同,考试中如何区分表述?
- 非参数检验的结论能不能写成“均值显著不同”?
给 AI 的高质量提示词
请判断这个问题是否适合非参数检验:先说明数据类型、样本结构、参数检验假设是否可靠;再选择符号检验、Wilcoxon signed-rank、Mann-Whitney U、拟合优度检验或列联表独立性检验;给出 Python 代码、逐行注释、p 值解释和课程报告写法。
反向链接
README统计推断_自测题与答案索引
统计推断