統(tǒng)計學方法:主成分分析(PCA)實戰(zhàn)

本文重點討論對降維中常用的統(tǒng)計分析方法之一:主成分分析法。對影響31個城市綜合評價的8個指標,用主成分分析法確定8個指標的權重,并使用SPASS和Python兩種實戰(zhàn)方式進行操作。

前置統(tǒng)計與概論相關知識點

  • 協(xié)方差:衡量變量間相對于各自自身期望的變化趨勢的統(tǒng)計指標,比如變量X大于自身期望時變量Y也大于自身期望,此時變量XY的協(xié)方差為正值,反之則為負值。
  • 協(xié)方差矩陣:由協(xié)方差構成的矩陣稱之為協(xié)方差矩陣。
  • 相關系數(shù):用以反映變量之間相關關系密切程度的統(tǒng)計指標。相關系數(shù)也可以看成是一種剔除了兩個變量量綱影響、標準化后的特殊協(xié)方差,它消除了兩個變量變化幅度的影響,而只是單純反應兩個變量每單位變化時的相似程度。
  • 相關系數(shù)矩陣:由相關系數(shù)組成的矩陣稱之為相關系數(shù)矩陣。

理論:

基本原理

主成分分析(Principal components analysis)的思路主要是將原始多個變量通過線性組合的(矩陣旋轉(zhuǎn))方式轉(zhuǎn)化為幾個線無關的變量,且新生成的變量包含了原始變量的絕大部分信息,從而達到降維的目的。但因為新生成成分中所有原變量都占有一定比例,不同比例之間沒有一個統(tǒng)一衡量的標準,所以這種方式在解釋性方面相對較差。

實際使用的時候,如果變量間的數(shù)據(jù)波動量比較大,需要進行數(shù)據(jù)的歸一化處理。但在標準化的過程中會抹殺一部分原本刻畫變量之間離散程度差異的信息。所以標準化是視實際使用場景而定。

主成分篩選標準

  • 保留使得方差貢獻率達到80%以上的主成分
  • 保留方差(特征值)大于1的主成分的
  • 根據(jù)碎石圖選取變化比較大的前幾個主要成分

適用場景

主成分分析不要求數(shù)據(jù)呈正態(tài)分布,主要是使用了線性變換的技術,因為其應用范圍較廣,通過對原始變量進行綜合與簡化,可以客觀地確定各個指標的權重,避免主觀判斷的隨意性。但是從主成分的思路出發(fā),其主要適用于變量間相關性較強的數(shù)據(jù),如果原始數(shù)據(jù)相關性弱,則起不到很好的降維作用,且降維后存在一定的數(shù)據(jù)丟失。

分析的基本步驟

  • 選取初始變量
  • 根據(jù)初始變量特性選擇使用協(xié)方差矩陣還是相關矩陣來求主成分
  • 計算協(xié)方差矩陣或相關矩陣的特征值和特征向量
  • 確定主成分個數(shù)
  • 對主成分做經(jīng)濟解釋,主成分的經(jīng)濟意義由各線性組合中權重較大的幾個指標來確定

實戰(zhàn):

SPASS 實戰(zhàn)

數(shù)據(jù)準備:

從食品,衣著,居住,家庭設備,交通通訊,文教娛樂,醫(yī)療保健,其他8個指標對全國31個主要城市統(tǒng)計
注:數(shù)據(jù)不具實際含義,僅用于分析過程學習。

Spass操作:

  • Spass -> 分析 -> 降維 -> 因子分析
    注:基于相關系數(shù)進行矩陣變換。
  • 描述選項中勾選初始解,系數(shù),KMO和Bartlett形度檢驗。
  • 提取選項中選擇未旋轉(zhuǎn)的因子解,基于特征值,相關性矩陣。
  • 方法選項卡中選擇無,載荷圖。
  • 得分中選擇因子得分系數(shù)矩陣。

注Bartlett球形度檢驗:檢驗是否適合主成分析。其原假設是變量間兩兩相互獨立。KMO判斷適合主成分析的程度。

結果分析:

KMO和Bartlett檢驗表:

  • Bartlett形度檢驗:與0.05的置信水平進行比較,小于0.05認為維度之間是相關的,適合主成分分析。
  • KMO:取值在0到1之間,大于0.5認為是適合主成分分析。

