R语言实战笔记–第十四章 主成分和因子分析

标签(空格分隔): R语言 主成分分析 因子分析


原理及区别

  主成分分析与因子分析很接近,其目的均是为了降维,以更简洁的数据去解释结果,但这两种方法其实是相差甚远,有幸找到一篇博文描述了这两者的不同,主成分分析和因子分析十大不同点【原文连接】,在这里引用(略有更改)一下。

不同点 主成分分析 因子分析
原理 每个主成分均为所有原始变量的线性组合,且各个主成分之间互不相关(但需要注意的是,主成分必须保留原始变量90%以上的信息,R语言实战中为保留85%) 把所有原始变量变成几个公共因子和仅对某一个变量有关的特殊因子组成,提取解释作用的少数因子,原始变量可观测,但公共因子不可观测。
线性表示方向 把方成分表示为各原始变量的线性组合 把原始变量表示成各因子的线性组合
假设条件 不需要 各个共同因子之间不相关,特殊因子(specific factor)之间也不相关,共同因子和特殊因子之间也不相关。
求解方法 从相关阵出发,可以适当避免变量间的差异,最理想的情况是主成分分析前的变量之间相关性高,且变量之间不存在多重共线性问题(会出现最小特征根接近0的情况) 主成分法,主轴因子法,极大似然法,最小二乘法,α\alpha因子提取法
变化 当给定相关矩阵的特征值唯一时,主成分一秀是固定的 因子不是固定的,可以通过旋转得到不同的因子
数量 主成分的数量是一定的,最大为原始变量的个数,但可以根据实际需要选择提取前几个主成分(主要使用碎石图) 由分析者指定,一般来说,特征值大于1的因子均可入选,指定因子数量不同,结果也不同
解释重点 重点解释各个变量的总方差 重点解释各变量之间的协方差
算法 协方差矩阵的对角元素是变量的方差 协方差矩阵的对角元素是和变量对应的共同度(变量方差中被各因子所解释的部分)
优点 仅考虑把多个复杂变量变量少数变量进入后续分析,可考虑主成分分析,一般情况下也可以使用因子分析;可通过计算综合主成分函数得分,对客观经济现象进行科学评价;它在应用上侧重于信息贡献影响力综合评价;应用范围广,主成分分析不要求数据来自正态分布总体,其技术来源是矩阵运算的技术以及矩阵对角化和矩阵的谱分解技术,因而凡是涉及多维度问题,都可以应用主成分降维。 对于因子分析,可以使用旋转技术,使得因子更好的得到解释,因此在解释主成分方面因子分析更占优势;其次因子分析不是对原有变量的取舍,而是根据原始变量的信息进行重新组合,找出影响变量的共同因子,化简数据。
应用场景 可以用于系统运营状态做出评估,一般是将多个指标综合成一个变量,即将多维问题降维至一维,这样才能方便排序评估;此外还可以应用于经济效益、经济发展水平、经济发展竞争力、生活水平、生活质量的评价研究上;主成分还可以用于和回归分析相结合,进行主成分回归分析,甚至可以利用主成分分析进行挑选变量,选择少数变量再进行进一步的研究;一般情况下主成分用于探索性分析,很少单独使用,用主成分来分析数据,可以让我们对数据有一个大致的了解。几个常用组合:主成分分析+判别分析,适用于变量多而记录数不多的情况;主成分分析+多元回归分析,主成分分析可以帮助判断是否存在共线性,并用于处理共线性问题;主成分分析+聚类分析,不过这种组合因子分析可以更好的发挥优势。 首先,因子分析+多元回归分析,可以利用因子分析解决共线性问题;其次,可以利用因子分析,寻找变量之间的潜在结构;再次,因子分析+聚类分析,可以通过因子分析寻找聚类变量,从而简化聚类变量;此外,因子分析还可以用于内在结构证实

psych包

  R语言实战中,基于psych包对这两种分析作出了解释,其相关函数及简介如下:

