天天看點

14--因子分析

因子分析

探索性因子分析(EFA)是一系列用來發現一組變量的潛在結構的方法。它通過尋找一組更小的、潛在的或隐藏的結構來解釋已觀測到的、顯式的變量間的關系。例如,Harman74.cor包含了24個心理測驗間的互相關系,受試對象為145個七年級或八年級的學生。假使應用EFA來探索該資料,結果表明276個測驗間的互相關系可用四個學生能力的潛在因子(語言能力、反應速度、推理能力和記憶能力)來進行解釋。

1 探索性因子分析

EFA的目标是通過發掘隐藏在資料下的一組較少的、更為基本的無法觀測的變量,來解釋一

組可觀測變量的相關性。這些虛拟的、無法觀測的變量稱作因子。(每個因子被認為可解釋多個觀測變量間共有的方差,是以準确來說,它們應該稱作公共因子。)

雖然PCA和EFA存在差異,但是它們的許多分析步驟都是相似的。為闡述EFA的分析過程,

我們用它來對六個心理學測驗間的相關性進行分析。112個人參與了六個測驗,包括非語言的普通智力測驗(general)、畫圖測驗(picture)、積木圖案測驗(blocks)、迷宮測驗(maze)、閱讀測驗(reading)和詞彙測驗(vocab)。我們如何用一組較少的、潛在的心理學因素來解釋參與者的測驗得分呢?

資料集ability.cov提供了變量的協方差矩陣,你可用cov2cor()函數将其轉化為相關系數矩陣。

options(digits=2)     #設定小數點後保留兩位小數

covariances <- ability.cov$cov     #擷取協方差矩陣

correlations <- cov2cor(covariances)      #将協方差矩陣轉化為相關系數矩陣

correlations

14--因子分析

與使用PCA相同,下一步工作為判斷需要提取幾個因子。

1.1 判斷需提取的公共因子數

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

library(psych)

covariances <- ability.cov$cov

correlations <- cov2cor(covariances)

fa.parallel(correlations, n.obs=112, fa="both", n.iter=100,

              main="Scree plots with parallel analysis")

#n.obs=0意味着是一個資料矩陣/資料框。否則,用多少個案例來尋找相關性。fa="both",因子圖形将會同時展示主成分和公共因子分析的結果。n.iter是要進行的模拟分析的數量

14--因子分析

結果分析:圖中同時展示了PCA和EFA的結果。PCA結果建議提取一個或者兩個成分,EFA建議提取兩個因子。如果使用PCA方法,你可能會選擇一個成分(碎石檢驗和平行分析)或者兩個成分(特征值大于1)。當搖擺不定時,高估因子數通常比低估因子數的結果好,因為高估因子數一般較少曲解“真實”情況。觀察EFA的結果,顯然需提取兩個因子。碎石檢驗的前兩個特征值(三角形)都在拐角處之上,并且大于基于100次模拟資料矩陣的特征值均值。

1.2 提取公共因子

現在你決定提取兩個因子,可以使用fa()函數獲得相應的結果。fa()函數的格式如下:

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

其中:

q r是相關系數矩陣或者原始資料矩陣;

q nfactors設定提取的因子數(預設為1);

q n.obs是觀測數(輸入相關系數矩陣時需要填寫);

q rotate設定旋轉的方法(預設互變異數最小法);

q scores設定是否計算因子得分(預設不計算);

q fm設定因子化方法(預設極小殘差法)。

與PCA不同,提取公共因子的方法很多,包括最大似然法(ml)、主軸疊代法(pa)、權重最小二乘法(wls)、廣義權重最小二乘法(gls)和最小殘差法(minres)。統計學家青睐使用最大似然法,因為它有良好的統計性質。不過有時候最大似然法不會收斂,此時使用主軸疊代法效果會很好。

本例使用主軸疊代法(fm="pa")提取未旋轉的因子。代碼如下:

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

fa

14--因子分析

結果分析:可以看到,兩個因子解釋了六個心理學測驗60%的方差。不過因子載荷陣的意義并不太好解釋,此時使用因子旋轉将有助于因子的解釋。

1.3 因子旋轉

你可以使用正交旋轉或者斜交旋轉來旋轉上節中兩個因子的結果:

(1)用正交旋轉提取因子

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

fa.varimax

14--因子分析

