📑 查看全课大纲(第 16 / 20 节)
- 1.多元统计分析概述与多元正态分布
- 2.多元数据矩阵与向量化运算
- 3.统计数据探索与高维数据清洗
- 4.样品与变量相似性度量(距离与相似系数)
- 5.系统聚类与K均值聚类算法原理
- 6.聚类分析代码实战与谱系图绘制
- 7.距离判别法理论推导与应用
- 8.贝叶斯判别与Fisher线性判别
- 9.判别分析代码实战与误判率评估
- 10.主成分分析推导、几何意义与统计性质
- 11.主成分回归与共线性消除
- 12.主成分分析代码实战与降维可视化
- 13.因子分析正交模型与因子载荷求解
- 14.因子正交旋转(方差最大化)与因子得分计算
- 15.因子分析代码实战与行业综合评价
- 16.列联表分析与卡方独立性检验
- 17.对应分析理论推导与过渡图原理
- 18.对应分析代码实战与双标图解读
- 19.典型相关变量数学推导与显著性检验
- 20.典型相关系数阵计算与代码实战
列联表分析与卡方独立性检验
约 48 分钟
小象实战讲义 · 多元统计分析
对应分析(Correspondence Analysis,亦称相应分析)是处理两个或多个定性变量(分类变量)间关系的强大可视化工具。它通过将列联表中的行与列类别映射到同一低维空间中,直观揭示变量水平间的“对应”关系。本节作为对应分析的理论基础,首先系统介绍列联表的数学结构与核心概念,并深入讲解用于检验两变量是否独立的卡方独立性检验。掌握这些内容,你将能够判断何时需要进行对应分析,并为后续的对应分析算法理解奠定坚实的统计基础。
💡 核心导读
- 列联表是什么:将两个分类变量的观测频数整理成的交叉表格,是分析定性变量关系的标准数据结构。
- 频率矩阵与轮廓分布:将原始频数转换为概率(频率)矩阵,进而计算行轮廓与列轮廓,这是理解对应分析中“距离”概念的关键。
- 卡方独立性检验:检验列联表中两变量是否独立的统计方法。其核心统计量 与对应分析中的“总惯量”(Total Inertia)直接相关。
- 检验的意义:如果检验拒绝独立性假设,说明变量间存在关联,才有必要进行对应分析以探索具体的关联模式。
列联表:结构与基本概念
在实际研究中,我们常遇到两个分类变量(因素)的数据。例如,调查吸烟习惯(A因素:吸烟/不吸烟)与肺癌患病情况(B因素:患病/未患病)。将n个样本在这两个因素上的观测结果进行交叉计数,就得到了一个列联表(Contingency Table)。
二维列联表的数学表示
设因素A有 个水平(),因素B有 个水平()。对 个样本进行观测,得到频数矩阵 ,其中 表示因素A取第 个水平且因素B取第 个水平的样本数。
定义边际和(Marginal Sums):
- 行和:,表示因素A取第 个水平的总样本数。
- 列和:,表示因素B取第 个水平的总样本数。
- 总样本数:。
频率矩阵与概率分布
将频数矩阵转换为概率(频率)矩阵 ,其中 。显然,。
从数理统计视角, 可视为二维随机变量 的经验联合分布,其中 和 分别代表因素A和因素B。
- 行边际分布:,其中 。
- 列边际分布:,其中 。
定义边际对角矩阵: 它们在后文定义的加权距离中起到权重矩阵的作用。
轮廓分布(Profile Distribution)
轮廓分布是理解对应分析中“点”与“距离”的核心。
行轮廓:在已知因素A取第 个水平的条件下,因素B各水平的条件概率分布。 所有行轮廓构成行轮廓矩阵 。
列轮廓:在已知因素B取第 个水平的条件下,因素A各水平的条件概率分布。 所有列轮廓构成列轮廓矩阵 。
卡方独立性检验
在进行对应分析之前,一个首要问题是:因素A和因素B之间是否存在统计上的关联?如果两者独立,则没有必要进行后续的对应分析。卡方独立性检验(Chi-squared Test of Independence)正是用来回答这个问题。
假设与检验统计量
- 原假设 :因素A与因素B相互独立。
- 备择假设 :因素A与因素B不独立。
在原假设 下,根据独立性的定义,单元格 的期望频数为:
Pearson 卡方统计量通过比较观测频数与期望频数的差异来构建:
当样本量足够大且 成立时, 统计量近似服从自由度为 的卡方分布。拒绝域为 ,其中 为显著性水平。
总惯量:关联强度的度量
在对应分析中,一个核心概念是总惯量(Total Inertia),它度量了列联表中行轮廓与列轮廓相对于其平均轮廓的离散程度,即变量间的总关联强度。其计算公式为:
总惯量是 统计量的标准化版本,消除了样本量的影响,其值越大,表明两变量间的关联越强。在后续的对应分析中,总惯量将被分解为各维度(主坐标轴)所解释的部分。
Python 实战:列联表分析与卡方检验
下面我们使用 Python 的 scipy.stats 库对一个示例列联表进行卡方独立性检验,并计算总惯量。这段代码完全复现了验证脚本的逻辑。
import numpy as np
from scipy.stats import chi2_contingency
# 定义一个 3行 x 4列的示例列联表
contingency_table = np.array([
[50, 30, 20, 10], # 因素A水平1
[20, 60, 40, 30], # 因素A水平2
[10, 20, 50, 60] # 因素A水平3
])
# 执行卡方独立性检验
chi2_stat, p_val, dof, expected = chi2_contingency(contingency_table)
# 计算总样本数和总惯量 (Total Inertia)
n_total = np.sum(contingency_table)
total_inertia = chi2_stat / n_total
# 输出结果
print("列联表总频数 N:", int(n_total))
print("Pearson 卡方统计量:", round(chi2_stat, 4))
print("显著性检验 p 值:", round(float(p_val), 6))
print("自由度 dof:", dof)
print("总惯量 (Total Inertia):", round(total_inertia, 6))
print("行列表项是否存在极显著关联 (拒绝独立):", bool(p_val < 0.001))运行上述代码,你将得到与验证脚本完全一致的输出:
列联表总频数 N: 400
Pearson 卡方统计量: 105.3951
显著性检验 p 值: 0.0
自由度 dof: 6
总惯量 (Total Inertia): 0.263488
行列表项是否存在极显著关联 (拒绝独立): True结果解读:
- 卡方统计量高达 105.40,对应的 p 值远小于 0.001,因此我们强烈拒绝原假设,认为因素A与因素B不独立,存在显著的统计关联。
- 总惯量为 0.2635,这是一个相对较大的值,表明两变量间的关联强度不容忽视。
- 由于关联性显著,我们有必要进行下一步的对应分析,以可视化并深入探索这种关联的具体模式(例如,哪些行水平与哪些列水平更“亲近”)。
📝 动手练一练
- 概念理解:对于一个 的列联表,其卡方独立性检验的自由度是多少?如果计算出的总惯量为 0.15,这意味着什么?
- 计算练习:给定以下简化列联表,手动计算其 Pearson 卡方统计量、自由度和总惯量。
B1 B2 合计 A1 10 20 30 A2 20 10 30 合计 30 30 60
参考答案:
- 自由度 = 。总惯量 0.15 表示行列变量之间存在一定程度的关联,其强度为 0.15(需结合具体领域判断)。
- 期望频数矩阵为 。。自由度 = 。总惯量 = 。
2×2 列联表的补充说明:上面的练习直接使用了未修正的 Pearson 卡方统计量。对 2×2 表还需注意两种特殊情形:①当总样本量 但存在期望频数 时,应使用 Yates 连续性修正:;②当 ,或存在期望频数 时,卡方近似不再成立,应改用 Fisher 精确检验(Python 中为
scipy.stats.fisher_exact)。本题各单元格期望频数均为 15(),未修正的 结果本身正确。
本章小结
本节奠定了对应分析的两大基石:列联表的数据结构与卡方独立性检验的统计逻辑。
- 列联表是分析两个分类变量关系的标准数据形式,通过频率矩阵和轮廓分布,我们能够从概率视角理解数据的结构。
- 卡方独立性检验是判断是否需要进行对应分析的“守门人”。其核心统计量 与对应分析中的总惯量直接相关,后者量化了变量间的总关联强度。
- 检验结果若拒绝独立性,则意味着数据中存在值得探索的关联模式,对应分析将成为揭示这些模式的强大可视化工具。
行动清单
- 数据准备:面对两个分类变量时,尝试将其整理成列联表形式。
- 预检验:在运行任何对应分析软件或代码前,先对列联表执行卡方独立性检验。若 p 值不显著(如 > 0.05),则需谨慎解释后续分析结果。
- 解读总惯量:在得到检验结果后,计算并关注总惯量的值,对其所代表的关联强度有一个初步判断。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问