这里是佳奥!R实战部分的学习进入后期,我们继续高级方法的学习。
主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。
探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法。它通过寻找一组更小的、潜在的或隐藏的结构来解释已观测到的、显式的变量间的关系。
首先,我们将回顾R中可用来做PCA或EFA的函数,并简略看一看相关分析流程。
然后,逐步分析两个PCA示例,以及一个扩展的EFA示例。
最后,本篇简要列出R中其他拟合潜变量模型的软件包,包括用于验证性因子分析、结构方程模型、对应分析和潜在类别分析的软件包。
1 R中的主成分和因子分析
本篇我们将重点介绍psych包中提供的函数。
psych包中有用的因子分析函数:

最常见的步骤如下:
(1) 数据预处理。PCA和EFA都根据观测变量间的相关性来推导结果。用户可以输入原始数据矩阵或者相关系数矩阵到principal( )和fa( )函数中。
(2) 选择因子模型。判断是PCA(数据降维)还是EFA(发现潜在结构)更符合研究目标。
如果选择EFA方法,还需要选择一种估计因子模型的方法(如最大似然估计)。
(3) 判断要选择的主成分/因子数目。
(4) 选择主成分/因子。
(5) 旋转主成分/因子。
(6) 解释结果。
(7) 计算主成分或因子得分。
2 主成分分析
PCA的目标是用一组较少的不相关变量代替大量相关变量,同时尽可能保留初始变量的信息,这些推导所得的变量称为主成分,它们是观测变量的线性组合。
数据集USJudgeRatings包含了律师对美国高等法院法官的评分。数据框包含43个观测,12个变量。

我们的目标是简化数据,所以可使用PCA。
数据保持初始得分的格式,没有缺失值。
因此,下一步的决策便是判断需要多少个主成分。
2.1 判断主成分的个数
利用fa.parallel( )函数,我们可以同时对三种特征值判别准则进行评价。
对于11种评分(删去了CONT变量),代码如下:


上图展示了基于观测特征值的碎石检验(由线段和x符号组成)、根据100个随机数据矩阵推导出来的特征值均值(虚线),以及大于1的特征值准则(y=1的水平线)。
2.2 提取主成分
principal( )函数可以根据原始数据矩阵或者相关系数矩阵做主成分分析。格式为:

