Learn R | 數據降維之因子分析(下)

在上文中,我們已經掌握了因子分析的相關理論和公共因子的提取,本文將在此基礎上繼續進行因子分析的學習。

一、因子旋轉

因子分析的數學目的不僅僅要找出公共因子以及對變數進行分組,更重要是弄清楚每個公共因子的含義,以便進行進一步的分析。如果每個公共因子的含義不清,則不便於進行實際背景的解釋。

由於因子載荷陣是不惟一的,所以應該對因子載荷陣進行旋轉。目的是使因子載荷陣的結構簡化,使載荷矩陣每列或行的元素平方值向0和1兩極分化。因子旋轉法包括正交旋轉法和斜交旋轉法,主要的正交旋轉法有方差最大法和四次方最大法。

在本案例中,我們選擇正交旋轉法:

> fa_model_varimax <- fa(cor_data,nfactors = 4,rotate = "varimax",fm="pa")> fa_model_varimaxFactor Analysis using method = paCall: fa(r = cor_data, nfactors = 4, rotate = "varimax", fm = "pa")Standardized loadings (pattern matrix) based upon correlation matrix PA1 PA2 PA3 PA4 h2 u2 comx1 0.14 0.72 0.09 -0.10 0.55 0.446 1.1x2 0.43 0.16 0.29 0.12 0.31 0.687 2.3x3 0.07 0.13 0.00 0.70 0.51 0.490 1.1x4 0.23 0.24 0.84 -0.08 0.82 0.179 1.3x5 0.91 -0.09 0.16 -0.07 0.88 0.124 1.1x6 0.83 0.12 0.27 0.02 0.79 0.215 1.3x7 0.24 -0.22 0.77 -0.01 0.70 0.298 1.4x8 0.90 0.23 0.08 -0.07 0.88 0.119 1.2x9 0.09 0.79 -0.04 0.19 0.66 0.335 1.2x10 0.76 0.37 0.18 -0.05 0.75 0.255 1.6x11 0.90 0.18 0.10 -0.06 0.86 0.137 1.1x12 0.79 0.27 0.34 0.15 0.84 0.157 1.7x13 0.73 0.35 0.43 0.25 0.91 0.092 2.4x14 0.42 0.38 0.53 -0.59 0.96 0.044 3.6x15 0.37 0.78 0.07 0.09 0.76 0.243 1.5 PA1 PA2 PA3 PA4SS loadings 5.54 2.48 2.15 1.01Proportion Var 0.37 0.17 0.14 0.07Cumulative Var 0.37 0.53 0.68 0.75

經過旋轉後的因子將更容易解釋:從上表中可以看到,x2、x5、x6、x8、x10、x11、x12和x13在第一個因子上載荷較大,我們可以將第一因子定義為「外在的表現能力」,以此類推,之後的三個因子分別為「經驗」,「內在個人品質」「專業能力」

使用正交旋轉將人為地強制兩個因子不相關。如果允許兩個因子相關,可以使用斜交轉軸法(rotate="promax"等)。

接著對因子旋轉結果進行可視化展示:

> factor.plot(fa_model_varimax)

> fa.diagram(fa_model_varimax,simple = FALSE)# simple = TRUE:僅顯示每個因子下最大的載荷,以及因子間的相關係數

二、因子得分

相對於PCA而言,EFA並不十分關注因子得分,但如果有需要,我們可以在fa()函數中添加"scores = TRUE"來查看。

# 使用原始數據矩陣> fa_model_varimax <- fa(r=data,nfactors = 4,n.obs=112,rotate = "varimax",fm="pa",scores = TRUE)> head(fa_model_varimax$scores,3) PA1 PA2 PA3 PA4[1,] 0.8670869 0.1633729 -0.8274610 -1.1805959[2,] 1.1090694 0.4967151 0.1017375 -0.5522802[3,] 0.8147714 0.3225853 -0.2866191 -1.2117764

另外,因子模型中的weights部分為原始變數在各因子上的得分係數,即標準化的回歸權重。

> options(digits = 2)> head(fa_model_varimax$weights,3) PA1 PA2 PA3 PA4x1 -0.012 0.149 -0.076 0.113x2 -0.074 0.028 0.067 -0.060x3 -0.030 0.087 0.045 0.076

根據得分係數,我們可以寫出4個因子與原始變數之間的線性表達式:

PA1 = -0.012x1 - 0.074x2 - 0.030x3 + ...PA2 = 0.149x1 + 0.028x2 + 0.087x3 + ...PA3 = -0.076x1 + 0.067x2 + 0.045x3 + ...PA4 = 0.113x1 - 0.060x2 + 0.076x3 + ...

三、總結

這樣,一個完整的因子分析模型構建完畢。但是,在實際應用中,因子分析並不是我們對數據進行分析的最終目的,它充其量使得我們對原始數據集有了更為深入的理解與把握,特別是在數據的結構方面。接下來,我們需要以實際目的為導向,進行進一步的統計分析:

  • 因子分析:尋找變數之間的潛在結構,或用於內在結構的證實。

  • 因子分析+聚類分析:利用因子分析結果進行樣本的聚類

  • 因子分析+多元回歸分析:利用因子分析解決多重共線性問題,構建尋找變數間因果關係的多元回歸模型。
  • 因子分析+......

最後,用一張流程圖總結數據降維的具體分析過程(圖片來源:R語言實戰(第2版) (豆瓣))

附參考書目與學習文檔:

  1. 多元統計分析 (豆瓣)

  2. R語言實戰(第2版) (豆瓣)
  3. 因子分析和主成分分析的10大不同

推薦閱讀:

用數據分析的思路找數據分析的工作
Learn R | 數據預處理中的缺失值(上)

TAG:R编程语言 | 统计学 | 数据分析 |