【轉】R語言主成分分析(PCA)


https://www.cnblogs.com/jin-liang/p/9064020.html

數據的導入

> data=read.csv('F:/R語言工作空間/pca/data.csv') #數據的導入
>
> ls(data) #ls()函數列出所有變量
[1] "X" "不良貸款率" "存貸款比率" "存款增長率" "貸款增長率" "流動比率" "收入利潤率"
[8] "資本充足率" "資本利潤率" "資產利潤率"
> dim(data) # 維度
[1] 15 10

一.數據標准化

> std_data=scale(data[2:10])  #數據標准化
>
> rownames(std_data)=data[[1]]  #數組各行名字定義為數據文件的的第一列
>
> class(std_data)   #查看數據類型
[1] "matrix"
> df=as.data.frame(std_data)   #轉化為數據框
> class(df)
[1] "data.frame"

習慣數據框格式

數據標准化

> std_data=scale(data[2:10])  #數據標准化
>
> rownames(std_data)=data[[1]]  #數組各行名字定義為數據文件的的第一列
>
> class(std_data)   #查看數據類型
[1] "matrix"
> df=as.data.frame(std_data)   #轉化為數據框
> class(df)
[1] "data.frame"

二.主成分分析結果

> df.pr=princomp(df,cor=TRUE) #主成分分析
> summary(df.pr,loadings=TRUE)  #列出結果 包含特征向量<br>
Importance of components:
                       Comp.1 Comp.2 Comp.3 Comp.4  Comp.5  Comp.6 Comp.7   Comp.8   Comp.9
Standard deviation     1.8895 1.3087 1.2365 0.9593 0.86553 0.46727 0.4168 0.293547 0.201641
Proportion of Variance 0.3967 0.1903 0.1699 0.1023 0.08324 0.02426 0.0193 0.009574 0.004518
Cumulative Proportion  0.3967 0.5870 0.7569 0.8591 0.94235 0.96661 0.9859 0.995482 1.000000
 
Loadings:
           Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9
不良貸款率  0.425         0.188  0.288  0.423  0.173  0.695             
資本充足率 -0.359        -0.521         0.234  0.546  0.127 -0.214 -0.426
存貸款比率  0.301  0.532 -0.142        -0.370 -0.324  0.248 -0.320 -0.438
流動比率   -0.192  0.429 -0.416  0.439  0.306 -0.384 -0.113         0.399
資產利潤率 -0.392  0.332        -0.438 -0.178         0.452  0.494  0.238
資本利潤率 -0.413 -0.185  0.259 -0.103  0.428 -0.562  0.167        -0.436
收入利潤率 -0.299 -0.455 -0.116  0.299 -0.481 -0.159  0.432 -0.329  0.221
存款增長率 -0.243  0.249  0.387  0.636 -0.282  0.171         0.336 -0.309
貸款增長率 -0.300  0.342  0.518 -0.127  0.101  0.214        -0.620  0.260

  結果比較雜亂,接下來確定主成分個數

三.確定主因子個數

根據累計貢獻率大於90%,確定

計算相關系數矩陣

> cor(df)  #相關系數矩陣
           不良貸款率 資本充足率 存貸款比率 流動比率 資產利潤率 資本利潤率 收入利潤率 存款增長率
不良貸款率     1.0000   -0.57238    0.31761 -0.20055   -0.70121   -0.45662   -0.53825   -0.16790
資本充足率    -0.5724    1.00000   -0.33566  0.61749    0.51053    0.32931    0.37424    0.01208
存貸款比率     0.3176   -0.33566    1.00000  0.16576   -0.02387   -0.72464   -0.56974   -0.11599
流動比率      -0.2005    0.61749    0.16576  1.00000    0.31280    0.07588   -0.03629    0.27787
資產利潤率    -0.7012    0.51053   -0.02387  0.31280    1.00000    0.44019    0.13002    0.24387
資本利潤率    -0.4566    0.32931   -0.72464  0.07588    0.44019    1.00000    0.38484    0.26496
收入利潤率    -0.5383    0.37424   -0.56974 -0.03629    0.13002    0.38484    1.00000    0.24963
存款增長率    -0.1679    0.01208   -0.11599  0.27787    0.24387    0.26496    0.24963    1.00000
貸款增長率    -0.2863    0.03398   -0.14413  0.08791    0.59245    0.55095   -0.09947    0.60455
           貸款增長率
