R语言 | 主成分分析(PCA)代码+讲解
大家好,我是菜鸟君。又到了一年一度,不是,一周一次的更新时间,本拖延症晚期患者已成功拖到deadline前。马上更,别催。。
之前介绍过怎么用SPSS进行主成分分析(PCA),已经忘了的朋友们可以再回头看看,指路
今天主要介绍下R语言主成分分析的几种方法。都是入门级别,跟着我一步步走,一点都不难哈~
首先调用R语言自带的数据集,USArrests。这是个关于美国各州犯罪率的一个统计数据,已经很久远了,没啥实际研究价值,拿来做分析练手正好合适。
data("USArrests")
str(USArrests) #查看数据各变量类型
summary(USArrests) #查看数据变量分布情况
方法1.prcomp stats
prcomp这功能是R安装的时候就自带的,不用再特意安装其他包了,非常方便实用。
prcomp(USArrests, scale = TRUE) #直接数据矩阵,加上归一化
#也可以写成公式
p <- prcomp(~ Murder + Assault + Rape, data = USArrests, scale = TRUE) #直接方程
#画图,得出可视化结果,就这么简单
plot(p)
plot(prcomp(USArrests))
#各公因子重要性得分
summary(prcomp(USArrests, scale = TRUE))
#两极化图,把所有因子在X Y轴呈现
biplot(prcomp(USArrests, scale = TRUE))
方法2.princomp
与prcomp功能一样,princomp也不用额外安装包了。实现的代码如下:
princomp(USArrests, cor = TRUE)
#各公因子重要性
summary(pc.cr <- princomp(USArrests, cor = TRUE))
loadings(pc.cr) #得分
plot(pc.cr) # 因子得分排序柱状图
biplot(pc.cr) #两极化图
从以上两个图可以直观的看出,UrbanPop与其他三个变量离得挺远的,整体数据分成2个公因子就挺合理。具体来说,与Rape关系紧密的几个州为Michigan、Texas等,与Murder关系密切的州为Georgia等,与Assault关系紧密的州为Maryland等。
方法3.psych包principal
这种方法需要先安装psych包。安装也很简单,在Rstudio里一行命令搞定:
install.packages("psych") #安装
library(psych) #载入psych包
df <- USArrests
#首先,计算相关矩阵
df.cor<-cor(df)
#第二步,判断主成分的个数
fa.parallel(df, fa = "pc", n.iter = 100,
show.legend = F, main = "Scree plot with parallel analysis")
从这个选择主成分的碎石图里,也可以清晰看出,2是“拐点”,选2,没错。
pc<-principal(df, nfactors = 2, score = T, rotate = "varimax")
summary(pc) #主成分分析情况
pc$loadings #各公因子得分
round(unclass(pc$weights),2) #给出每个变量到底对应哪个公因子
这结果就挺一目了然的,Murder、Assault、Rape属于RC1第一个公因子,他们在第一个公因子上得分都为正。UrbanPop属于第二个公因子。
以上就是用R语言进行主成分分析的三种方法,小伙伴们如果觉着有用,可以随意分享给更多的小伙伴,大家一起学习交流!下周末再见呀~
记得点右下方“在看”
B站up号:谁说菜鸟不会数据分析