- 主成分分析(Principal Component Analysis,PCA),是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息。
- 使用场景:一般来说,当研究的问题涉及到多变量且变量之间存在很强的相关性时,可考虑使用主成分分析的方法来对数据进行简化。
一、主成分分析的简要介绍
1.1 降维
- 主成分分析:把原来多个变量划为少数几个综合指标的一种统计分析方法 → 降维
- 降维的优点:
- 使得数据集更易使用;
- 降低算法的计算开销;
- 去除噪声;
- 使得结果容易理解。
1.2 PCA详细证明过程
- 参考视频(需要基础:多元统计和线性代数)
二、PCA的计算步骤
假设有n个样本,p个指标,则可构成大小为n×p的样本矩阵x:
2.1 标准化处理
2.2 计算标准化样本的协方差矩阵
( 2.1和2.2合并:直接计算x矩阵的样本相关系数矩阵 )
2.3 计算R的特征值和特征向量
- 软件会算好,不必自己算,Matlab中计算特征值和特征向量的函数:
eig(R)
函数 - R一定是半正定矩阵 → 则一定非负(线代知识)
2.4 计算主成分贡献率以及累计贡献率
2.5 写出主成分
- 一般取累计贡献率超过80%的特征值所对应的第一、第二、… 、第m(m≤p)个主成分。第i个主成分:F=a1iX1+ a2iX2+…十apiXp(i=1,2,…,m)
2.6 根据系数(api)分析主成分代表的意义
- 对于某个主成分而言,指标前面的系数越大,代表该指标对于该主成分的影响越大
2.7 利用主成分的结果进行后续的分析
- 主成分得分:不能评价类模型!
- 主成分可用于聚类分析→方便画图
- 主成分可用于回归分析
三、主成分分析的应用例题1
3.1 题目
- 在制定服装标准的过程中,对128名成年男子的身材进行了测量,每人测得的指标中含有这样六项:身高(x1)、坐高(x2) 、胸围(x3) 、手臂长(x4) 、肋围(x5)和腰围(x6) 。所得样本相关系数矩阵(对称矩阵)列于下表。
- 注意:本题给我们的数据直接就是样本相关系数矩阵,一般建模时,得到的数据是最原始的数据(每一列是指标,每一行是样本)。
3.2 计算关键变量
- 经过计算,相关系数矩阵的特征值、相应的特征向量以及贡献率列于下表:
- 从表中可以看到前三个主成分的累计贡献率达85.9%,因此可以考虑只取前面三个主成分,它们能够很好地概括原始变量。
3.3 写出主成分并简要分析
- 第一主成分F1对所有(标准化)原始变量都有近似相等的正载荷,故称第一主成分为(身材)大小成分。
- 第二主成分F2在X3,X5,X6上有中等程度的正载荷,而在X1,X2,X4上有中等程度的负载荷,称第二主成分为形状成分(或胖瘦成分)。
- 第三主成分F3在X2上有大的正载荷,在X4上有大的负载荷,而在其余变量上的载荷都较小,可称第三主成分为臂长成分。
- 注:由于第三主成分的贡献率不高(7.65%)且实际意义也不太重要,因此我们也可以考虑只取前两个主成分进行分析。
3.4 主成分分析的说明
- 在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平,其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释。
- 主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。 因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”。
- 如果原始变量之间具有较高的相关性,则前面少数几个主成分的累计贡献率通常就能达到一个较高水平,也就是说,此时的累计贡献率通常较易得到满足。
- 主成分分析的困难之处主要在于要能够给出主成分的较好解释,所提取的主成分中如有一个主成分解释不了,整个主成分分析也就失败了。
- 主成分分析是变量降维的一种重要、常用的方法,简单的说,该方法要应用得成功,一是靠原始变量的合理选取,二是靠“运气”。
——参考教材:《应用多元统计分析》王学民
四、主成分分析的应用例题2
4.1 题目
4.2 计算关键变量
4.3 对主成分的简要分析
由上表可知,前两个主成分的累计贡献率已高达93.7%,第一主成分F1在所有变量上有几乎相等的正载荷,可称为在径赛项目上的强弱成分。第二主成分F2在各个指标上的载荷基本上逐个递减,反映了速度与耐力成绩的对比
4.4 Matlab代码
PCA.m
(更加详细的代码注释可见源代码)
%% 第一步:对数据x标准化为X
X=zscore(x);%% 第二步:计算样本协方差矩阵
R = cov(X);
%% 注意:以上两步可合并为下面一步:直接计算样本相关系数矩阵
R = corrcoef(x);%% 第三步:计算R的特征值和特征向量
[V,D] = eig(R); % V 特征向量矩阵 D 特征值构成的对角矩阵%% 第四步:计算主成分贡献率和累计贡献率
lambda = diag(D); % diag函数用于得到一个矩阵的主对角线元素值(返回的是列向量)
lambda = lambda(end:-1:1); % 因为lambda向量是从小大到排序的,我们将其调个头
% 计算贡献率
contribution_rate = lambda / sum(lambda);
% 计算累计贡献率 cumsum是求累加值的函数
cum_contribution_rate = cumsum(lambda)/ sum(lambda);
% 注意:这里的特征向量要和特征值一一对应,之前特征值相当于颠倒过来了,因此特征向量
的各列需要颠倒过来
% rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果
V=rot90(V)';
对相关系数R进行可视化
-
①将R的数据复制到Excel表中,并设定行高为50
-
③色阶修改
-
④管理规则(颜色越深代表相关性越强)
4.5 利用Matlab进行主成分分析
4.6 对结果的解释
从上表可以看出,前两个和前三个主成分的累计贡献率分别达到80.6%和87.8%,第一主成分F1在所有变量(除在x2上的载荷稍偏小外)上都有近似相等的正载荷,反映了综合消费性支出的水平,因此第一主成分可称为综合消费性支出成分。第二主成分F2在变量x2上有很高的正载荷,在变量x4上有中等的正载荷,而在其余变量上有负载荷或很小的正载荷。可以认为这个主成分度量了受地区气候影响的消费性支出(主要是衣着 ,其次是医疗保健 )在所有消费性支出中占的比重(也可理解为一种消费倾向),第二主成分可称为消费倾向成分。第三主成分很难给出明显的解释,因此我们只取前面两个主成分。
五、主成分分析的滥用:主成分得分
-
①王学民老师
-
②清风老师的补充
- 主成分是降维算法,既然已经有数据了,为什么不把这些数据的信息全部用上呢?主成分分析是会损失原始数据的信息的。
- 指标可能有各种类型(极大、极小、区间等),主成分只有标准化的过程,并没有正向化的过程。
-
滥用的例子:
六、主成分分析用于聚类
-
Matlab生成结果复制进spss中
-
查看能大概分成几类:如下为3类
- 主成分和之前聚类模型对比生成的聚类结果:
-
生成聚类效果图
-
聚类效果图:主成分聚类最大的意义就是可视化最后的聚类效果,毕竟使用主成分是会降低部分信息的。(只有在指标个数特别多,且指标之间存在很强的相关性时才用主成分聚类。)
七、主成分回归
- 主成分回归可用来解决多重共线性的问题。
7.1 例题:探究棉花单产和五个指标之间的关系
7.2 主成分的解释
- 从表中可以看出,前两个主成分的累计贡献率为97.74%,第一主成分F1在所有变量(除在x3上的载荷稍偏小外)上都有近似相等的正载荷,反映了在种植投入上较为综合的水平,因此第一主成分可称为综合投入成分。第二主成分F2在变量x3(农药)上有很高的负载荷,在变量x2上有较低的负载荷,而在其余变量上均为正载荷。可以认为这个主成分度量了受土壤环境影响的投入(主要是农药 ,其次是机械费用 )在所有投入中占的比重。
7.3 在Stata中回归结果
- Stata回归代码:
reg Y F1 F2
- Stata异方差检验代码:
estat imtest,white
- 最重要解释回归系数,因为都是显著的
八、思考
- 问题1:之前学过逐步回归,逐步回归也可以用来解决多重共线性问题,该用逐步回归还是今天学习的主成分分析呢?
- 如果能够很好的解释清楚主成分代表的含义,那么建议在正文中既用主成分分析,又用逐步回归(多分析点没啥坏处,只要你能保证你不分析错就行);如果解释不清楚,还是用逐步回归。
- 问题2:主成分回归后,需要将原来的变量带回到回归方程吗?
- 没必要。因为要是代回去了,和普通的回归没什么区别。主成分的核心作用就是降维,代回去了维度也没降。