函数 简介
fa.parallel() 含平行分析的碎石图
fa.parallel(data,n.obs=,fa=”pc”/”both”,n.iter=100,show.legend=T/F)
data:原始数据数据框
n.obs:当data是相关系数矩阵时,给出原始数据(非原始变量)个数,data是原始数据矩阵时忽略此参数
fa:”pc”为仅计算主成分,”botn”为计算主成分及因子
n.iter:模拟平行分析次数
show.legend:显示图例
principal() 含多种可选的方差旋转方法的主成分分析
principal(r,nfactors=,rotate=,scores=)
r:相关系数矩阵或原始数据矩阵
nfactors:设定主成分数,默认为1
rotate:指定旋转方式,默认为最大方差旋转(varimax)
scores:设定是否需要计算成分得分,默认FALSE
fa() 可用主轴、最小残差、加权最小平方或最大似然法估计的因子分析
fa(r,n.obs=,nfactors=,rotate=,scores=,fm=)
r是相关系数矩阵或者原始数据矩阵
nfactors设定提取的因子数(默认为1)
n.obs是观测数(输入相关系数矩阵时需要填写)
rotate设定旋转的方法(默认互变异数最小法)
scores设定是否计算因子得分(默认不计算)
fm设定因子化方法(默认极小残差法)。
factor.plot() 绘制因子分析或主成分分析的结果
fa.diagram() 绘制因子分析或主成分的载荷矩阵
scree() 因子分析和主成分分析的碎石图

主成分分析及因子分析的步骤图示如下:

关于碎石图及平行分析图:
  简单来说,可通过比较碎石图和平行分析的均值两条线,位于均值之上的点个数即为需要引入分析的个数。实际上,碎石图应该入选弯曲最大处之上的变量,特征值大于1的成分也可以入选。
  

例子

主成分分析

1、判断主成分个数
library(psych)
fa.parallel(USJudgeRatings[,-1],fa=”pc”,n.iter=100,show.legend=F)
可以看到只有一个特征值位于平均线上,也只有一个特征值大于1,所以可以断送主成分数为1
2、提取主成分
#单个主成分
pc<-principal(USJudgeRatings[,-1],nfactors=1,rotate=”none”)
pc
#多个主成分
pc2<-principal(Harman23.cor$cov,nfactors=2,rotate=”none”)
pc2

PC1为成分载荷(指观测变量与主成分的相关系数),若提取的主成分大于1,则会出现PC2、PC3等,成分载荷可以解释主成分与各变量的相关程度,此处可看出PC1与各变量调试相关,它是一个可以用来进行一般性评价的维度。
h2栏为成分公因子方差,即主成分对每个变量的方差解释度。
u2栏为成分唯一性,即方差无法被主成分解释的部分(1-h2)
SS loadings为与各主成分相关联的特征值,即可以通过它来看90%的方差可以被多少个成分解释,从而选出主成分(即可使用nfactors=原始变量个数来把所有特征值查出,当然也可以直接通过eigen函数对它的相关矩阵进行查特征值)
Proportion Var表示每个主成分对整个数据集的解释程度
Cumulative Var表示各主成分解释程度之和
Proportion Explained及Cumulative Proportion分别为按现有总解释方差百分比划分主成分及其累积百分比
3、主成分旋转
在经济论坛上看到,主成分更加倾向于不进行旋转,但R语言实战书中进行了旋转,在这也说明一下。
pc2<-principal(Harman23.cor$cov,nfactors=2,rotate=”varimax”)
pc2

旋转后,PC1变成了RC1,其它名称,旋转后的成分载荷变为每个成分只与某几个变量呈较大相关性使成分更具解释性(这里其实可以理解为主要因子,因子分析中就有主成分法,差异就是因子分析还需要把剩下的成分进入特殊因子中,再多出一个特殊因子来)
4、主成分得分
主成分得分是这么一回事,我们的主成分分析目的是为了利用较少变量代替较大变量来进行进一步的分析,得分把这些原始变量替换成主成分后,主成分对应的值是多少。得分分为两种情况:
#直接在计算主成分的时候,加入scores=T
pc
#含原始数据时,直接使用score来获取,但需要注意的是,所计算的得分是标准化后的得分,而非原结果!
pc<-principal(USJudgeRatings[,-1],nfactors=1,rotate=”none”,scores=T)
pc$score
#不含原始数据时,需要利用得分系数来计算,放在weights中
pc2<-principal(Harman23.cor$cov,nfactors=2,rotate=”varimax”,scores=T)
unclass(pc2$weights)

