R語言多元分析系列之一:主成分分析


主成分分析(principal components analysis, PCA) 是一種分析、簡化數據集的技術。它把原始數據變換到一個新的坐標系統中,使得任何數據投影的第一大方差在第一個坐標(稱為第一主成分)上,第二大方差在第二個坐標(第二主成分)上,依次類推。主成分分析經常用減少數據集的維數,同時保持數據集的對方差貢獻最大的特征。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是在處理觀測數目小於變量數目時無法發揮作用,例如基因數據。

R語言中進行主成分分析可以采用基本的princomp函數,將結果輸入到summary和plot函數中可分別得到分析結果和碎石圖。但psych擴展包更具靈活性。


1 選擇主成分個數
選擇主成分個數通常有如下幾種評判標准:
  • 根據經驗與理論進行選擇
  • 根據累積方差貢獻率 ,例如選擇使累積方差貢獻率達到80%的主成分個數。
  • 根據相關系數矩陣的特征值,選擇特征值大於1的主成分。
另一種較為先進的方法是 平行分析 (parallel analysis)。該方法首先生成若干組與原始數據結構相同的隨機矩陣,求出其特征值並進行平均,然后和真實數據的特征值進行比對,根據交叉點的位置來選擇主成分個數。我們選擇USJudgeRatings數據集舉例,首先加載psych包,然后使用fa.parallel函數繪制下圖,從圖中可見第一主成分位於紅線上方,第二主成分位於紅線下方,因此主成分數目選擇1。

fa.parallel(USJudgeRatings[,-1], fa="pc", n.iter=100, show.legend=FALSE)
2 提取主成分
pc=principal(USJudgeRatings[,-1],nfactors=1)
 
          
    PC1   h2     u2
1 0.92 0.84 0.1565
2 0.91 0.83 0.1663
3 0.97 0.94 0.0613
4 0.96 0.93 0.0720
5 0.96 0.92 0.0763
6 0.98 0.97 0.0299
7 0.98 0.95 0.0469
8 1.00 0.99 0.0091
9 0.99 0.98 0.0196
10 0.89 0.80 0.2013
11 0.99 0.97 0.0275

PC1
SS loadings 10.13
Proportion Var 0.92
從上面的結果觀察到,PC1即觀測變量與主成分之間的相關系數,h2是變量能被主成分解釋的比例,u2則是不能解釋的比例。主成分解釋了92%的總方差。注意此結果與princomp函數結果不同,princomp函數返回的是主成分的線性組合系數,而principal函數返回原始變量與主成分之間的相關系數,這樣就和因子分析的結果意義相一致。

3 旋轉主成分
旋轉是在保持累積方差貢獻率不變條件下,將主成分負荷進行變換,以方便解釋。成分旋轉這后各成分的方差貢獻率將重新分配,此時就不可再稱之為“主成分”而僅僅是“成分”。旋轉又可分為正交旋轉和斜交旋轉。正交旋轉的流行方法是方差最大化,需要在principal中增加rotate='varimax'參數加以實現。也有觀點認為主成分分析一般不需要進行旋轉。

4 計算主成分得分

主成分得分是各變量的線性組合,在計算出主成分得分之后,還可以將其進行回歸等做進一步分析處理。但注意如果輸入數據不是原始數據時,則無法計算主成分得分。我們需要在principal中增加score=T的參數設置,結果將存放在結果的score元素中。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM