簡體   English   中英

如何從事實上創造因素?

[英]How to create factors from factanal?

當使用factalal執行因子分析時,通常的結果是一些加載表加上其他幾個信息。 有沒有直接的方法來使用這些加載來創建因子的矩陣/數據框架? 例如,稍后在回歸分析中使用它們。

編輯:這樣做的目的是獲取后續建模的變量。 我只知道因子分數 - 但歡迎提出/指出其他術語:)

EDIT2:Joris Meys的回答基本上就是我的要求。 盡管它將我的問題轉移到可能更適合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 

您詢問如何使用載荷來構建分數。 您的解決方案雖然正確,但卻沒有這樣做。 它使用回歸方法(或者也可以使用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

這些顯然是不同的價值觀。

編輯:這與Thomson回歸分數基於縮放變量的事實有關,並考慮相關矩陣。 如果你手動計算得分,你會做:

> fac2 <- scale(m1) %*% solve(cor(m1)) %*% loadings(fa)
> all.equal(fa$scores,as.matrix(fac2))
[1] TRUE

有關更多信息,請參閱此評論

並告訴你為什么它很重要:如果你以“天真”的方式計算分數,你的分數實際上是相關的。 這就是你想要擺脫的第一個地方:

> 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

我沒有手動檢查過,但是這樣做:

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

HTH別人。 建議,更正,改進歡迎!

你不想要loadings組件嗎?

loadings(fa)

請參閱?loadings?factanal以檢查它是否是您想要的裝載量。 我發現使用的術語有時令人困惑,加載,分數,......

有關Psych SE的問題也有類似的問題。

在那里,我提供了一個函數,以防你想為新數據生成因子分數。


我編寫了以下函數,該函數接受由您提供的factanal和new數據返回的fit對象(例如,具有相同變量名的數據框或矩陣)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM