如何用R語言進行探索性因子分析(EFA)

2021-03-02 心理統計與測量

探索性因子分析(EFA)是一系列用來發現一組變量的潛在結構的方法。它通過尋找一組更小的、潛在的或隱藏的結構來解釋已觀測到的、顯式的變量間的關係。

導入數據

大家一般在進行探索性因子分析時都會使用SPSS,今天教大家如何在R語言中實現EFA。

打開R studio,將數據導入R中

點擊import Dataset,選擇From SPSS。因為本次分析的數據是以SPSS的sav格式保存的,所以這裡選擇從SPSS中導入。

在彈出的對話框中點擊Browse選取數據文件,在左下角可以對導入R之後的數據文件進行重命名,最後點擊import導入。

可以看到數據中包含13個變量,240條數據,第一行為變量名。

計算相關係數

載入psych包,然後計算相關係數矩陣,因為下面會用到。

library(psych)
correlations <- cor(efa)

判斷需提取的公共因子數

fa.parallel(correlations, n.obs = 240, fa = "both", n.iter = 100, main = "平行分析碎石圖")

Parallel analysis suggests that the number of factors =  3  and the number of components =  3

這裡的fa.parallel( )是psych包中的因子分析函數,能生成含平行分析的碎石圖。

下面簡要介紹以下平行分析(Parallel Analysis)

依據與初始矩陣相同大小的隨機數據矩陣來判斷要提取的特徵值。若基於真實數據的某個特徵值大於一組隨機數據矩陣相應的平均特徵值,那麼該主成分可以保留。這種方法稱作平行分析。

correlations:相關係數矩陣;

n.obs:樣本量;

fa = "both":表示同時展示主成分和公共因子分析的結果。如果只需要主成分,即fa = "pc",只需要公共因子分析,即fa = "fa";

n.iter:模擬分析的次數(Number of simulated analyses to perform);

main:標題命名。

運行代碼後,系統告訴我們平行分析建議因子數為3,成分數為3。我們需要根據平行分析的碎石圖來看為什麼是3個。

碎石圖中,實線表示真實數據,虛線表示模擬數據。

主成分分析(PC)即x線,真實數據中3個成分高於模擬數據;同樣,因子分析(FA)即三角形線,真實數據中也有3個因子高於100次模擬數據矩陣的特徵值均值。

所以,根據碎石圖,我們可能選擇3個成分。

提取公共因子

現在我們決定提取3個因子,使用fa( )函數獲得結果。

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

r:相關係數矩陣;

nfactors:設定提取的因子數,默認為1;

n.obs:樣本量;

rotate:旋轉方法,默認為變異數最小法;

scores:設定是否計算因子得分,默認不計算;

fm:設定因子化方法,包含最大似然法(ml),主軸迭代法(pa),加權最小二乘法(wls),廣義加權最小二乘法(gls)以及默認的極小殘差法(minres)。

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

