vlambda博客
学习文章列表

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) #两极化图

R语言 | 主成分分析(PCA)代码+讲解

从以上两个图可以直观的看出,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号:谁说菜鸟不会数据分析