因子分析

1、判断提取公共因子数
与主成分分析一致,fa参数改为”both”即可
covariances<-ability.cov$cov
correlations<-cov2cor(covariances)
fa.parallel(correlations,n.obs=112,fa=”both”,n.iter=100)
可以看到,主成分及因子分析的选取个数都在图中显示,建议主成分选择1-2个(平均线来看是选择1个,但以特征值大于1来看,选择2个,R中的结果是给出选择1个),因子选择2个
2、提取公共因子
fa<-fa(correlations,nfactors=2,rotate=”none”,fm=”pa”)
利用主轴迭代法提取未旋转的公共因子,所得结果中,两个因子共解释了60%的方差,一般上使用最大似然法较好,但有时候最大似然法不会收敛,此时使用主轴迭代法较好。
此时计算所得结果的因子载荷不好解释(因子分析的目的是为了解释潜在因子,一般是多个原始变量的集合)
3、因子旋转
当因子难以解释的时候,可以使用因子旋转来增强解释度,方法并无好坏之分,需要从非统计角度,即实际解释出发去解释因子。
#正交旋转
fa.varimax<-fa(correlations,nfactors=2,rotate=”varimax”,fm=”pa”)
#斜交旋转,需要注意的是,斜交旋转时,得到的结果是因子关联矩阵,并非因子载荷阵
fa.promax<-fa(correlations,nfactors=2,rotate=”promax”,fm=”pa”)
正交旋转所得结果是因子载荷阵,也可以称之为因子结构矩阵,斜交旋转时,会考虑三个矩阵:因子结构矩阵、因子模式矩阵和因子关联矩阵
因子结构矩阵:即因子载荷矩阵,变量与因子的相关系数。
因子模式矩阵:即标准化的回归系数矩阵,列出了因子预测变量的权重
因子关联矩阵:因子相关系数矩阵
这三者的关系:因子结构阵=因子模式矩阵*因子关联矩阵
可以使用自定义函数来求得斜交旋转之后的因子结构阵,函数如下:
fsm<-function(obj){
if(class(obj)[2]==”fa” & is.null(obj$Phi)){
warning(“Object doesn’t look like oblique EFA”)
}else{
P<-unclass(obj$loading)
F<-P %*% obj$Phi
colnames(F)<-c(“PA1”,”PA2”)
return(F)
}
}
fsm(fa.promax)
因斜交旋转允许因子相关,所得到的因子载荷阵与下次旋转相比,噪声会更大,且更加复杂,但模型可能更符合实际。
作出因子提取后,可使用factor.plot()和fa.diagram()函数来进行绘图。
factor.plot(fa.promax,labels=rownames(fa.promax$loadings))
所得到的是两因子图形,若存在三个或以上因子,则会显示两因子矩阵
fa.diagram(fa.promax,simple=F)
所得结果是因子结果图,若simple=FALSE则全部显示载荷较大变量,TRUE则仅显示每个因子下的最大载荷及因子间的相关系数,此在因子数量较多时较为好用。
4、因子得分
因子一般是用于解释潜在变量而不是进一步分析,它的得分计算方式与主成分分析得分一致,此处略。

