You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Promax旋转时R中fa()与factanal()的因子载荷差异原因

为什么base R的factanal()与psych包的fa()在ML+Promax旋转下因子载荷存在差异?

我尝试使用base R中的factanal()函数和psych包中的fa()函数,对响应量表一致的问卷数据进行因子分析。两者均设置为*极大似然(Maximum likelihood)*方法并使用Promax旋转,但得到的因子载荷结果却不相同。以下是可复现示例:

# 加载所需分析包
library(psych) 
library(GPArotation)

# 加载mtcars数据集
data(mtcars) 

# 分别用两个函数执行因子分析
factanal_result <- factanal(mtcars, factors=3, rotation="promax") 
fa_result <- fa(mtcars, nfactors = 3, fm="ml", rotate="promax")

# 输出factanal的载荷结果(取前6行,保留2位小数)
head(round(factanal_result$loadings, 2))

输出结果:

Factor1 Factor2 Factor3
mpg     0.54    0.16   -0.43
cyl    -0.53   -0.58    0.08
disp   -0.65   -0.32    0.19
hp     -0.11   -0.48    0.47
drat    0.83    0.12    0.10
wt     -0.71    0.18    0.54
# 输出fa的载荷结果(取前6行,保留2位小数)
head(round(fa_result$loadings, 2))

输出结果:

ML2   ML1   ML3
mpg   0.52  0.17 -0.43
cyl  -0.51 -0.59  0.08
disp -0.63 -0.33  0.19
hp   -0.09 -0.49  0.48
drat  0.83  0.13  0.10
wt   -0.70  0.16  0.54

按照R文档建议设置oblique.Scores=TRUE后,因子载荷结果并未改变:

fa2_result <- fa(mtcars, nfactors = 3, fm="ml", rotate="promax", oblique.scores=T, scores="tenBerge")
head(round(fa2_result$loadings, 2))

输出结果:

ML2   ML1   ML3
mpg   0.52  0.17 -0.43
cyl  -0.51 -0.59  0.08
disp -0.63 -0.33  0.19
hp   -0.09 -0.49  0.48
drat  0.83  0.13  0.10
wt   -0.70  0.16  0.54

此前相关讨论中提到的“结果一致”结论并不准确,该结论仅在使用varimax旋转时成立。


内容的提问来源于stack exchange,提问作者BPeif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:07:42