R 如何从factanal创建因素?

R 如何从factanal创建因素?,r,statistics,R,Statistics,使用factanal进行因子分析时,通常的结果是一些载荷表加上一些其他信息。是否有一种直接的方法可以使用这些载荷来创建系数矩阵/数据框架?例如,在以后的回归分析中使用它们 编辑:其目的是获取用于后续建模的变量。我只知道因子得分——但欢迎对其他术语提出建议/建议:) EDIT2:Joris Mey的答案基本上就是我想要的。尽管它使我的问题朝着一个更适合statsoverflow的方向发展,但我现在将把它保留在这里,因为正确的人群是讨论解决方案的人: 基于回归的分数有什么好处?产物(ML)的结果与各

使用factanal进行因子分析时,通常的结果是一些载荷表加上一些其他信息。是否有一种直接的方法可以使用这些载荷来创建系数矩阵/数据框架?例如,在以后的回归分析中使用它们

编辑:其目的是获取用于后续建模的变量。我只知道因子得分——但欢迎对其他术语提出建议/建议:)

EDIT2:Joris Mey的答案基本上就是我想要的。尽管它使我的问题朝着一个更适合statsoverflow的方向发展,但我现在将把它保留在这里,因为正确的人群是讨论解决方案的人:

基于回归的分数有什么好处?产物(ML)的结果与各因素高度相关。。。老实说,我想知道为什么我的情况会有这么大的差异

 fa$scores # the correct solution
 fac <- m1 %*% loadings(fa) # the answer on your question
 diag(cor(fac,fa$scores))
 #returns:
Factor1   Factor2   Factor3 
0.8309343 0.8272019 0.8070837 
fa$scores#正确的解决方案

fac我没有手动检查,但这里有一种方法:

fa <-  factanal(mydf,3,rotation="varimax",scores="regression")
fa$scores

fa您是否不需要
加载
组件

loadings(fa)

请参见
?装载
?事实分析
,以检查它是否是您想要的装载。我发现使用的术语有时会令人困惑,比如加载、分数等等,你问过如何使用加载来构建分数。您的解决方案是,尽管正确,但不这样做。它使用回归方法(或者你也可以使用Bartlett方法),这使用了分数不相关的限制,以0为中心,方差=1。因此,这些因子与使用F=ML和F作为因子矩阵,M为原始矩阵,L为荷载矩阵得到的因子不同

以下是帮助文件中示例的演示:

v1 <- c(1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,4,5,6)
v2 <- c(1,2,1,1,1,1,2,1,2,1,3,4,3,3,3,4,6,5)
v3 <- c(3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,5,4,6)
v4 <- c(3,3,4,3,3,1,1,2,1,1,1,1,2,1,1,5,6,4)
v5 <- c(1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,6,4,5)
v6 <- c(1,1,1,2,1,3,3,3,4,3,1,1,1,2,1,6,5,4)
m1 <- cbind(v1,v2,v3,v4,v5,v6)

fa <- factanal(m1, factors=3,scores="regression")

fa$scores # the correct solution

fac <- m1 %*% loadings(fa) # the answer on your question

一个类似的问题也被提了出来

在这里,我提供了一个函数,以防您想要为新数据生成因子分数


我编写了以下函数,该函数接受
factanal
返回的fit对象和您提供的新数据(例如,具有相同变量名的数据框或矩阵)

它会产生以下结果:

> score_new_data(fit, data[1:5, ])
         Factor1    Factor2
61623  1.5022427  0.5457393
61629 -0.6817812 -0.9755466
61634 -0.2901822  0.1051234
61640  0.5429929 -0.4955180
61661 -1.0732722  0.8202019

事实上,这是令人困惑的。但是你的建议相当于fa$加载,它喜欢与因子的“相关性”。我想要的是一个基于每次观察的因子。我的意思是
mydf%*%fa)
是我认为你想要的。。。我知道乔里斯在他的回答中提出了这样的建议。对不起,加文——有时候我只是需要一些额外的帮助。我一眼就明白你的意思了。谢谢Joris和你的评论这很清楚,这是我问题的答案:)使用promax轮换违反了不相关分数的假设。虽然解释似乎更容易,但数据的结构已经发生了深刻的变化。使用非正交旋转必须非常非常小心。Thx!非常有价值的投入。我只是把它弄混了,我只是在尝试,口译并没有变得更好。我只是检查了我的口译是否可靠,然后贴错了行。是的,这就是我要求的。标准化是回归产生的这些分数的唯一好处吗?计算ML矩阵提供了高度相关的变量(请参见编辑我的问题)。@ran2:不,这些分数背后有更多的数学知识,factanal的帮助文件中很少解释这一点。在本文中可以找到更详细的概述:+1,以说明我需要在factanal中使用scores参数。谢谢,@jorisher是十字架上为你准备的
> round(cor(fac),2)
        Factor1 Factor2 Factor3
Factor1    1.00    0.79    0.81
Factor2    0.79    1.00    0.82
Factor3    0.81    0.82    1.00

> round(cor(fac2),2)
        Factor1 Factor2 Factor3
Factor1       1       0       0
Factor2       0       1       0
Factor3       0       0       1
score_new_data <- function(fit, data) {
    z <- as.matrix(scale(data[,row.names(fit$correlation)]))
    z %*% solve(fit$correlation, fit$loadings)
}
bfi <- na.omit(bfi)
variables <- c("A1", "A2", "A3", "A4", "C1", "C2", "C3", "C4")
data <- bfi[,variables]
fit <- factanal(data, factors = 2, scores = "regression", rotation = "varimax")
score_new_data(fit, data[1:5, ])
> score_new_data(fit, data[1:5, ])
         Factor1    Factor2
61623  1.5022427  0.5457393
61629 -0.6817812 -0.9755466
61634 -0.2901822  0.1051234
61640  0.5429929 -0.4955180
61661 -1.0732722  0.8202019