降维之探索性因子分析

(本文首发于公众号:R语言画图)

写在前面

有两种常用的变量降维方法,其一是主成分分析(PCA),我们在前面的文章中已学习,这次是其二方法——探索性因子分析(EFA)。PCA使用线性变换技术,将数据从原先的坐标系统变换到新的坐标系统中,并计算投射到各个坐标轴中数据的方差值,按大到小排序,第一坐标轴称为第一主成分,第二坐标轴称为第二主成分,以此类推。如此操作之后,因为主成分之间相互不相关,就解决了原始变量之间存在的信息重叠问题,用较少的新的变量最大化地对原始数据重新进行刻画,极大方便了后续的数据分析。

要是原始变量能够根据相互之间的相关程度分成几组,使得组间相关不大而组内变量间存在着一定的相关性,EFA方法就比较适用,它将相同本质的变量归入一个因子(可以解释多个变量间共有的方差,也被称为公共因子),以此达到降维的目的。PCA中的主成分是对原始变量进行加权组合(下图中间部分,来自参考文章1),表示观测变量的变异导致了主成分的变异,而EFA是一种识别无法直接观测变量(即潜在因子)的技术,潜在因子被视为引起观测变量变化的原因(下图右边部分),其中权重系数a表示因子对于复合而成的可观测变量的贡献值。

下图展示了PCA和EFA模型两者之间的区别(来自参考文章2)。左侧显示,主成分PC1和PC2是经由观测变量X1~X5的线性组合得到的,并且组合的权重系数使得主成分能够最大化所解释的方差。右侧因子F1和F2被当作是解释观测变量的原因,圆圈e1~e5代表观测变量方差的误差,它们是无法用因子来解释的,同样无法直接观测,但可以通过变量间的相互关系推导得到。

实例演示

这次用到R自带的Harman74.cor数据集,它的类型是列表(list),属于R中最复杂的一种数据类型了,其中可以包含各种类型的对象,如向量、矩阵、数据框和列表自身。Harman74.cor包含24个心理测验之间的相关系数矩阵,被试是145个七年级或八年级的学生。EFA的分析步骤与PCA很类似,首先需要判断提取几个因子,代码和图形如下。

# 小数点后数字的位数
options(digits=2)
# 查看数据
Harman74.cor$cov
library(psych)
# fa="both"指出同时做PCA和EFA
fa.parallel(Harman74.cor$cov,n.obs=145,fa="both",n.iter=100,main="并行分析碎石图")

上图除了显示碎石分析(蓝色)和平行分析(红色)外,还有y=1的水平线(黑色),PCA可以根据特征值大于1的准则选取成分,不过EFA的准则是特征值大于0。根据结果图,蓝线拐点以上或是红线之上的三角形有四个,因此我们选取的因子数是四个。

与PCA相比,提取公共因子的方法会更多一些,有最大似然法(ml)、主轴迭代法(pa)、最小残差法(minres)等,是在fa()函数中通过fm参数进行指定,代码和图形如下。

# 统计学家倾向于使用ml,当ml不会收敛时可使用pa
fa <- fa(Harman74.cor$cov,nfactors=4,rotate="none",fm="pa")
fa

图中显示四个因子能够解释24个心理测验48%的方差,只是载荷阵(黄框部分,变量与因子间的相关系数)的意义不太好解释,需要使用到因子旋转,代码和图形如下。

# varimax使用正交旋转,人为强制四个因子不相关
fa1 <- fa(Harman74.cor$cov,nfactors=4,rotate="varimax",fm="pa")
fa1

图中因子变得更好解释了。句子填空、单词含义、段落理解等在第一因子上载荷较大,视觉感知、立方体等在第三因子上载荷较大,加法、数点、编码等在第二因子上载荷较大,单词再认、数字再认、人物再认等在第四因子上载荷较大,剩下几项在四个因子上载荷比较平均,这些表明存在文字理解因子、空间视觉因子、数学计算因子和回忆再认因子。可以使用fa.diagram()函数来绘制因子旋转之后的结果,代码和图形如下。

# TRUE仅显示每项最大载荷(上图红框部分)与所对应的因子
fa.diagram(fa1,simple=TRUE)

 

除了正交旋转,还可以使用斜交转轴法(如promax)来旋转以上四个因子,此时允许因子之间存在相关,虽然变得复杂,但模型会更贴合实际数据,代码和图形如下。

# 需要安装GPArotation程序包
library(GPArotation)
fa2 <- fa(Harman74.cor$cov,nfactors=4,rotate="promax",fm="pa")
fa2

上图红框部分组成了因子模式矩阵,它们是标准化的回归系数,已经不是相关系数。我们照样可以得到文字理解因子、空间视觉因子、数学计算因子和回忆再认因子,虽然列的名称依然是PA1~PA4。黄框部分是因子关联矩阵,因子间的相关系数从047~0.59,相关性还是比较大的。同样我们可以使用fa.diagram()函数来绘制变量与因子间的相关系数图,这次还显示了因子之间的相关系数,代码和图形如下,这种图在有多个因子时非常实用。

# 这次我们使用FALSE选项,有些变量与多个因子都存中等程度的相关
fa.diagram(fa2,simple=FALSE)

参考文章:

  1. 这样的数据分析员才有时间谈恋爱? 
    https://mp.weixin.qq.com/s?__biz=MjM5MDA3NjYyOQ==&mid=2650056454&idx=1&sn=162a3941a1e7e2f57f6da6c834c6aa70&chksm=be4a5cbc893dd5aa9a03f4595c7a490aa2408182650d8af0893ea31e932837ae2746138549e5&scene=21
  2. [图书]R语言实战第十四章主成分和因子分析
  3. R自带数据集介绍
    https://www.cnblogs.com/adam012019/p/14918647.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值