美文网首页ggplot集锦
【R实战 高级方法】十四、主成分和因子分析

【R实战 高级方法】十四、主成分和因子分析

作者: 佳奥 | 来源:发表于2022-07-13 15:34 被阅读0次

这里是佳奥!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都基于相关系数矩阵,因此在分析前去除缺失值显得非常重要。

本篇我们只是简略提到了处理缺失值的简单方法。在下一篇中,我们将学习理解和处理缺失值的更完善的方法。

我们下一篇再见!

相关文章

  • R语言主成分和因子分析篇

    转载自 R语言主成分和因子分析篇另可参考 R in action读书笔记(19)第十四章 主成分和因子分析 主成分...

  • 【R实战 高级方法】十四、主成分和因子分析

    这里是佳奥!R实战部分的学习进入后期,我们继续高级方法的学习。 主成分分析(PCA)是一种数据降维技巧,它能将大量...

  • 2018-04-19 PCA

    R语言主成分和因子分析篇 - CSDN博客 R语言做PCA的指导,很好 关于 R 中 princomp 和 prc...

  • 主成分分析

    主成分分析 主成分分析与因子分析探索简化多变量得常用方法。 主成分分析:principal component a...

  • 【R语言 第3篇】用R进行主成分分析

    主成分分析和探索性因子分析是两种用来探索和简化多变量复杂关系的常用方法。主成分分析(PCA)是一种将数据降维技巧,...

  • 主成分分析

    主成分分析 ##主成分分析pca-R语言实战::pca是把许多个体的不同特征转...

  • 利用 PCA 来对数据降维

    降维往往作为预处理步骤,其中独立成分分析、因子分析和主成分分析比较流行,主成分分析(PCA)最为广泛。 PCA借助...

  • 【理论篇】:主成分分析法和变量聚类

    压缩变量的思路方法 建模前—主成分、因子分析或变量聚类建模时—逐步法或者全子集法 主成分分析:根据变量之间的相关性...

  • 二、主成分和因子分析

    主成分:http://setosa.io/ev/http://setosa.io/ev/principal-com...

  • 理论:因子分析原理剖析

    因子分析概述: 因子分析分为Q型和R型,我们对R型进行如下研究: 一.因子分析步骤: 1.确认是是否适合做因子分析...

网友评论

    本文标题:【R实战 高级方法】十四、主成分和因子分析

    本文链接:https://www.haomeiwen.com/subject/pwctirtx.html