百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

用R语言做数据分析——探索性因子分析

bigegpt 2024-09-17 12:38 24 浏览

EFA的目标是通过发掘隐藏在数据下的一组较少的、更为基本的无法观测的变量,来解释一组可观测变量的相关性。这些虚拟的、无法观测的变量称作因子。(每个因子被认为可解释多个观测变量间共有的方差,因此准确说,它们应该称作公共因子。)

模型的形式为:

其中Xi是第i个可观测变量(i=1...k),Fj是公共因子(j=1...p),并且p<k。Ui是Xi变量独有的部分(无法被公共因子解释)。ai可认为是每个因子对复合而成的可观测变量的贡献值。我们以Harman74.cor数据集为例,它包含了24个心理测验间的相互关系,受试对象为145个七年级或八年级的学生。我们认为每个个体在24个心理学测验上的观测得分,是根据四个潜在心理学因素的加权能力值组合而成。

虽然PCA和EFA存在差异,但是它们的许多分析步骤都是相似的。为阐述EFA的分析过程,我们用它来对六个心理学测验间的相关性进行分析。112个人参与了六个测验,包括非语言的普通测验(general)、画图测验(picture)、积木图案测验(blocks)、迷津测验(maze)、阅读测验(reading)和词汇测验(vocab)。我们如何用一组较少的、潜在的心理学因素来解释参与者的测验得分呢?

数据集ability.cov提供了变量的协方差矩阵,我们可用cov2cor()函数将其转化为相关系数矩阵。数据集没有缺失值。

> options(digits = 2)

> covariances <- ability.cov$cov

> correlations <- cov2cor(covariances)

> correlations

general picture blocks maze reading vocab

general 1.00 0.47 0.55 0.34 0.58 0.51

picture 0.47 1.00 0.57 0.19 0.26 0.24

blocks 0.55 0.57 1.00 0.45 0.35 0.36

maze 0.34 0.19 0.45 1.00 0.18 0.22

reading 0.58 0.26 0.35 0.18 1.00 0.79

vocab 0.51 0.24 0.36 0.22 0.79 1.00

因为要寻求用来解释数据的潜在结构,可使用EFA方法。与使用PCA相同,下一步工作为判断需要提取几个因子

判断需提取的公共因子数

可用fa.parallel()函数可判断需提取的因子数:

> covariances <- ability.cov$cov

> correlations <- cov2cor(covariances)

> fa.parallel(correlations, n.obs = 112, fa="both", n.iter = 100,main = "Scree plots with parallel analysis")

判断

上图是判断心理学测验需要保留的因子数。图中展示了PCA和EFA的结果。PCA结果建议提取一个或者两个成分,EFA建议提取两个因子

图形中有几个值得注意的地方。如果使用PCA方法,我们可能会选择一个成分(碎石检验和平行检验)或者两个成分(特征值大于1)。当摇摆不定时,高估因子数通常比低估因子数的结果好,因为高估因子数一般较少曲解“真实”情况。

观察EFA的结果,显然需提取两个因子。碎石检验的前两个特征值(三角形)都在拐角处之上,并且大于基于100次模拟数据矩阵额特征值的均值。对于EFA,Kaiser-Harris准则的特征值数大于0,而不是1.图形中该准则也建议选择两个因子。

提取公共因子

现在我们决定提取两个因子,可以使用fa()函数获得相应的结果。fa()函数的格式如下:

fa(r, nfactors=,n.obs=,rotate=,scores=,fm=)

其中:

  • r是相关系数矩阵或者原始数据矩阵;

  • nfactors设定提取的因子数(默认为1);

  • n.obs是观测数(输入相关系数矩阵时需要填写);

  • rotate设定旋转的方法(默认互变异系数最小法);

  • scores设定是否计算因子得分(默认不计算);

  • fm设定因子化方法(默认极小残差法)

与PCA不同,提取公共因子的方法很多,包括极大似然法(ml)、主迭代法(pa)、加权最小二乘法(wls)、广义加权最小二乘法(gls)和最小残差法(minres)。统计学家青睐使用最大似然法,因为它有良好的统计性质。不过有时候最大似然法不会收敛,此时使用主迭代法效果会很好。下面的代码,将使用主迭代法(fm="pa")提取未旋转的因子。

> fa <- fa(correlations,nfactors = 2,rotate = "none", fm="pa")

> fa

Factor Analysis using method = pa

Call: fa(r = correlations, nfactors = 2, rotate = "none", fm = "pa")

Standardized loadings (pattern matrix) based upon correlation matrix

PA1 PA2 h2 u2 com

general 0.75 0.07 0.57 0.432 1.0

picture 0.52 0.32 0.38 0.623 1.7

blocks 0.75 0.52 0.83 0.166 1.8

maze 0.39 0.22 0.20 0.798 1.6

reading 0.81 -0.51 0.91 0.089 1.7

vocab 0.73 -0.39 0.69 0.313 1.5

PA1 PA2

SS loadings 2.75 0.83

Proportion Var 0.46 0.14

Cumulative Var 0.46 0.60

Proportion Explained 0.77 0.23

Cumulative Proportion 0.77 1.00

Mean item complexity = 1.5

Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are 15 and the objective function was 2.5

The degrees of freedom for the model are 4 and the objective function was 0.07

The root mean square of the residuals (RMSR) is 0.03

The df corrected root mean square of the residuals is 0.06

Fit based upon off diagonal values = 0.99

Measures of factor score adequacy

PA1 PA2

Correlation of scores with factors 0.96 0.92

Multiple R square of scores with factors 0.93 0.84

Minimum correlation of possible factor scores 0.86 0.68

可以看到,两个因子解释了六个心理学测验60%的方差。不过因子载荷阵的意义并不太好解释,此时使用因子旋转有助于因子的解释。

因子旋转

我们可以使用正交旋转或者斜交旋转来旋转两个因子的结果。首先使用正交旋转

> fa.varimax <- fa(correlations,nfactors = 2,rotate = "varimax", fm="pa")

> fa.varimax

Factor Analysis using method = pa

Call: fa(r = correlations, nfactors = 2, rotate = "varimax", fm = "pa")

Standardized loadings (pattern matrix) based upon correlation matrix

PA1 PA2 h2 u2 com

general 0.49 0.57 0.57 0.432 2.0

picture 0.16 0.59 0.38 0.623 1.1

blocks 0.18 0.89 0.83 0.166 1.1

maze 0.13 0.43 0.20 0.798 1.2

reading 0.93 0.20 0.91 0.089 1.1

vocab 0.80 0.23 0.69 0.313 1.2

PA1 PA2

SS loadings 1.83 1.75

Proportion Var 0.30 0.29

Cumulative Var 0.30 0.60

Proportion Explained 0.51 0.49

Cumulative Proportion 0.51 1.00

Mean item complexity = 1.3

Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are 15 and the objective function was 2.5

The degrees of freedom for the model are 4 and the objective function was 0.07

The root mean square of the residuals (RMSR) is 0.03

The df corrected root mean square of the residuals is 0.06

Fit based upon off diagonal values = 0.99

Measures of factor score adequacy

PA1 PA2

Correlation of scores with factors 0.96 0.92

Multiple R square of scores with factors 0.91 0.85

Minimum correlation of possible factor scores 0.82 0.71

结果显示因子变得更好解释了。阅读和词汇在第一因子上载荷较大,画图、积木图案和迷宫在第二因子上载荷较大,非语言的普通智力测量在两个因子上载荷较为平均,这表明存在一个语言智力因子和一个非语言智力因子。

使用正交旋转将人为地强制两个因子不相关。如果想允许两个因子相关该如何呢?这时可用斜交旋转法,代码如下:

> fa.promax <- fa(correlations,nfactors = 2,rotate = "promax", fm="pa")

Loading required namespace: GPArotation

Warning message:

In fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, :

A loading greater than abs(1) was detected. Examine the loadings carefully.

> fa.promax

Factor Analysis using method = pa

Call: fa(r = correlations, nfactors = 2, rotate = "promax", fm = "pa")

Warning: A Heywood case was detected.

Standardized loadings (pattern matrix) based upon correlation matrix

PA1 PA2 h2 u2 com

general 0.37 0.48 0.57 0.432 1.9

picture -0.03 0.63 0.38 0.623 1.0

blocks -0.10 0.97 0.83 0.166 1.0

maze 0.00 0.45 0.20 0.798 1.0

reading 1.00 -0.09 0.91 0.089 1.0

vocab 0.84 -0.01 0.69 0.313 1.0

PA1 PA2

SS loadings 1.83 1.75

Proportion Var 0.30 0.29

Cumulative Var 0.30 0.60

Proportion Explained 0.51 0.49

Cumulative Proportion 0.51 1.00

With factor correlations of

PA1 PA2

PA1 1.00 0.55

PA2 0.55 1.00

Mean item complexity = 1.2

Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are 15 and the objective function was 2.5

