1. 程式人生 > >R語言-主成分分析

R語言-主成分分析

方法 var warning 參數 使用 with pro null 圖形

1.PCA

使用場景:主成分分析是一種數據降維,可以將大量的相關變量轉換成一組很少的不相關的變量,這些無關變量稱為主成分

  步驟:

  1. 數據預處理(保證數據中沒有缺失值)
  2. 選擇因子模型(判斷是PCA還是EFA)
  3. 判斷要選擇的主成分/因子數目
  4. 選擇主成分
  5. 旋轉主成分
  6. 解釋結果
  7. 計算主成分或因子的得分

  案例:從USJudgeRatings數據集中有11個變量,如何去減化數據(單個主成分分析)

    1.使用碎石圖確定需要提取的主成分個數

1 library(psych)
2 # 1.做出碎石圖確定主成分的個數
3 fa.parallel(USJudgeRatings[,-1],fa=pc
,n.iter = 100,show.legend = F,main = Scree plot with parallel analysis)

技術分享圖片

  結論:在特征值大於1的的點附近,都表明保留1個主成分即可

  2.提取主成分

1 # 1.第一個參數是關系矩陣
2 # 2.nfactors指定主成分的個數
3 # 3.rotate指定旋轉方法,默認varimax
4 # 4.scores表示是否需要計算主成分得分,默認不需要
5 pc <- principal(USJudgeRatings[,-1],nfactors = 1)
6 pc

技術分享圖片

  結論:第一主成分與每一個變量高度相關

  3.獲取主成分得分

1 pc <- principal(USJudgeRatings[,-1],nfactors = 1,scores = T)
2 head(pc$scores)
3 cor(USJudgeRatings$CONT,pc$scores)

技術分享圖片

  4.獲取相關系數

1 cor(USJudgeRatings$CONT,pc$scores)

技術分享圖片

  結論:律師和法官的私交和律師的評級沒有關系

  案例2:減少女孩身體指標的主成分分析(多個主成分分析)

  1.判斷個數

1 fa.parallel(Harman23.cor$cov,n.obs = 203,fa=pc
,n.iter = 100,show.legend = F, 2 main = Scree plot with parallel analysis)

技術分享圖片

  結論:有2個點在水平線1上,所以需要2個主成分

  2.主成分分析

pc2 <- principal(Harman23.cor$cov,nfactors = 2,rotate = none)
pc2

  技術分享圖片

  結論:需要對數據旋轉作進一步分析

  3.主成分旋轉(盡可能對成分去噪)

1 rc <- principal(Harman23.cor$cov,nfactors = 2,rotate = varimax)
2 rc

技術分享圖片

  4.獲取主成分的得分系數

1 round(unclass(rc$weights),2)

  技術分享圖片

  結論:可以通過系數*數值來計算出主成分得分

2.EFA

使用場景:探索因子分析發掘數據下一組較少的,無法觀測的變量來解釋一組可觀測變量的相關性

  案例:使用EFA對6個心理學測試來檢測參與者的得分

  1.判斷需要提取的因子數

1 covariances <- ability.cov$cov
2 correlations <- cov2cor(covariances)
3 fa.parallel(correlations,n.obs = 112,fa=both,n.iter=100,main = Scree plots with parallel analysis)

技術分享圖片

  結論:需要提取2個因子,因為圖形在拐點之上有2個分布

  2.提取公共因子

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

技術分享圖片

  結論:2個因子解釋了6個心理學測試的60%方差,需要進一步旋轉

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

技術分享圖片

  結論:閱讀和詞匯在第一個因子占比較大,畫圖,積木在第二個因子上成分較大,如果想進一步判斷這個各因子是否相關,需要使用斜交旋轉提取因子

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

技術分享圖片

  結論:相關性為0.57,相關性很大,如果相關性不大,使用正交旋轉即可

  3.計算得分

 1 fsm <- function(oblique) {
 2   if (class(oblique)[2]=="fa" & is.null(oblique$Phi)) {
 3     warning("Object doesn‘t look like oblique EFA")
 4   } else {
 5     P <- unclass(oblique$loading)
 6     F <- P %*% oblique$Phi
 7     colnames(F) <- c("PA1", "PA2")
 8     return(F)
 9   }
10 }
11 
12 fsm(fa.promax)

技術分享圖片

  5.正交旋轉所得因子得分圖

技術分享圖片

  結論:詞匯和閱讀在第一因子上載荷較大,圖片,迷宮,積木在第二個因子上載荷較大,普通智力檢測在二者的分布較為平均

  6.斜交旋轉所生成的因子圖

1 fa.diagram(fa.promax,simple = F)

技術分享圖片

  結論:顯示了因子之間的關系,該圖比上一張圖更為準確

   

    

R語言-主成分分析