R语言实战笔记--第十四章 主成分和因子分析相关推荐

  1. R语言实战笔记--第十五章 处理缺失数据

    R语言实战笔记–第十五章 处理缺失数据 标签(空格分隔): R语言 处理缺失数据 VIM mice 缺失值(NA),是导致我们计算错误的一大来源,处理缺失数据在实际的应用中有着较为重要的作用. 基本方 ...

  2. R语言实战笔记--第十二章 重抽样(置换检验)与自助法

    R语言实战笔记–第十二章 重抽样(置换检验)与自助法 标签(空格分隔): R语言 重抽样 自助法 置换检验 置换检验 双样本均值检验的时候,假设检验的方法就是,检查正态性.独立性.方差齐性,分别对应的 ...

  3. R语言学习笔记(十四):聚类分析

    #聚类分析 par(mfrow=c(1,1)) #计算距离 install.packages("flexclust") data(nutrient,package="fl ...

  4. R语言实战笔记--第四五章 数据管理

    R语言实战笔记–第四&五章 数据管理 标签(空格分隔): R语言 第四.第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的 ...

  5. R语言实战笔记--第九章 方差分析

    R语言实战笔记–第九章 方差分析 标签(空格分隔): R语言 方差分析 术语 组间因子,组内因子,水平:组间因子和组同因子的区别是,组间因子对所有测试对象进行分组,而组内因子则把所有测试对象归为同一组 ...

  6. R语言实战笔记--第八章 OLS回归分析

    R语言实战笔记–第八章 OLS回归分析 标签(空格分隔): R语言 回归分析 首先,是之前的文章,数理统计里面的简单回归分析,这里简单回顾一下: 简单回归分析的原理:最小二乘法,即使回归函数与实际值之 ...

  7. Linux(b站视频兄弟连)自学笔记第十四章——日志管理

    Linux(b站视频兄弟连)自学笔记第十四章--日志管理 简介 rsyslogd 日志轮替 简介 rsyslogd 日志轮替

  8. R语言mad(c(1 2 3 4)),R语言--数据管理-R语言实战笔记-第四五章

    第四.第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的数据样本,对的,"合适",做到合适可不是一个简单的事情 ...

  9. 学习笔记-第十四章 恶意代码分析实战

    第十四章 恶意代码的网络特征 1.网络应对措施. 网络行为的基本属性包括IP地址,TCP端口,以及流量内容等,网络和安全 设备可以利用它们,来提供网络应对措施.根据IP地址和端口,防火墙和路由器可以限 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(三)-样本搜索和找回-基于漫游者号模拟器-使用moviepy输出测试视频
  2. VHDL硬件描述语言(二)——子程序
  3. dlopen函数的用法
  4. 后端技术:MyBatis 知识点整理,值得收藏!
  5. c语言金箍棒答案,《西游记》阅读测试题(带答案)
  6. set和map去重调用什么方法_【ES6】Set、Map
  7. ONLINE_JUDGE
  8. 学习笔记01:《开放平台产品成长之路-POP》
  9. @程序员,沟通这项核心技能你掌握了多少?
  10. jsp文件创建后自动设置其pageEncoding的属性值为UTF-8
  11. vi单文件操作常用命令
  12. 邵阳学院学校云认证码_2021年湖南对口单招升学学校排名
  13. SpringBoot基于易邮邮件服务器实现本地邮件收发
  14. 静态单赋值(二)—gcc中的SSA化算法
  15. 大文件上传到linux服务器,上传文件到服务器的Linux命令
  16. 计算机辅助设计的英语缩写是什么,计算机辅助设计的英文缩写是什么
  17. X11 Wayland 及 Mir 比较
  18. Ubuntu添加中文支持
  19. VSCode搭建Vue项目及服务器部署
  20. win10无线网卡驱动怎么安装【系统天地】

热门文章

  1. 『Java安全』Tomcat内存马_动态注册Listener内存马
  2. 利用QT实现瀑布图、Lofar谱图、色谱图,热力图(二)
  3. 我碌碌无为的研究生生活
  4. 每日基础知识学习day1
  5. Java共享充电宝地图应用_基于jsp的共享充电宝-JavaEE实现共享充电宝 - java项目源码...
  6. 1354柯南的变声蝴蝶结
  7. 很多工程项目没有意识到Oracle P6软件的重要性
  8. 实践与共享:一键永久激活 Windows Server 2008 和 Windows Server 2008 R2 的MAK密钥
  9. Redist-Java 有序列表操作
  10. JavaWeb项目在Tomcat中的部署