用探索性因子分析解释R和SPSS之间的差异


14

我是计算机科学的研究生。我一直在为一个研究项目做一些探索性因素分析。我的同事(领导项目的人)使用SPSS,而我更喜欢使用R。这没关系,直到我们发现两个统计数据包之间存在重大差异。

我们使用主轴因子分解作为提取方法(请注意,我很清楚PCA和因子分析之间的区别,并且至少没有故意地没有使用PCA)。根据我的阅读,根据R文档,这应该对应于R中的“主轴”方法,以及SPSS中的“主轴分解”或“未加权最小二乘” 。我们使用一种倾斜旋转方法(特别是promax),因为我们期望相关因子,并且正在解释模式矩阵

在R和SPSS中运行两个过程,存在主要差异。模式矩阵给出不同的负载。尽管这给变量关系带来了几乎相同的因素,但是在相应的载荷之间存在多达0.15的差异,这似乎比仅采用不同的提取方法和promax旋转实现的预期要大。但是,这并不是最惊人的差异。

由这些因素解释的累积方差在SPSS结果中约为40%,在R结果中约为31%。这是一个巨大的差异,这导致我的同事希望使用SPSS而不是R。我对此没有问题,但是相差很大,使我认为我们可能错误地解释了某些内容,这是一个问题。

当我们进行非加权最小二乘分解时,SPSS更加令人困惑,报告了不同类型的解释方差。初始特征值解释的方差的比例为40%,而平方负荷提取和(SSL)的解释方差的比例为33%。这使我认为初始特征值不是要查看的适当数字(我怀疑这是旋转之前解释的方差,尽管它太大了,超出了我的范围)。更令人困惑的是,SPSS还显示了旋转SSL,但没有计算出解释方差的百分比(SPSS告诉我,具有相关因子意味着我无法添加SSL来找到总方差,这与我所见的数学很有意义)。来自R的报告的SSL与这些都不匹配,R告诉我它描述了总方差的31%。R的SSL与轮换SSL最接近。来自原始相关矩阵的R的特征值确实与来自SPSS的初始特征值匹配。

另外,请注意,我一直在使用不同的方法,并且SPSS的ULS和PAF似乎最接近R的PA方法。

我的具体问题:

  1. 在使用因子分析实现的R和SPSS之间,我期望有多少差异?
  2. 我应该解释SPSS的哪些平方荷载总和,初始特征值,提取或旋转?
  3. 还有其他我可能会忽略的问题吗?

我对SPSS和R的呼叫如下:

SPSS:

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT INITIAL KMO AIC EXTRACTION ROTATION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION PROMAX(4).

R:

