1. 程式人生 > >第七篇:數據預處理(四) - 數據歸約(PCA/EFA為例)

第七篇:數據預處理(四) - 數據歸約(PCA/EFA為例)

通過 mage 如果 解釋 最大似然法 能力 似然 模擬 ont

前言

這部分也許是數據預處理最為關鍵的一個階段。

如何對數據降維是一個很有挑戰,很有深度的話題,很多理論書本均有詳細深入的講解分析。

本文僅介紹主成分分析法(PCA)和探索性因子分析法(EFA),並給出具體的實現步驟。

主成分分析法 - PCA

主成分分析(principal components analysis, PCA)是一種分析、簡化數據集的技術。

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

PCA基本步驟

第一步:載入所需包和測試集數據:

技術分享

測試數據集內容大致如下:

技術分享

第二步:確定主成分的個數:

技術分享

在該函數中,fa是指定分析類型為主成分,n.iter是指平行分析中模擬測試的叠代次數為100次。結果如下:

技術分享

其中,藍線為測試數據集中不同主成分對應的特征值折線圖;紅線為平行分析中模擬測試矩陣的不同主成分對應的特征值折線圖。

可采用以下幾個思路來確定主成分的具體個數:

1. 保留特征值大於1的主成分個數
2. 根據圖形彎曲的情況,選取圖形變化最大處之上的特征值對應的主成分


3. 特征值大於模擬矩陣的平均特征值的主成分保留

根據這幾個經驗法則,可確定主成分的個數為1。

當然,有一個更簡單的確定方法 -- 在你調用fa.parallel函數之後,系統shell端會告訴你建議的主成分個數:

技術分享

第三步:提取主成分

技術分享

其中,nfactors是指定提取的主成分的個數。

執行完畢後shell端打印如下信息:

技術分享

這些信息中,最重要的是載荷矩陣,也就是上方列為h2,u2的那個矩陣。

我們只看PC1那一列(h2 u2先不去管它),當然如果你指定的主成分個數是2,那麽就會有PC2,以此類推。而行代表的則是每個特征。矩陣的值,也即載荷矩陣的值是數據集協方差矩陣對應的特征向量,也即這個主成分在該特征中所占的比重。如果你了解後面要講的因子分析,那麽也許會對這個表述產生疑惑 - 這不和因子一模一樣嗎?

--- 答曰確實是的。主成分法本來就是選擇因子的一種方法。事實上很多時候你也可以從載荷矩陣裏觀察得出主成分的現實意義。如果對主成分分析的結果不滿意,可以嘗試進行各種旋轉以調整各個主成分所占的比重,具體請查閱principal函數的rotate參數。

第四步:獲取主成分得分

技術分享

得到結果如下:

技術分享

接下來就可以使用該主成分數據集了。

探索性因子分析法 - EFA

EFA的目標是通過發掘隱藏在數據下的一組較少的,更為基本的無法觀測的變量,來解釋一組可觀測變量的相關性。這些虛擬的,無法觀測的變量稱作因子。(每個因子被認為可解釋多個觀測變量間共有的方差,也叫作公共因子)

模型的形式為:

Xi=a1F1+a2F2+……apFp+Ui

- Xi是第i個可觀測變量(i=1,2,……k);
- Fj是公共因子(j=1,2,……p),並且p<k。

EFA基本步驟

第一步:載入所需包和測試集數據:

技術分享

第二步:確定因子個數

技術分享

這次分析的輸入是數據集的相關矩陣(當然你也可以像PCA中講的那樣使用原始數據集);n.obs是觀測的樣本數,這個參數只有在輸入為協方差矩陣的時候需要;n.iter是指平行分析中模擬測試的叠代次數為100次,結果如下:

技術分享

該圖的具體含義參考PCA部分講解,根據同樣方法選擇因子個數為2。

第三步:提取因子

技術分享

函數中,nfactors為因子個數;fm為提取因子的各種方法,有最大似然法(ml),主軸叠代法(pa),加權最小二乘法(wls),廣義加權最小二乘法(gls)和最小殘差法(minres)等等,本文不細細分析此部分,請自行參閱相關文檔。

執行完畢後shell端打印如下信息:

技術分享

這些信息中,最重要的是載荷矩陣,也就是上方列有h2,u2等的那個矩陣。

我們只看PA1和PA2這兩列(h2 u2先不去管它),當然如果你指定的因子個數是3,那麽就會有PA3,以此類推。而行代表的則是每個特征。矩陣的值,也即載荷矩陣的值是這個因子在該特征中所占的比重。

如果對因子分析的結果不滿意,可以嘗試進行各種旋轉以調整各因子所占的比重,具體請查閱fa函數的rotate參數。

第四步:分析特征間的潛在關系:

技術分享

該函數會圖形化的顯示載荷矩陣:

技術分享

圖中的散點表示各個特征,而橫縱軸則表示各個特征中的兩個因子的占比重。

還可以用下面這個函數,更為直觀形象:

技術分享

結果顯示如下:

技術分享

圖中展示了各個因子在各個特征中的占比。此圖可以很好地分析出因子的具體意義。

第五步:提取各個樣本的因子得分

技術分享

註意傳遞的數據必須是原數據集,如果傳遞進的是其協方差矩陣,那麽這個得分值就沒什麽意義。

小結

R語言的確方便的給出了很多算法的實現。然而,如果想要詳細具體的知道如何調整參數,就必須要多去理解算法的思想,機制。

這種能力是需要通過不斷地學習算法,慢慢積累的。

第七篇:數據預處理(四) - 數據歸約(PCA/EFA為例)