📑 查看全课大纲(第 17 / 20 节)
- 1.多元统计分析概述与多元正态分布
- 2.多元数据矩阵与向量化运算
- 3.统计数据探索与高维数据清洗
- 4.样品与变量相似性度量(距离与相似系数)
- 5.系统聚类与K均值聚类算法原理
- 6.聚类分析代码实战与谱系图绘制
- 7.距离判别法理论推导与应用
- 8.贝叶斯判别与Fisher线性判别
- 9.判别分析代码实战与误判率评估
- 10.主成分分析推导、几何意义与统计性质
- 11.主成分回归与共线性消除
- 12.主成分分析代码实战与降维可视化
- 13.因子分析正交模型与因子载荷求解
- 14.因子正交旋转(方差最大化)与因子得分计算
- 15.因子分析代码实战与行业综合评价
- 16.列联表分析与卡方独立性检验
- 17.对应分析理论推导与过渡图原理
- 18.对应分析代码实战与双标图解读
- 19.典型相关变量数学推导与显著性检验
- 20.典型相关系数阵计算与代码实战
对应分析理论推导与过渡图原理
约 42 分钟
小象实战讲义 · 多元统计分析
对应分析(Correspondence Analysis)是处理定性变量关联关系的核心多元统计方法,它将R型(变量)与Q型(样品)因子分析统一在同一框架下,可在同一坐标系中同时展示行、列类别的结构关联。本节将推导从原始列联表到过渡矩阵Z的变换过程,基于奇异值分解实现两类因子分析的统一,并通过Python完成全流程实现。
💡 核心导读
- 核心思想:通过加权变换构建过渡矩阵Z,实现R型与Q型因子分析的统一。
- 关键变换:掌握从列联表到频率矩阵、再到过渡矩阵Z的推导,理解χ²距离的引入动机。
- 数学统一:理解与具有相同非零特征值,两类因子分析的特征向量可线性转换。
- 实践应用:能用Python SVD实现对应分析,计算行/列主坐标并解读双标图。
- 前提检验:掌握分析前的行列变量独立性卡方检验方法。
一、从列联表到过渡矩阵Z的构建
对应分析用于探究两个定性变量(因素A、B)各水平的关联结构,设原始列联表(频数矩阵)为: 其中为因素A第i水平、因素B第j水平的频数。
1.1 频率矩阵与χ²距离
首先将频数矩阵转换为频率矩阵,消除样本量影响: 定义行边缘概率、列边缘概率: 行轮廓(第i行的条件分布)为: 为比较行轮廓的相似性,引入χ²距离(加权欧氏距离),消除列边际概率的影响:
1.2 过渡矩阵Z的定义
为将χ²距离转化为普通欧氏距离的形式,定义变换元素: 排列为过渡矩阵,其矩阵形式为: 其中,。
注意:行轮廓的χ²距离等于的行向量欧氏距离,即,Z是后续统一两类因子分析的核心。
二、R型与Q型因子分析的统一
2.1 协方差矩阵的对等性
基于过渡矩阵Z,可构造两类协方差矩阵:
- 列协方差矩阵(R型):,描述列变量(因素B水平)的协方差结构。
- 行协方差矩阵(Q型):,描述行样品(因素A水平)的协方差结构。
关键定理:与具有完全相同的非零特征值,其中。
2.2 特征向量的转换关系
设是对应的单位特征向量,即: 用Z左乘两边得: 说明是对应同一的特征向量,因此只需对一个矩阵做特征分解,即可通过线性变换得到另一矩阵的特征向量。
2.3 主坐标与双标图
对Z做奇异值分解(SVD): 其中为左奇异向量矩阵(的单位特征向量),为右奇异向量矩阵(的单位特征向量);为奇异值对角矩阵,为主惯量对角矩阵(,即、的非零特征值)。
为使坐标间欧氏距离等于原始χ²距离,计算主坐标:
- 行主坐标(因素A):
- 列主坐标(因素B):
将前两维主坐标绘制在同一平面,即双标图。需注意:行点与列点分属不同空间的投影,二者之间的欧氏距离并无直接解读意义;正确做法是观察各点与原点连线的方向——同一方向且远离原点的行点与列点表示正关联,方向相反则表示负关联。
2.4 惯量与贡献率
特征值在对应分析中称为主惯量,其总和称为总惯量: 总惯量与卡方统计量满足,衡量数据偏离独立性的总体程度。第j维贡献率为,通常选取前两维(累计贡献率≥80%)进行可视化分析。
三、Python实战:对应分析全流程
import numpy as np
from scipy.stats import chi2_contingency
# 1. 构造示例列联表(3行4列)
K = np.array([
[50.0, 30.0, 20.0, 10.0],
[20.0, 60.0, 40.0, 30.0],
[10.0, 20.0, 50.0, 60.0]
])
n = np.sum(K) # 总样本量
# 2. 独立性检验(对应分析前提)
chi2, p_value, dof, expected = chi2_contingency(K)
print(f"卡方检验: χ²={chi2:.4f}, p值={p_value:.6f}")
if p_value < 0.05:
print("结论: 两因素不独立,适合进行对应分析。")
# 3. 计算频率矩阵与边缘概率
P = K / n
r = np.sum(P, axis=1) # 行边缘概率
c = np.sum(P, axis=0) # 列边缘概率
# 4. 计算过渡矩阵 Z
Dr_inv_sqrt = np.diag(1.0 / np.sqrt(r))
Dc_inv_sqrt = np.diag(1.0 / np.sqrt(c))
Z = Dr_inv_sqrt @ (P - np.outer(r, c)) @ Dc_inv_sqrt
# 5. SVD分解与主坐标计算(取前两维)
U, s, Vt = np.linalg.svd(Z, full_matrices=False)
V = Vt.T
F = Dr_inv_sqrt @ U @ np.diag(s)[:, :2] # 行主坐标
G = Dc_inv_sqrt @ V @ np.diag(s)[:, :2] # 列主坐标
# 6. 惯量与贡献率计算
inertia = s ** 2
total_inertia = np.sum(inertia)
ratio = inertia / total_inertia
print(f"总惯量: {total_inertia:.4f}, 前两维累计贡献率: {np.sum(ratio[:2]):.4f}")
print("行主坐标(前两维):\n", np.round(F, 4))
print("列主坐标(前两维):\n", np.round(G, 4))关键运行结果:卡方统计量≈105.4,p值远小于0.05;总惯量≈0.2635,前两维累计贡献率100%。(本例为 3×4 列联表,对应分析的最大维度为 min(3−1,4−1)=2,故前两维累计贡献率必然为 100%,并非数据恰好低维。)
📝 动手练一练
距离计算:给定2×3列联表,计算两行轮廓的χ²距离(保留3位小数)。 参考答案:总频数,行边缘概率,列边缘概率。行轮廓分别为和,代入χ²距离公式得平方距离,距离值。
矩阵验证:用Python验证过渡矩阵Z的行和与列和近似为0(数值误差范围内)。 参考答案:
import numpy as np np.random.seed(42) K = np.random.randint(1, 50, size=(4, 5)) P = K / K.sum() r, c = P.sum(axis=1), P.sum(axis=0) Z = np.diag(1/np.sqrt(r)) @ (P - np.outer(r, c)) @ np.diag(1/np.sqrt(c)) print("行和最大误差:", np.max(np.abs(Z.sum(axis=1)))) # 约1e-16 print("列和最大误差:", np.max(np.abs(Z.sum(axis=0)))) # 约1e-16
本章小结
本节系统讲解了对应分析的核心理论与实现方法:
- 数据变换:通过构建过渡矩阵Z,为两类因子分析的统一奠定基础。
- 数学统一:与具有相同非零特征值,其特征向量分别对应Z的右、左奇异向量。
- 可视化逻辑:通过SVD分解计算行/列主坐标,前两维主坐标构成的双标图直观展示行、列类别间的关联结构。
- 实践要点:分析前需进行卡方独立性检验;优先从变量数较少的一侧(通常为R型)进行因子分析以简化计算。
行动清单
- 使用Python复现过渡矩阵Z的构建与SVD分解过程。
- 对任意二维列联表,计算其行/列主坐标并绘制双标图。
- 解读双标图中点间距离的关联含义,完成一份对应分析报告。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问