不良貸款率   -0.28628
資本充足率    0.03398
存貸款比率   -0.14413
流動比率      0.08791
資產利潤率    0.59245
資本利潤率    0.55095
收入利潤率   -0.09947
存款增長率    0.60455
貸款增長率    1.00000

  求特征值和特征向量

>y=eigen(cor(df)) #求出cor(df)的特征值和特征向量
> y$values#輸出特征值
[1] 3.57008 1.71263 1.52895 0.92033 0.74914 0.21834 0.17370 0.08617 0.04066

  輸出前五個累計貢獻率

> sum(y$values[1:5])/sum(y$values)   #求前5個主成分的累計方差貢獻率
[1] 0.9423

  輸出前5個主成分的載荷矩陣

> df.pr$loadings[,1:5]#輸出前5個主成分的載荷矩陣
            Comp.1   Comp.2   Comp.3   Comp.4  Comp.5
不良貸款率  0.4245  0.03196  0.18753  0.28824  0.4226
資本充足率 -0.3595  0.02955 -0.52091  0.04673  0.2341
存貸款比率  0.3013  0.53170 -0.14155 -0.09645 -0.3697
流動比率   -0.1923  0.42903 -0.41595  0.43880  0.3061
資產利潤率 -0.3916  0.33239 -0.04543 -0.43786 -0.1780
資本利潤率 -0.4134 -0.18527  0.25918 -0.10322  0.4280
收入利潤率 -0.2990 -0.45539 -0.11566  0.29949 -0.4810
存款增長率 -0.2432  0.24926  0.38706  0.63621 -0.2824
貸款增長率 -0.3000  0.34207  0.51768 -0.12671  0.1011

  畫出碎石圖

screeplot(df.pr,type='lines')  #畫出碎石圖

  

畫出散點圖

 

biplot(df.pr)     #畫出主成分散點圖

  

四.獲取相關系數矩陣的特征值和特征向量

> y=eigen(cor(df)) #求出cor(df)的特征值和特征向量
> y$values#輸出特征值
[1] 3.57008 1.71263 1.52895 0.92033 0.74914 0.21834 0.17370 0.08617 0.04066

五.計算主成分總得分

> s=df.pr$scores[,1:5]#輸出前5個主成分的得分
> #s[,1]
> #計算綜合得分
>
> scores=0.0
> for (i in 1:5)
   scores=(y$values[i]*s[,i])/(sum(y$values[1:5]))+scores
>
>
> cbind(s,scores)#輸出綜合得分信息
                          Comp.1  Comp.2    Comp.3   Comp.4  Comp.5   scores
北京農商銀行             -0.9927 -0.4565 -0.773341  0.72371  0.5357 -0.52362
上海農商銀行              0.5461 -0.4069  0.228600 -0.05691 -1.1411  0.08196
廣州農商銀行             -1.7680 -0.5058  0.091704  0.46582  0.4301 -0.74130
天津農商銀行              0.8670 -1.0680 -0.118665 -1.13960 -0.2242 -0.01556
(寧波)慈溪農村商業銀行 -0.9713  2.0909 -2.590721  0.44416  0.7692 -0.33751
江陰農商銀行              0.6533  0.3486 -1.678249  0.47363 -0.4051  0.05848
成都農商銀行             -2.5372 -3.2477  0.008494  0.24227  1.2955 -1.58158
重慶農村商業銀行         -1.0099 -0.1061  1.753280  0.23145 -0.6871 -0.16602
(寧夏)黃河農村商業銀行 -0.5903  0.7269  1.227349  0.59878 -1.1312  0.08463
(陝西)旬陽農村商業銀行  0.1928  1.7666 -0.273642 -1.29087  0.7258  0.31262
太倉農村商業銀行          3.1937 -1.4905 -1.089861 -1.17931 -0.6266  0.66358
武漢農村商業銀行         -0.8349  0.1686 -0.119553 -1.63283 -0.4856 -0.55902
安徽合肥科技農商銀行     -0.2713  0.3084 -0.273867  1.79049 -1.2170 -0.01448
福州農商銀行             -1.5557  1.6844  2.185117 -0.80662  0.7243  0.05566
沈陽農商銀行              5.0781  0.1871  1.423354  1.13584  1.4374  2.68217

  

 

 

 


免責聲明!

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



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