結果分析:結果顯示因子變得更好解釋了。閱讀reading和詞彙vocab在第一因子上載荷較大,畫圖picture、積木圖案blocks和迷宮maze在第二因子上載荷較大,非語言的普通智力測量在兩個因子上載荷較為平均,這表明存在一個語言智力因子和一個非語言智力因子。h2欄指成分公因子方差,即主成分對每個變量的方差解釋度。u2欄指成分唯一性,即方差無法被主成分解釋的比例(1–h2)

(2)用斜交旋轉提取因子

使用正交旋轉将人為地強制兩個因子不相關。如果想允許兩個因子相關該怎麼辦呢?此時可以使用斜交轉軸法,比如promax。

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

錯誤:Loading required namespace: GPArotationFailed with error:  ‘there is no package called ‘GPArotation’’Error in kaiser(loadings, rotate = "Promax", ...) :

解決方法:

install.packages("GPArotation")

library(GPArotation)

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

fa.promax

結果分析:根據以上結果,你可以看出正交旋轉和斜交旋轉的不同之處。對于正交旋轉,因子分析的重點在于因子結構矩陣(變量與因子的相關系數),而對于斜交旋轉,因子分析會考慮三個矩陣:因子結構矩陣、因子模式矩陣和因子關聯矩陣。

因子模式矩陣即标準化的回歸系數矩陣。它列出了因子預測變量的權重。因子關聯矩陣即因子相關系數矩陣。

在結果中,PA1和PA2欄中的值組成了因子模式矩陣。它們是标準化的回歸系數,而不是相關系數。注意,矩陣的列仍用來對因子進行命名(雖然此處存在一些争論)。你同樣可

以得到一個語言因子和一個非語言因子。

因子關聯矩陣顯示兩個因子的相關系數為0.57,相關性很大。如果因子間的關聯性很低,你可能需要重新使用正交旋轉來簡化問題。

因子結構矩陣(或稱因子載荷陣)沒有被列出來,但你可以使用公式F = P*Phi很輕松地得

到它,其中F是因子載荷陣,P為因子模式矩陣,Phi為因子關聯矩陣。下面的函數即可進行該乘法運算:

fsm <- function(oblique) {

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

    warning("Object doesn't look like oblique EFA")

  } else {

    P <- unclass(oblique$loading)

    F <- P %*% oblique$Phi

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

    return(F)

  }

}

對上面的例子使用該函數,可得:

fsm(fa.promax)

14--因子分析

結果分析:現在你可以看到變量與因子間的相關系數。将它們與正交旋轉所得因子載荷陣相比,你會發現該載荷陣列的噪音比較大,這是因為之前你允許潛在因子相關。雖然斜交方法更為複雜,但模型将更符合真實資料。

使用factor.plot()或fa.diagram()函數,你可以繪制正交或者斜交結果的圖形。來看以下代碼:

factor.plot(fa.promax, labels=rownames(fa.promax$loadings))

14--因子分析

結果分析:資料集ability.cov中心理學測驗的兩因子圖形。詞彙和閱讀在第一個因子(PA1)上載荷較大,而積木圖案、畫圖和迷宮在第二個因子(PA2)上載荷較大。普通智力測驗在兩個因子上較為平均。

生成關聯圖形,可視化效果會更加明顯,代碼如下:

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

#若使simple = TRUE,那麼将僅顯示每個因子下最大的載荷,以及因子間的相關系數。

結果分析:這張圖檔能清楚的看到它們之間的相關系數,這類圖形在有多個因子時十分實用。

1.4 因子得分

相比PCA,EFA并不那麼關注計算因子得分。在fa()函數中添加score = TRUE選項(原始資料可得時)便可很輕松地獲得因子得分。另外還可以得到得分系數(标準化的回歸權重),它在傳回對象的weights元素中。

對于ability.cov資料集,通過二因子斜交旋轉法便可獲得用來計算因子得分的權重:

fa.promax$weights

14--因子分析

總結:主成分分析(PCA)和探索性因子分析(EFA)兩種方法。PCA在資料降維方面非常有用,它能用一組較少的不相關變量來替代大量相關變量,進而簡化分析過程。EFA包含很多方法,可用來發現一組可觀測變量背後潛在的或無法觀測的結構(因子)。

作者:zhang-X​,轉載請注明原文連結