The degrees of freedom for the model are 4 and the objective function was 0.07

The root mean square of the residuals (RMSR) is 0.03

The df corrected root mean square of the residuals is 0.06

Fit based upon off diagonal values = 0.99

Measures of factor score adequacy

PA1 PA2

Correlation of scores with factors 0.97 0.94

Multiple R square of scores with factors 0.93 0.88

Minimum correlation of possible factor scores 0.86 0.77

根据以上结果,我们可以看出正交旋转和斜交旋转的不同之处。对于正交旋转,因子分析的重点在于因子结构矩阵(变量与因子的相关系数),而对于斜交旋转,因子分析会考虑三个矩阵:因子结构矩阵、因子模式矩阵和因子关联矩阵。

因子模式矩阵即标准化的回归系数矩阵。它列出了因子预测变量的权重。因子关联矩阵即因子相关系数矩阵。

上面代码中,PA1和PA2栏中的值组成了因子模式矩阵。它们是标准化的回归系数,而不是相关系数。注意,矩阵的列仍用来对因子进行命名。

因子关联矩阵显示两个因子的相关系数为0.55,相关性很大。如果因子间的关联性很低,我们可能需要重新使用正交旋转来简化问题。

因子结构矩阵(或称因子载荷矩阵)没有被列出来,但我们可以使用公式F=P*Phi很轻松地得到它,其中F是因子载荷阵,P是因子模式矩阵,Phi是因子关联矩阵。下面的函数即可进行该乘法运算:

> fsm <- function(oblique){

+ if(class(oblique)[2]=="fa" & is.null(oblique$Phi)){

+ warning("Object dosen't look like oblique EFA")

+ } else {

+ P <- unclass(oblique$loading)

+ F <- P %*% oblique$Phi

+ colnames(F) <- c("PA1","PA2")

+ return (F)

+ }

+ }

> fsm(fa.promax)

PA1 PA2

general 0.64 0.69

picture 0.32 0.61

blocks 0.43 0.91

maze 0.25 0.45

reading 0.95 0.46

vocab 0.83 0.45

现在我们可以看到变量与因子间的相关系数。将它们与正交旋转所得因子载荷阵相比,我们会发现该载荷阵列的噪音比较大,这是因为之前我们允许潜在因子相关。虽然斜交旋转方法更为复杂,但模型更符合真实数据。

使用factor.plot()或fa.diagram()函数,我们可以绘制正交或斜交结果的图形,以下代码绘制了斜交结果的图形:

> factor.plot(fa.promax,labels = row.names(fa.promax$loadings))

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

>fa.diagram(fa.promax,simple=FALSE)

若使simple=TRUE,那么将仅显示每个因子下最大的载荷,以及因子间的相关系数。这类图形在有多个因子时十分实用。

当处理真实生活中的数据时,我们不可能只对这么少的变量进行因子分析。这里只是为了方便。如果我们像检测自己的能力,可以尝试Harman74.cor中的24个心理学测验进行因子分析,代码如下:

>library(psych)

>fa,24tests <- fa(Harman74.cor$cov, nfactors=4.rotate="promax")

因子得分

相比PCA,EFA并不那么关注计算因子得分。在fa()函数中添加score=TRUE选项便可轻松获得因子得分。另外还可以得到得分析系数(标准化的回归权重),它在返回对象的weights元素中。

对于ability.cov数据集,通过二因子斜交旋转法便可获得用来计算因子得分的权重:

> fa.promax$weights

PA1 PA2

general 0.078 0.211

picture 0.020 0.090

blocks 0.037 0.702

maze 0.027 0.035

reading 0.743 0.030

vocab 0.177 0.036

与可精确计算的主成分得分不同,因子得分只是估计得到的。它的估计方法有很多种,fa()函数使用的是回归方法。

相关推荐

方差分析简介(方差分析通俗理解)

介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

Python数据可视化:箱线图多种库画法

概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

方差分析 in R语言 and Excel(方差分析r语言例题)

今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

matplotlib 必知的 15 个图(matplotlib各种图)

施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

R ggplot2常用图表绘制指南(ggplot2绘制折线图)

ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

Python数据可视化:从Pandas基础到Seaborn高级应用

数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

Python 数据可视化常用命令备忘录

本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

统计图的种类(统计图的种类及特点图片)

统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

通过AI提示词让Deepseek快速生成各种类型的图表制作

在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

数据可视化:解析箱线图(box plot)

箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

[seaborn] seaborn学习笔记1-箱形图Boxplot

1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...