fa
Factor Analysis using method =  pa
Call: fa(r = correlations, nfactors = 3, rotate = "none", fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
   PA1   PA2   PA3   h2   u2 com    
A1 0.52  0.45  0.01 0.47 0.53 2.0    
A2 0.61  0.54 -0.17 0.70 0.30 2.1    
A3 0.64  0.58 -0.09 0.75 0.25 2.0
A4 0.66  0.46 -0.11 0.66 0.34 1.8
A5 0.72  0.53 -0.11 0.81 0.19 1.9
B1 0.32  0.16  0.57 0.45 0.55 1.7
B2 0.35  0.07  0.54 0.42 0.58 1.8
B3 0.29 -0.02  0.57 0.42 0.58 1.5
C1 0.75 -0.41 -0.08 0.74 0.26 1.6
C2 0.76 -0.40 -0.04 0.75 0.25 1.5
C3 0.77 -0.51 -0.10 0.86 0.14 1.8
C4 0.74 -0.49 -0.10 0.80 0.20 1.8
C5 0.71 -0.44  0.03 0.70 0.30 1.7
                      PA1  PA2  PA3
SS loadings           5.09 2.37 1.04
Proportion Var        0.39 0.18 0.08
Cumulative Var        0.39 0.57 0.65
Proportion Explained  0.60 0.28 0.12
Cumulative Proportion 0.60 0.88 1.00
Mean item complexity =  1.8
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are  78  and the objective function was  8.96
The degrees of freedom for the model are 42  and the objective function was  0.41
The root mean square of the residuals (RMSR) is  0.02
The df corrected root mean square of the residuals is  0.03
Fit based upon off diagonal values = 1
Measures of factor score adequacy            
                                                  PA1  PA2  PA3
Correlation of (regression) scores with factors   0.98 0.95 0.81
Multiple R square of scores with factors          0.95 0.91 0.66
Minimum correlation of possible factor scores     0.91 0.81 0.32

可以看到3個因子解釋了整個數據集100%的方差。

因子旋轉

我們可以使用正交旋轉或斜交旋轉來旋轉上面的結果。正交旋轉將人為地強制3個因子不相關,斜交旋轉允許3個因子相關。

用正交旋轉提取因子

fa.varimax <- fa(correlations, nfactors = 3, rotate = "varimax", fm = "pa")
fa.varimax
Factor Analysis using method =  pa
Call: fa(r = correlations, nfactors = 3, rotate = "varimax", fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
   PA1  PA2  PA3   h2   u2 com
A1 0.08 0.65 0.18 0.47 0.53 1.2
A2 0.12 0.83 0.04 0.70 0.30 1.0
A3 0.10 0.85 0.13 0.75 0.25 1.1
A4 0.20 0.78 0.11 0.66 0.34 1.2
A5 0.19 0.87 0.13 0.81 0.19 1.1
B1 0.04 0.18 0.64 0.45 0.55 1.2
B2 0.12 0.14 0.62 0.42 0.58 1.2
B3 0.14 0.03 0.63 0.42 0.58 1.1
C1 0.83 0.18 0.09 0.74 0.26 1.1
C2 0.83 0.18 0.14 0.75 0.25 1.2
C3 0.92 0.13 0.08 0.86 0.14 1.1
C4 0.88 0.12 0.07 0.80 0.20 1.0
C5 0.81 0.10 0.19 0.70 0.30 1.1
                      PA1  PA2  PA3
SS loadings           3.80 3.35 1.35
Proportion Var        0.29 0.26 0.10
Cumulative Var        0.29 0.55 0.65
Proportion Explained  0.45 0.39 0.16
Cumulative Proportion 0.45 0.84 1.00
Mean item complexity =  1.1
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are  78  and the objective function was  8.96
The degrees of freedom for the model are 42  and the objective function was  0.41
The root mean square of the residuals (RMSR) is  0.02
The df corrected root mean square of the residuals is  0.03
Fit based upon off diagonal values = 1
Measures of factor score adequacy            
                                                  PA1  PA2  PA3
Correlation of (regression) scores with factors   0.97 0.95 0.82
Multiple R square of scores with factors          0.94 0.91 0.67
Minimum correlation of possible factor scores     0.87 0.82 0.34

結果顯示因子變得更好解釋了,A1-A5在第二個因子上載荷較大,B1-B3在第三個因子上載荷較大,C1-C5在第一個因子上載荷較大。

2. 用斜交旋轉提取因子

fa.promax <- fa(correlations, nfactors = 3, rotate = "promax", fm = "pa")
fa.promax
Factor Analysis using method =  pa
Call: fa(r = correlations, nfactors = 3, rotate = "promax", fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
    PA1   PA2   PA3   h2   u2 com
A1 -0.04  0.66  0.09 0.47 0.53 1.0
A2 -0.01  0.87 -0.09 0.70 0.30 1.0
A3 -0.04  0.88  0.01 0.75 0.25 1.0
A4  0.08  0.79 -0.02 0.66 0.34 1.0
A5  0.05  0.88  0.00 0.81 0.19 1.0
B1 -0.08  0.08  0.66 0.45 0.55 1.1
B2  0.02  0.03  0.63 0.42 0.58 1.0
B3  0.06 -0.10  0.65 0.42 0.58 1.1
C1  0.85  0.05 -0.02 0.74 0.26 1.0
C2  0.84  0.05  0.03 0.75 0.25 1.0
C3  0.94 -0.01 -0.04 0.86 0.14 1.0
C4  0.91 -0.01 -0.05 0.80 0.20 1.0
C5  0.82 -0.04  0.09 0.70 0.30 1.0
                      PA1  PA2  PA3
SS loadings           3.84 3.38 1.28
Proportion Var        0.30 0.26 0.10
Cumulative Var        0.30 0.56 0.65
Proportion Explained  0.45 0.40 0.15
Cumulative Proportion 0.45 0.85 1.00
With factor correlations of
    PA1  PA2  PA3
PA1 1.00 0.33 0.30
PA2 0.33 1.00 0.34
PA3 0.30 0.34 1.00
Mean item complexity =  1
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are  78  and the objective function was  8.96
The degrees of freedom for the model are 42  and the objective function was  0.41
The root mean square of the residuals (RMSR) is  0.02
The df corrected root mean square of the residuals is  0.03
Fit based upon off diagonal values = 1
Measures of factor score adequacy            
                                                  PA1  PA2  PA3
Correlation of (regression) scores with factors   0.97 0.96 0.84
Multiple R square of scores with factors          0.95 0.93 0.71
Minimum correlation of possible factor scores     0.90 0.85 0.42

繪製斜交旋轉後結果圖形

使用factor.plot( )和fa.digram( )函數繪製探索性因子分析的結果圖形。

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

為了方便理解,我們先繪製一個只包含2個因子的圖形。在圖1中可以形象地看出PA1包含了C1-C5的點,PA2包含了A1-A5的點,B1-B3被兩個因子排除在外。現在再看圖2就容易理解了許多,圖2是包含本次分析的3個因子的完整圖形。

圖1

圖2

fa.diagram(fa.promax, digits = 3)

參考文獻:

Kabacoff, R. I. (2015). R in action :data analysis and graphics with r. Pearson Schweiz Ag, 1-474.

相關焦點

  • 探索性因子分析(EFA)與驗證性因子分析(CFA)--應用篇
    因子分析是基於相關關係對眾多數據進行降維(即簡化)的數據處理方法,目的在於挖掘出眾多數據後的某種結構。因子分析可分為:探索性因子分析和驗證性因子分析。探索性因子分析的英文縮寫為EFA(exploratory factor analysis),驗證性因子分析的英文縮寫為CFA(confirmatory factor analysis)。
  • 比較探索性因子分析(EFA)與驗證性因子分析(CFA)的--理論篇
    初始問卷的這些題項並不是一定能夠與設計的潛在變量對應(沒有結構效度),因此可以通過探索性因子分析進行題項的篩選,看看當初設計時應該歸於一個因子的題項(聚集在一起表示這些題項相關,可以被同一個潛在變量解釋)是否落在同一個因子中,如果沒有,那麼就需要對相應的題項進行刪除或修改處理。
  • R語言實戰(14)——主成分分析和因子分析
    應用EFA來探索該數據,276個測驗間的相互關係可用4個學生能力的潛在因子(語言能力、反應速度、推理能力和記憶能力)來進行解釋。圖14-1 主成分分析和因子分析模型圖中展示了可觀測變量(X1到X5)、主成分 (PC1、PC2)、因子(F1、F2)和誤差(e1到e5)主成分(PC1和PC2)是觀測變量(X1到X5)的線性組合。
  • 基於R語言的主成分和因子分析
    主成分分析主成分分析,是一種降維的分析方法,其考察多個變量間相關性的一種多元統計方法,研究如何通過少數幾個主成分來揭示多個變量間的內部結構
  • 驗證性因子分析與探索性因子分析的區別 | 附:量表編制步驟
    最近有老師問驗證性因子分析和探索性因子分析的區別,是不是在做量表的時候需要做驗證性因子分析?那麼是在什麼時候做?很明顯,編制量表的時候一定是需要做驗證性因子分析的。1.在進行探索性因子分析的時候,量表條目最終能形成幾個條目是未知的。
  • 」探索因子分析EFA到底是個啥?「
    ,那我們如何找出所有影響或者支配所有變量的公共因子呢?(」因子分析分為驗證性因子分析(CFA)和探索性因子分析(EFA),本文講的是因子分析皆為EFA「)2.1 兩類檢驗(KMO & Bartlett)當我們的變量不獨立或不相關的時候,其實就不存在上述慄子中的問題了,那我們也不可能找到影響所有變量的公共因子因此,在做因子分析前我們需要進行KMO
  • 如何使用Pandas-Profiling進行探索性數據分析
    我們可以通過執行探索性數據分析(EDA)來實現這一點。這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?Pandas-profiling是一個開源Python庫,它只需一行代碼即可為任何機器學習數據集生成漂亮的交互式報告。
  • R語言實現常用的5種分析方法(主成分+因子+多維標度+判別+聚類
    主成分分析經常用減少數據集的維數,同時保持數據集的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是在處理觀測數目小於變量數目時無法發揮作用,例如基因數據。 R語言中進行主成分分析可以採用基本的princomp函數,將結果輸入到summary和plot函數中可分別得到分析結果和碎石圖。
  • 探索性因素分析與驗證性因素分析的差異
    其先驗假設是每個因子都與一個具體的指示變量子集對應,並且至少要求預先假設模型中因子的數目,但有時也預期哪些變量依賴哪個因子。在進行探索性因子分析之前,不必知道要用幾個因子,以及各因子和觀測變量之間的關係。在進行探索性因子分析時,由於沒有先驗理論,只能通過因子載荷憑知覺推斷數據的因子結構。
  • 【數據分析】R語言實現常用的5種數據分析(主成分+因子+多維標度+判別+聚類)
    它把原始數據變換到一個新的坐標系統中,使得任何數據投影的第一大方差在第一個坐標(稱為第一主成分)上,第二大方差在第二個坐標(第二主成分)上,依次類推。主成分分析經常用減少數據集的維數,同時保持數據集的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是在處理觀測數目小於變量數目時無法發揮作用,例如基因數據。
  • R 語言之數據分析高級方法「主成分分析」和「因子分析」
    本節主要總結「數據分析」的「主成分分析」和「因子分析」的思想。通過學習《 R 語言實戰 》關於這兩種方法的解釋,我們很容易理解這兩種方法其存在的意義。——降維。主成分分析與因子分析的不同主成分分析 ( PCA ) 是指,用一組較少的不相關變量代替大量相關變量,同時儘可能保留初始變量的信息。值得注意的是,主成分是初始變量的線性組合。因子分析 ( EFA ) 是指, 通過發掘隱藏在數據下的一組較少的、更為基本的無法觀測的變量,來解釋一組可觀測變量的相關性。
  • 如何隨機分半數據進行EFA+CFA
    本文的重點在於如何隨機分半數據,不會涉及具體因子分析的內容,使用到的軟體是R。之前已推出過在R中進行探索性因子分析(EFA)以及驗證性因子分析(CFA)的文章。相關連結在此:如何用R語言進行探索性因子分析(EFA)在R中用Lavaan包做驗證性因子分析在進行因子分析之前,可能需要對收集到的樣本進行分割,比較常見的一種做法便是對半分。即一半的數據進行EFA,另一半進行CFA。
  • spss因子分析教程
    上面的數據是我們為了測量消費者的生活方式或者價值觀什麼的,選擇了24個語句,讓消費者進行評估,同意還是不同意,像我還是不像,贊成還是不贊成等等,用1-9打分;    因子分析有探索性因子分析和證實性因子分析之分
  • R語言實現常用的5種分析方法(主成分+因子+多維標度+判別+聚類)
    主成分分析經常用減少數據集的維數,同時保持數據集的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是在處理觀測數目小於變量數目時無法發揮作用,例如基因數據。R語言中進行主成分分析可以採用基本的princomp函數,將結果輸入到summary和plot函數中可分別得到分析結果和碎石圖。但psych擴展包更具靈活性。
  • 主成分法因子分析的R語言實現
    主成分分析和因子分析有很多相同之處,在統計方法上又有本質的區別。主成分法是因子分析參數估計的方法之一,本文利用principal()函數對主成分法因子分析進行分步計算,作為因子分析內容的導入。本文例題取自於高惠璇《多元統計分析》,鹽泉又稱食鹽泉,是指含鹽分較多的礦泉。
  • SPSS有話說:如何得出問卷或量表的結構或維度——探索性因素分析
    探索性因素分析是依據樣本數據,根據變量間相關性的大小對變量進行分組,每組內的變量之間存在較高相關性,意味著這些變量背後有共同的制約因素,用這些公共因子來代替原始的眾多變量的過程。簡單來說,就是探索問卷的結構或維度。探索性因素分析也是在心理測驗編制過程中用來檢驗測驗結構效度的一種非常重要和有效的分析方法,通過檢驗變量(因子)與題項的對應關係。
  • 乾貨 | 調查問卷的SPSS因子分析案例
    上面的數據是我們為了測量消費者的生活方式或者價值觀什麼的,選擇了24個語句,讓消費者進行評估,同意還是不同意,像我還是不像,贊成還是不贊成等等,用1-9打分;因子分析有探索性因子分析和證實性因子分析之分,這裡我們主要討論探索性因子分析!證實性因子分析主要採用SEM結構方程式來解決。
  • 帶你和Python與R一起玩轉數據科學: 探索性數據分析(附代碼)
    本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析。內容簡介本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。本文先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析(Exploratory Data Analysis,EDA)。探索性數據分析發生在數據收集和數據清理之後,而在數據建模和分析結果可視化展現之前。然而,這是一個可反覆的過程。做完某種EDA後,我們可以嘗試建立一些數據模型或者生成一些可視化結果。同時,根據最新的分析結果我們又可以進行進一步的EDA,等等。
  • 驗證性因子分析思路總結
    Step2:分析思路在實際研究中,驗證性因子分析常會與結構方程模型、路徑分析等方法聯繫到一起,對於不熟悉概念的研究人員容易搞混這些方法,下表對這幾種方法進行簡單說明:探索性因子分析:驗證因子與分析項的對應關係,檢驗量表效度,非經典量表通常用探索性因子分析
  • 探索性分析
    作者:夏雨驕陽  封面:吉江SPSS中,探索分析是對變量進行深入和詳盡的描述性統計分析,它在一般描述性統計指標的基礎上,增加關於數據其他特徵的文字與圖形描述,分析結果更加細緻與全面,有助於對數據做進一步分析。