TTiti的学习笔记
首页 / 专业知识 / 05-Courses/数理统计/02-Notes/统计推断/06_非参数假设检验/章节学习页.md

章节学习页

专业知识 · 05-Courses/数理统计/02-Notes/统计推断/06_非参数假设检验/章节学习页.md

# 第 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\):

  1. 去掉 \(D_i=0\) 的样本。
  2. 对 \(|D_i|\) 从小到大排序,得到秩。
  3. 计算正差值对应秩和 \(W^+\)。
  4. 用 \(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 值解释和课程报告写法。