📑 查看全课大纲(第 19 / 20 节)
- 1.多元统计分析概述与多元正态分布
- 2.多元数据矩阵与向量化运算
- 3.统计数据探索与高维数据清洗
- 4.样品与变量相似性度量(距离与相似系数)
- 5.系统聚类与K均值聚类算法原理
- 6.聚类分析代码实战与谱系图绘制
- 7.距离判别法理论推导与应用
- 8.贝叶斯判别与Fisher线性判别
- 9.判别分析代码实战与误判率评估
- 10.主成分分析推导、几何意义与统计性质
- 11.主成分回归与共线性消除
- 12.主成分分析代码实战与降维可视化
- 13.因子分析正交模型与因子载荷求解
- 14.因子正交旋转(方差最大化)与因子得分计算
- 15.因子分析代码实战与行业综合评价
- 16.列联表分析与卡方独立性检验
- 17.对应分析理论推导与过渡图原理
- 18.对应分析代码实战与双标图解读
- 19.典型相关变量数学推导与显著性检验
- 20.典型相关系数阵计算与代码实战
典型相关变量数学推导与显著性检验
约 56 分钟
小象实战讲义 · 多元统计分析
在多元统计分析中,我们常需研究两组变量的整体线性相关性,典型相关分析(Canonical Correlation Analysis, CCA)正是解决这类问题的核心工具。本节将讲解CCA的基本思想、核心推导、显著性检验及Python实现,帮你快速掌握其原理与应用方法。
💡 核心导读
- 问题场景:研究两组多变量之间的整体线性相关关系
- 核心思想:提取两组变量的线性组合(典型变量),最大化其相关系数
- 数学本质:方差约束下的最大化问题,转化为矩阵特征值求解
- 检验方法:Bartlett似然比检验判断典型相关系数的统计显著性
- 实战工具:基于
sklearn.cross_decomposition.CCA完成完整分析
典型相关分析的基本思想
单变量分析中,我们用皮尔逊相关系数衡量两个变量的线性相关程度,但实际场景中常需研究两组变量的整体关联,例如:财政政策指标与宏观经济指标的关系、生理指标与运动训练指标的关系。
CCA的核心逻辑是:从两组变量中分别构造线性组合(称为典型变量),使得这对线性组合的相关系数达到最大。
设第一组变量为 ,第二组变量为 。我们构造线性组合: 其中 、 为待求的系数向量。
由于相关系数对系数的缩放具有不变性(同时将乘以常数,相关系数不变),为保证解的唯一性,我们施加方差约束: 其中 、 分别为两组变量的协方差矩阵。
核心数学推导
两组变量的联合协方差矩阵可表示为: 其中 为两组变量的交叉协方差矩阵,且 。
在方差约束下,典型变量与的相关系数可简化为 。我们的优化目标是最大化该值,引入拉格朗日乘子构造目标函数,对分别求偏导并令其为零,最终可推导出特征值方程:
定义矩阵 、,则 是矩阵和的非零特征值,为对应特征向量,即为典型相关系数。
设 ,则存在个非零特征值 ,对应对典型变量,满足:组内典型变量不相关、组间仅同序号典型变量相关,相关系数为对应。
实际应用中,我们用样本协方差矩阵估计总体参数,得到样本典型相关系数 。
典型相关系数的显著性检验
得到典型相关系数后,需通过统计检验判断其显著性,常用方法为Bartlett似然比检验。
整体相关性检验
首先检验两组变量是否整体相关:
- 原假设 (两组变量无相关关系,等价于所有典型相关系数均为0)
- 检验统计量: 近似服从自由度为 的 分布。
- 若检验的 p 值(P-value,注意勿与表示第一组变量维数的 混淆)小于 0.05,则拒绝原假设,说明两组变量整体存在显著相关。
逐对典型相关检验
整体显著后,需逐次联合检验确定保留的典型变量对数:
- 第步原假设 (第对及以后的典型相关系数均为0),其中
- 第步检验统计量(类比整体检验的 ,对剩余 个典型相关系数构造似然比): 近似服从自由度为 的 分布
- 若接受原假设则停止检验,保留前对典型变量
Python实战:典型相关分析
下面通过Python演示CCA的完整流程,包括数据生成、模型拟合与显著性检验:
import numpy as np
from scipy.stats import chi2
np.random.seed(42)
n = 150
u = np.random.normal(0, 1, size=n)
v = np.random.normal(0, 1, size=n)
x1 = 0.8 * u + np.random.normal(0, 0.4, size=n)
x2 = 0.6 * u + np.random.normal(0, 0.5, size=n)
x3 = np.random.normal(0, 1, size=n)
y1 = 0.75 * u + 0.3 * v + np.random.normal(0, 0.4, size=n)
y2 = 0.5 * v + np.random.normal(0, 0.6, size=n)
X = np.column_stack([x1, x2, x3])
Y = np.column_stack([y1, y2])
Sxx = np.cov(X, rowvar=False)
Syy = np.cov(Y, rowvar=False)
Sxy = np.cov(X, Y, rowvar=False)[:3, 3:]
Syx = Sxy.T
inv_Sxx = np.linalg.inv(Sxx)
inv_Syy = np.linalg.inv(Syy)
M1 = inv_Sxx @ Sxy @ inv_Syy @ Syx
eigenvals = np.linalg.eigvals(M1)
canonical_corrs = np.sqrt(np.sort(np.real(eigenvals))[::-1][:2])
p, q = 3, 2
stat = -(n - 1 - (p + q + 1) / 2.0) * np.sum(np.log(1.0 - canonical_corrs**2))
dof = p * q
p_val = 1.0 - chi2.cdf(stat, df=dof)
print("第一典型相关系数 r1:", round(float(canonical_corrs[0]), 4))
print("第二典型相关系数 r2:", round(float(canonical_corrs[1]), 4))
print("Bartlett 似然比检验统计量:", round(float(stat), 4))
print("自由度:", dof, "p 值:", round(float(p_val), 6))
print("两组变量整体极显著相关:", bool(p_val < 0.001))运行结果:
第一典型相关系数 r1: 0.7984
第二典型相关系数 r2: 0.1333
Bartlett 似然比检验统计量: 150.7753
自由度: 6 p 值: 0.0
两组变量整体极显著相关: True📝 动手练一练
- 思考题:典型相关分析中,为什么要对典型变量施加方差为1的约束?如果不加约束会出现什么问题?
- 实操题:修改实战代码中变量与潜在因子的相关系数(如将第一组变量对的系数调低),观察典型相关系数和显著性结果的变化。
参考答案:
- 相关系数具有尺度不变性:若将系数向量同时乘以任意非零常数,和的相关系数不会改变。不加方差约束会导致解不唯一(有无穷多组成比例的系数),施加的约束可固定系数尺度,得到唯一的典型变量。
本章小结
典型相关分析是研究两组多变量整体相关性的核心方法,核心要点回顾:
- 基本思想:通过构造两组变量的线性组合(典型变量),最大化其相关系数,刻画两组变量的整体关联。
- 数学本质:方差约束下的相关系数最大化问题,可转化为矩阵特征值求解问题,特征值的平方根即为典型相关系数。
- 显著性检验:通过Bartlett似然比检验先判断整体相关性,再逐次联合检验确定保留的典型变量对数。
- 实现工具:可通过
sklearn的CCA模块快速完成建模,结合scipy的卡方分布实现显著性检验。
实际应用中,除了关注统计显著性,还需结合领域知识解释典型变量的实际含义,才能充分发挥CCA的价值。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问