library(psych)
fa.results <- fa(data, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

因为我不使用R而无法检查它,但是我怀疑文档中有内容失效。fm =“ pa”应该对应于/ EXTRACTION PAF。另外,尝试在任何旋转之前比较解决方案,因为旋转算法的温和差异可能会与提取方法的差异混合在一起。
ttnphns 2012年

1
谢谢参观!我将尝试在轮换之前比较解决方案。我应该提到,我已经尝试了/ EXTRACTION ULS和/ EXTRACTION PAF,并且加载的差异很小(但都没有真正接近R“ pa”方法)。我在上面显示/ EXTRACTION ULS的原因是因为这是提供各种SSL的命令。
奥利弗(Oliver)

1
主轴法和非加权最小二乘法有时可以得出相似的结果,但是它们在算法上根本不同。我认为R和SPSS之间的等价如下:“ pa” = PAF,“ minres” = ULS,“ gls” = GLS,“ ml” = ML
ttnphns 2012年

1
另外,检查缺失值的处理。在SPSS代码中,将它们成对删除。在您的R代码中-...?
ttnphns 2012年

我已经比较了R中的预旋转SSL,并且它们与SPSS的ULS解决方案中的Extraction SSLs相匹配(不幸的是,SPSS中的PAF解决方案没有提供这些值)。我认为promax轮换似乎是罪魁祸首。好吧,这就是SPSS打印出旋转SSL的方式。也许R会对最终SSL解释的总方差进行估算,而SPSS告诉我没有这样的估算是合适的。
奥利弗(Oliver)

Answers:


21

首先,我第二次推荐ttnphns,以便在轮换之前先了解一下解决方案。在SPSS中实施的因素分析是一个复杂的过程,其中包含多个步骤,比较每个步骤的结果将有助于您查明问题。

具体来说,您可以运行

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT CORRELATION
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

看看SPSS正在使用相关矩阵进行因子分析。然后,在R中,通过运行以下命令自己准备相关矩阵

r <- cor(data)

在此阶段,显而易见的是缺少值的处理方式上的任何差异。一旦检查了相关矩阵是否相同,就可以将其输入fa函数并再次运行分析:

fa.results <- fa(r, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

如果在SPSS和R中仍然得到不同的结果,则问题不在于与值无关。

接下来,您可以比较因子分析/提取方法本身的结果。

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT EXTRACTION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

fa.results <- fa(r, nfactors=6, rotate="none", 
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

再次,比较因子矩阵/社区/平方加载的总和。在这里,您可以期待一些微小的差异,但肯定不会达到您所描述的程度。所有这些将使您对正在发生的事情有更清晰的了解。

现在,直接回答您的三个问题:

  1. 以我的经验,有时花一些时间弄清楚不同的术语并摆弄参数后,可能会获得非常相似的结果。我曾多次在SPSS和R中运行因子分析(通常在R中工作,然后在SPSS中重现分析以与同事共享),并且始终获得基本相同的结果。因此,我通常不会期望有很大的差异,这使我怀疑问题可能是特定于您的数据集的。但是,我确实快速尝试了您在我周围的数据集上提供的命令(这是李克特量表),实际上差异比我以前习惯的大,但没有您描述的那么大。(如果我有更多时间玩这个游戏,我可能会更新我的答案。)
  2. 在大多数情况下,人们将旋转后的平方负载总和解释为每个因素的“解释的方差比例”,但这在倾斜旋转后没有意义(这就是为什么在心理和SPSS报告中根本没有报告过这一点)在这种情况下的特征值–在输出中甚至还有一点脚注)。初始特征值是在任何因子提取之前计算的。显然,它们没有告诉您有关因素所解释的方差比例的任何信息,也不是真正的“平方负荷总和”(它们通常用于确定要保留的因素数量)。但是,SPSS“平方加载的求和”应与psych提供的“ SS加载”相匹配。
  3. 在这个阶段这是一个疯狂的猜测,但是您是否检查过因子提取过程是否在25次迭代中收敛?如果旋转未能收敛,SPSS将不会输出任何图案/结构矩阵,并且您不会错过它,但是如果提取未能收敛,则将显示最后一个因子矩阵,并且SPSS会幸福地继续旋转。但是,您会看到一个注释“ a。尝试提取6个因素。需要超过25次迭代。(收敛= XXX)。提取已终止。” 如果收敛值很小(例如.005,默认停止条件是“小于.0001”),它仍然不能解决您报告的差异,但如果确实很大,则您的数据有些病态。

2
很好的答案。我将建议(如果可能的话)作者提供一个样本相关矩阵以查看问题所在。捏造它/使其变得足够模糊以共享数据应该不太困难。同样,如果直接使用部分识别问题的相关矩阵开始无法重现问题。
安迪W

谢谢,这是一个了不起的答案。回到SPSS机器后,我将完成这些步骤。作为对#3的回应,该解决方案确实在9次迭代中收敛,但是在以后进行的任何分析中,我都会记住这一点。知道差异通常没有我描述的那么大(这对我很有帮助)(我也在处理李克特量表的5点数据)。
奥利弗(Oliver)2012年

如果其他人想知道,faR中的函数来自psych程序包。factanal基本程序包中的功能应具有相似的功能,但psych仍然值得用于其他目的。实际上,由于这是Likert数据,因此明智的做法是使用psych软件包的fa.poly:请参阅帮助文档
Nick Stauner 2014年

6

最近,我发现,当在每个程序中按缺失列表方式对待数据时,SPSS和R(带有Psych软件包)之间的大多数因子分析差异都得到了消除,相关矩阵在每个程序中的显示完全相同,并且不使用倾斜旋转。

碎裂图中显示的一系列值指示提取后的特征值,这是剩下的一个差异。在R的“ scree(cor(mydata))”中,这些“因素”与SPSS的“方差解释”表中“平方加载的总和”下列出的因素不匹配。请注意,R scree图的“组件”确实与SPSS的scree图匹配,这也与Variance Explained表的“初始特征值”匹配。

我还发现,在R中,每个因子解释的“比例变量”有时报告为(给定因子的比例)/(所有因子解释的量),而在其他时候则是(比例给定因子)(分析中的项目数)。因此,如果获得前者,它虽然不是匹配项,但至少与SPSS在“平方加载的提取总和...方差的%”中报告的内容成正比并派生。

但是,在每个程序中引入oblimin旋转会导致项目加载或因素的方差产生相当大的差异,这说明我无法解决。



0

我不知道是什么造成了模式加载差异,但我认为解释的差异百分比的差异是由于:-您可能是在解释SPSS解释的差异表的第一部分(2或3)吗?主成分分析的结果。第二部分显示了未旋转因子分析结果的结果,第三部分显示了旋转后的结果(如果使用)。-fa函数(或更确切地说是其打印方法)错误地计算了倾斜因素的SSL。要获得按因子解释的总方差的百分比,应按因子计算结构荷载平方的总和,然后将其除以变量数量。但是,您不能将它们加起来(在倾斜旋转的情况下)以得到由所有因素解释的方差百分比。为了得到这个


欢迎使用该网站@AlesZiberna。我们正在尝试以问题和解答的形式建立永久的统计信息存储库。因此,我们担心的一件事是linkrot。如果链接失效,您能否在链接上提供信息的概述,以便读者可以决定是否要继续阅读?
gung-恢复莫妮卡

0

这个答案是上述答案的补充。正如Gala在其回答中所建议的那样,应该首先确定R所提供的解决方案(例如,fa在心理上)和SPSS是否在轮换之前有所不同。如果它们相同,请查看每个程序中的旋转设置。(对于SPSS,您可以在参考手册中找到FACTOR的所有设置)。

寻找的一个重要设置是Kaiser规范化。默认情况下,SPSS在旋转过程中会进行Kaiser归一化,而某些 R函数(如“ fa”)则不会。您可以通过指定/ CRITERIA = NOKAISER / KAISER来控制SPSS中的设置,以验证它是否消除了每个程序的结果之间的差异。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.