R语言主成分分析(PCA)
1 | 数据的导入<br><br> |
> data=read.csv('F:/R语言工作空间/pca/data.csv') #数据的导入
>
> ls(data) #ls()函数列出所有变量
[1] "X" "不良贷款率" "存贷款比率" "存款增长率" "贷款增长率" "流动比率" "收入利润率"
[8] "资本充足率" "资本利润率" "资产利润率"
> dim(data) # 维度
[1] 15 10
一.数据标准化
1 2 3 4 5 6 7 8 9 | > 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" |
习惯数据框格式
数据标准化
1 2 3 4 5 6 7 8 9 | > 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" |
二.主成分分析结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | > 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%,确定
计算相关系数矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | > 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 |
求特征值和特征向量
1 2 3 | >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 |
输出前五个累计贡献率
1 2 3 | > sum (y$values[1:5])/ sum (y$values) #求前5个主成分的累计方差贡献率 [1] 0.9423 > |
1 | 输出前5个主成分的载荷矩阵 |
1 2 3 4 5 6 7 8 9 10 11 | > 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 |
画出碎石图
1 | screeplot (df.pr,type= 'lines' ) #画出碎石图 |
画出散点图
1 | biplot (df.pr) #画出主成分散点图 |
四.获取相关系数矩阵的特征值和特征向量
1 2 3 | > 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 |
五.计算主成分总得分
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | > 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 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 在 Windows 10 上实现免密码 SSH 登录
· C#中如何使用异步编程
· SQL Server 内存占用高分析及解决办法(超详细)
· 20250116 支付宝出现重大事故 有感
· ffmpeg简易播放器(1)--了解视频格式