其中:
r是相关系数矩阵或原始数据矩阵。
nfactors设定主成分数(默认为1)。
rotate指定旋转的方法[默认最大方差旋转(varimax)。
scores设定是否需要计算主成分得分(默认不需要)。
美国法官评分的主成分分析:


由于PCA只对相关系数矩阵进行分析,在获取主成分前,原始数据将会被自动转换为相关系数矩阵 。
PC1栏包含了成分载荷,指观测变量与主成分的相关系数。如果提取不止一个主成分,那么还将会有PC2、PC3等栏。
成分载荷(component loadings)可用来解释主成分的含义。此处可以看到,第一主成分(PC1)与每个变量都高度相关,也就是说,它是一个可用来进行一般性评价的维度。
h2栏指成分公因子方差——主成分对每个变量的方差解释度。
u2栏指成分唯一性——方差无法被主成分解释的比例(1-h2)。
例如,体能(PHYS)80%的方差都可用第一主成分来解释,20%不能。相比而言,PHYS是用第一主成分表示性最差的变量。
SS loadings行包含了与主成分相关联的特征值,指的是与特定主成分相关联的标准化后的方差值(本例中,第一主成分的值为10)。
最后,Proportion Var行表示的是每个主成分对整个数据集的解释程度。此处可以看到,第一主成分解释了11个变量92%的方差。
我们再来看看第二个例子,它的结果不止一个主成分。Harman23.cor数据集包含305个女孩的8个身体测量指标:

我们希望用较少的变量替换这些原始身体指标。
如下代码可判断要提取的主成分数。此处,我们需要填入相关系数矩阵(Harman23.cor对象中的cov部分),并设定样本大小(n.obs):


与第一个例子类似,图形中的Kaiser-Harris准则、碎石检验和平行分析都建议选择两个主成分。
我们选择前两个主成分进行身体测量指标的主成分分析:


PC1和PC2栏可以看到,第一主成分解释了身体测量指标58%的方差,而第二主成分解释了22%,两者总共解释了81%的方差。对于高度变量,两者则共解释了其88%的方差。
载荷阵解释了成分和因子的含义。
第一主成分与每个身体测量指标都正相关,看起来似乎是一个一般性的衡量因子;
第二主成分与前四个变量(height、arm.span、forearm和lower.leg)负相关,与后四个变量(weight、bitro.diameter、chest.girth和chest.width)正相关,因此它看起来似乎是一个长度—容量因子。
当提取了多个成分时,对它们进行旋转可使结果更具解释性。
2.3 主成分旋转
旋转是一系列将成分载荷阵变得更容易解释的数学方法,它们尽可能地对成分去噪。
旋转方法有两种:使选择的成分保持不相关(正交旋转),和让它们变得相关(斜交旋转)。
方差极大旋转的主成分分析:


列的名字都从PC变成了RC,以表示成分被旋转。
观察RC1栏的载荷,可以发现第一主成分主要由前四个变量来解释(长度变量)。
RC2栏的载荷表示第二主成分主要由变量5到变量8来解释(容量变量)。
注意两个主成分仍不相关,对变量的解释性不变,这是因为变量的群组没有发生变化。
我们的最终目标是用一组较少的变量替换一组较多的相关变量,因此,还需要获取每个观测在成分上的得分。
2.4 获取主成分得分
利用principal( )函数,我们很容易获得每个调查对象在该主成分上的得分:

当scores = TRUE时,主成分得分存储在principal( )函数返回对象的scores元素中。
还可以获得律师与法官的接触频数与法官评分间的相关系数:

显然,律师与法官的熟稔度与律师的评分毫无关联。
在身体测量数据中,有各个身体测量指标间的相关系数,但是没有305个女孩的个体测量值。
下列代码可得到得分系数:

利用如下公式可得到主成分得分:

PC2同理。
3 探索性因子分析
EFA的目标是通过发掘隐藏在数据下的一组较少的、更为基本的无法观测的变量,来解释一组可观测变量的相关性。
为阐述EFA的分析过程,我们用它来对六个心理学测验间的相关性进行分析。
112个人参与了六个测验,包括非语言的普通智力测验(general)、画图测验(picture)、积木图案测验(blocks)、迷津测验(maze)、阅读测验(reading)和词汇测验(vocab)。
我们的目的是如何用一组较少的、潜在的心理学因素来解释参与者的测验得分。
数据集ability.cov提供了变量的协方差矩阵,可用cov2cor( )函数将其转化为相关系数矩阵。数据集没有缺失值。

下一步工作为判断需要提取几个因子。
3.1 判断需提取的公共因子数
用fa.parallel( )函数可判断需提取的因子数:


代码中使用了fa = "both",因子图形将会同时展示主成分和公共因子分析的结果。
图中同时展示了PCA和EFA的结果。PCA结果建议提取一个或者两个成分,EFA建议提取两个因子。
3.2 提取公共因子
我们决定提取两个因子,可以使用fa()函数获得相应的结果:

r是相关系数矩阵或者原始数据矩阵。
nfactors设定提取的因子数(默认为1)。
n.obs是观测数(输入相关系数矩阵时需要填写)。
rotate设定旋转的方法(默认互变异数最小法)。
scores设定是否计算因子得分(默认不计算)。
fm设定因子化方法(默认极小残差法)。
本例使用主轴迭代法(fm = "pa")提取未旋转的因子:


可以看到,两个因子解释了六个心理学测验60%的方差。
3.3 因子旋转
现在我们同时尝试下两种方法,看看它们的异同。
首先使用正交旋转:


阅读和词汇在第一因子上载荷较大,画图、积木图案和迷宫在第二因子上载荷较大,非语言的普通智力测量在两个因子上载荷较为平均,这表明存在一个语言智力因子和一个非语言智力因子。
使用正交旋转将人为地强制两个因子不相关。如果想允许两个因子相关该怎么办呢?此时可以使用斜交转轴法,比如promax:


PA1和PA2栏中的值组成了因子模式矩阵。因子关联矩阵显示两个因子的相关系数为0.55,相关性很大。
因子结构矩阵(或称因子载荷阵)没有被列出来,但可以使用公式F = P*Phi很轻松地得到它,其中F是因子载荷阵,P为因子模式矩阵,Phi为因子关联矩阵:

对上面的例子使用该函数,可得:

现在可以看到变量与因子间的相关系数。
将它们与正交旋转所得因子载荷阵相比,会发现该载荷阵列的噪音比较大,这是因为之前允许潜在因子相关。
使用factor.plot( )或fa.diagram( )函数,可以绘制正交或者斜交结果的图形:

数据集ability.cov中心理学测验的两因子图形。
词汇和阅读在第一个因子(PA1)上载荷较大,而积木图案、画图和迷宫在第二个因子(PA2)上载荷较大。普通智力测验在两个因子上较为平均:

代码:


若使simple = TRUE,那么将仅显示每个因子下最大的载荷,以及因子间的相关系数。这类图形在有多个因子时十分实用。
3.4 因子得分
EFA并不那么关注计算因子得分。
在fa( )函数中添加score = TRUE选项(原始数据可得时)便可很轻松地获得因子得分。
另外还可以得到得分系数(标准化的回归权重),它在返回对象的weights元素中。
对于ability.cov数据集,通过二因子斜交旋转法便可获得用来计算因子得分的权重:

与可精确计算的主成分得分不同,因子得分只是估计得到的。
3.5 其他与EFA相关的包
FactoMineR包、FAiR包、GPArotation包、nFactors包。
4 其他潜变量模型
在EFA中,我们可以用数据来判断需要提取的因子数以及它们的含义。
但是我们也可以先从一些先验知识开始,比如变量背后有几个因子、变量在因子上的载荷是怎样的、因子间的相关性如何,然后通过收集数据检验这些先验知识。这种方法称作验证性因子分析(CFA)。而CFA是结构方程模型(SEM)中的一种方法。
潜类别模型(潜在的因子被认为是类别型而非连续型)可通过FlexMix、lcmm、randomLCA和poLC包进行拟合。
最后,R中还包含了众多的多维标度法(MDS)计算工具。
5 小结
本章,我们主要学习了主成分分析(PCA)和探索性因子分析(EFA)两种方法。
PCA在数据降维方面非常有用,它能用一组较少的不相关变量来替代大量相关变量,进而简化分析过程。
EFA包含很多方法,可用来发现一组可观测变量背后潜在的或无法观测的结构(因子)。
我们探究了这两种方法的模型,学习了判断需提取的主成分/因子数的方法、提取主成分/因子和通过旋转增强解释力的方法,以及获得主成分/因子得分的技巧。
由于PCA和EFA都基于相关系数矩阵,因此在分析前去除缺失值显得非常重要。
本篇我们只是简略提到了处理缺失值的简单方法。在下一篇中,我们将学习理解和处理缺失值的更完善的方法。
我们下一篇再见!
网友评论