總方差解釋表:

查看各個主成分的特征根,方差,方差占比。

成分得分系數(shù)矩陣:

主要查看各個維度在成分上的載荷

權重計算

  • 確定指標在各個主成分中的系數(shù),系數(shù)求解公式=成分載荷數(shù)/√成分特征根
  • 確定主成分的方差貢獻率:F = ∑Wi*Fi/∑Fj (W是主成分權重,F(xiàn)i的總方差中的占比,F(xiàn)j是成分方差占比之和)
  • 指標權重的歸一化:每個指標的系數(shù)/指標系數(shù)之和
    注:這部分可以借助Excel完成

指標計算

根據(jù)上一步的計算的權重計算主每個城市得分:
Indicator = ∑Di*Wi (D表示原始指標數(shù)值,W表示當前維度的權重)

結果可視化

SPASS方式結果

Python實戰(zhàn)

我們采用機器學習庫Scikit-learn進行PCA操作,基于協(xié)方差進行矩陣變換。

步驟一:數(shù)據(jù)準備

data_pca = pd.read_excel('data_pca.xlsx', 'consumption', index_col=0, na_values=['NA'])

步驟二:PCA操作

# 該步驟主要是 計算特征根,方差占比,成分系數(shù)
# n_components的其他取值:主成分占比(主成分累計方差占比),維度(指定下降之后的維度),‘mle’(會自動確定保留的特征數(shù))
pca = PCA(n_components='mle')
pca.fit(data_pca)
print('輸出特征根:')
print(pca.explained_variance_)

print('輸出解釋方差比:')
print(pca.explained_variance_ratio_) 
importance = pca.explained_variance_ratio_

plt.scatter(range(1,8),importance)
plt.plot(range(1,8),importance)
plt.title('碎石圖')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()

print('輸出主成分系數(shù)陣:默認列是指標,行是指標在成為上的系數(shù)')
# print(pca.components_)

print('輸出主成分個數(shù): {}'.format(pca.n_components_))
碎石圖

步驟三: 權重計算

# 由碎石圖和方差占比可知,前兩個主成分的方差變化比較大,且累計方差占比查過90%。所以我們選取前兩個成分。
explained_variance_need = pca.explained_variance_[0:2]
print(explained_variance_need)
component_need = pca.components_[:2,:]
print(component_need)

# 確定指標在各個主成分中的系數(shù),系數(shù)求解公式=成分載荷數(shù)/√成分特征根
component1 = component_need[0,:]/np.sqrt(explained_variance_need[0])
component2 = component_need[1,:]/np.sqrt(explained_variance_need[1])
components = np.vstack((component1.reshape(1,8),component2.reshape(1,8)))
# print(components)

# 確定主成分的方差貢獻率:F = ∑Wi*Fi/∑Fj (W是主成分權重,F(xiàn)i的總方差中的占比,F(xiàn)j是成分方差占比之和)
component1_ratio = pca.explained_variance_ratio_[0]
component2_ratio = pca.explained_variance_ratio_[1]
weights = []
for x in range(8):
    weight = (components[0][x]*component1_ratio + components[1][x]*component2_ratio)/(component1_ratio+component2_ratio)
    weights.append(weight)
print(weights)  

# 指標權重的歸一化:每個指標的系數(shù)/指標系數(shù)之和
# weights/np.sum(weights)

步驟四: 指標計算

data_pca['indicator'] = np.matrix(data_pca.values).dot(np.transpose(np.matrix(weights)))

步驟五: 結果可視化

show_pic('上海在全國消費指數(shù)中排名第一',data_pca['indicator'].sort_values(ascending = False),False)
Python方式結果

小結

從3.1和3.2結果中可以看到排名中有些城市在兩種方式上的結果略微有些差異,這個是SPASS和Scikit-learn實現(xiàn)上存在一定的差異,本文的重點在于討論主成分分析在兩種方式上的實現(xiàn)。

如果問題,歡迎回復交流。如有需要源數(shù)據(jù)的,可以回復獲取。

特別聲明,本文的數(shù)據(jù)來自于隨機制造,不構成任何效力,僅用于技術學習使用。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容