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

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

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


原理及区别

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

不同点主成分分析因子分析
原理每个主成分均为所有原始变量的线性组合,且各个主成分之间互不相关(但需要注意的是,主成分必须保留原始变量90%以上的信息,R语言实战中为保留85%)把所有原始变量变成几个公共因子和仅对某一个变量有关的特殊因子组成,提取解释作用的少数因子,原始变量可观测,但公共因子不可观测。
线性表示方向把方成分表示为各原始变量的线性组合把原始变量表示成各因子的线性组合
假设条件不需要各个共同因子之间不相关,特殊因子(specific factor)之间也不相关,共同因子和特殊因子之间也不相关。
求解方法从相关阵出发,可以适当避免变量间的差异,最理想的情况是主成分分析前的变量之间相关性高,且变量之间不存在多重共线性问题(会出现最小特征根接近0的情况)主成分法,主轴因子法,极大似然法,最小二乘法, α 因子提取法
变化当给定相关矩阵的特征值唯一时,主成分一秀是固定的因子不是固定的,可以通过旋转得到不同的因子
数量主成分的数量是一定的,最大为原始变量的个数,但可以根据实际需要选择提取前几个主成分(主要使用碎石图)由分析者指定,一般来说,特征值大于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、因子得分
因子一般是用于解释潜在变量而不是进一步分析,它的得分计算方式与主成分分析得分一致,此处略。

  • 24
    点赞
  • 220
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
平行坐标是一种常用的多维数据可视化方法,其将每个数据实例表示为一条线段,线段与每个维度对应的轴相交,通过连接这些交点得到一个多边形。平行坐标可以有效地展现多个维度的数据特征和它们之间的关系,尤其适用于数据挖掘、机器学习等领域中的数据分析和可视化任务。 以下是一些平行坐标的可视化案例及其分析: 1. 泰坦尼克号数据集 ![Titanic Parallel Coordinates Plot](https://miro.medium.com/max/1838/1*5YgQdFhEbhWmfqC7Yc-QJQ.png) 这个案例展示了泰坦尼克号数据集的平行坐标,其中每个数据点代表一位乘客。中的每个轴代表不同的属性,如乘客的性别、年龄、船舱等级等。通过观察表,我们可以看到一些明显的趋势,如女性在幸存率方面比男性更有优势,高级船舱的乘客幸存率更高等。这些趋势可以为进一步的数据分析和挖掘提供有价值的线索。 2. 人口普查数据集 ![Census Parallel Coordinates Plot](https://www.tableau.com/sites/default/files/media/2016-04/parallel_coordinate_plot.png) 这个案例展示了一个人口普查数据集的平行坐标,其中每个数据点代表一个美国州。中的每个轴代表不同的属性,如人口密度、失业率、教育程度等。通过观察表,我们可以看到一些州在某些属性上具有相似的特征,如人口密度和失业率高的州通常教育程度较低。这些发现可以为政策制定和社会经济研究提供有价值的参考。 3. 食品营养数据集 ![Food Nutrition Parallel Coordinates Plot](https://miro.medium.com/max/1838/1*JyNRlfMBJhXJNw9Y0d_Z4w.png) 这个案例展示了一个食品营养数据集的平行坐标,其中每个数据点代表一种食品。中的每个轴代表不同的营养成分,如蛋白质、脂肪、碳水化合物等。通过观察表,我们可以看到一些食品在某些成分上具有相似的特征,如饼干和糖果通常有大量的脂肪和碳水化合物。这些发现可以为食品行业和健康管理提供有价值的参考。 以上是一些平行坐标的可视化案例及其分析,这种可视化方法可以帮助我们更好地理解和分析多维数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sevan_Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值