主成分分析

简介: 主成分分析

1 主成分分析 简介

主成分分析(Principal Component Analysis,PCA),是考察多个变量间相关性的一种多元统计方法,基本思想[1]就是在保留原始变量尽可能多的信息的前提下达到降维的目的,从而简化问题的复杂性并抓住问题的主要矛盾。最后筛选出的几个替代原始数据的变量被称为主成分,它们是原始变量的线性组合,关系图如下:

2 主成分分析 步骤

  • 构建原始数据矩阵;
  • 消除量纲——数据标准化;
  • 建立协方差矩阵(或相关系数矩阵);
  • 求出特征值、特征向量;
  • 根据方差、累计方差贡献率确定主成分个数;
  • 求出综合得分,给出现实意义的解释。

3 R语言实战

依据《R语言实战》提供的实例,下面用psych程序包中的USJudgeRatings数据集进行主成分分析,这个数据集描述的是律师对美国高等法院法官的评分情况,部分数据集及各变量含义如下所示:

>install.packages("psych")
>library(psych)
>USJudgeRatingsz

3.1 数据预处理

数据集中的CONT变量表示的是律师与法官的联系次数,由于该变量对评分情况没有影响,考虑在进行主成分分析时将其剔除,用cor函数检查变量间的相关性。

从相关系数矩阵中可以发现,有几个变量之间的相关性还是非常强的,表明这份数据适合做主成分分析。

3.2 构建主成分模型

R中构建主成分模型的常用函数有pricipal()princomp(),两者不同之处在于: pricipal() 只返回最佳nfactor的子集,而princomp() 将会得到和变量个数一样多的主成分。

  • 使用psych包中的pricipal()
>pc<-principal(USJudgeRatings,nfactors=1)
>pc

  • 使用基础函数pricomp()
>pc<-princomp(USJudgeRatings,cor=T)
>summary(pc)

运行结果如下所示:

3.3 确定主成分个数

原则[2]

  • 根据先验经验和理论知识判断主成分个数
  • 根据解释变量的累积方差贡献率来判断主成分个数
  • 通过检查变量间的相关系数矩阵来判断保留的主成分个数

碎石图能够直观地展现要选择的主成分数目,图中急剧的中断表明需要提取的主成分的适当数量,从图中可知最佳的主成分个数为1。

>fa.parallel(cor(USJudgeRatings),fa="pc",n.iter = 100,show.legend = F,main = "Scree plot with parallel analysis")

3.4 提取主成分

pricipal() 和碎石图的运行结果可知,第一主成分(PC1)与每一个变量都高度相关,也就是说,PC1是一个可用来进行一般性评价的维度。

运行结果中的h2指主成分对每个变量的方差解释度,u2指方差无法被主成分解释的比例。例如,法官正直度(INTG)84%的方差可以用PC1来解释,15.65%的方差不能由PC1来解释。SS loadings行包含了与主成分相关联的特征值。Proportion Var行表示的是每个主成分对整个数据集的解释程度。

3.5 主成分旋转

旋转后得到的主成分能更容易的解释原始变量,常用的旋转方法有:

  • 正交旋转:旋转后的主成分不相关
  • 斜交旋转:旋转后的主成分相关

本例中采用正交旋转中的方差极大旋转进行分析:

>rc<-principal(USJudgeRatings,nfactors = 1,rotate="varimax")
> rc

旋转后的结果如下:

3.6 计算主成分得分

  • 从原始数据中获取主成分得分
pc<-principal(USJudgeRatings,nfactors = 1,scores=T )
pc$scores

  • 当主成分分析基于相关系数矩阵时,无法从原始数据获得主成分得分,但是可以计算主成分得分的系数。
rc<-principal(cor(USJudgeRatings),nfactors = 1)

4 模型评价

从运行结果可知,PC1的累积方差贡献率为0.92,说明第一主成分可以解释原始变量92%的方差变化,模型拟合效果良好。

参考资料

[1]

基本思想: 《多元统计分析第5版_何晓群》

[2]

原则: 《R语言实战》


目录
相关文章
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
1627 0
|
Python
解决GNURadio自定义Python OOT块-导入块时报错问题
解决GNURadio自定义Python OOT块-导入块时报错问题
710 0
|
机器学习/深度学习 数据采集 分布式计算
阿里云机器学习平台PAI介绍|学习笔记
快速学习阿里云机器学习平台PAI介绍
5340 0
阿里云机器学习平台PAI介绍|学习笔记
|
Kubernetes Ubuntu 安全
Linux|科普扫盲帖|配置网络软件源---阿里云镜像仓库服务使用(centos,Ubuntu)
Linux|科普扫盲帖|配置网络软件源---阿里云镜像仓库服务使用(centos,Ubuntu)
4602 0
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
存储 安全 网络安全
网络安全中的安全审计与合规性:技术深度解析
【7月更文挑战第7天】安全审计与合规性是保障网络安全的重要环节。通过安全审计,企业可以及时发现并修复安全漏洞,提高系统的安全性;通过合规性管理,企业可以确保自身在法律法规和行业标准方面的合规性,降低违规风险。然而,在实施安全审计与合规性管理的过程中,企业也面临着技术复杂性、数据量大以及法规和合规性要求变化等挑战。因此,企业需要不断加强技术投入和人员培训,提高自身的安全审计与合规性管理水平。
|
机器学习/深度学习
一文看懂卷积运算(convolution)与互相关运算(cross-correlation)的区别
一文看懂卷积运算(convolution)与互相关运算(cross-correlation)的区别
|
设计模式 开发框架 编译器
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用(二)
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用
750 0
UE中创建可脚本化编辑器工具(Scriptable Tools)
UE中创建可脚本化编辑器工具(Scriptable Tools)
725 0
UE中创建可脚本化编辑器工具(Scriptable Tools)