基于R语言主成分分析

在科学研究中,经常需要从同一个体(或观测单位)上观测多个指标,这些指标从不同方面反映个体的性质。主成分分析方法为无监督机器学习的一种方法,是通过线性降维将多个定量指标转换为少数几个综合指标的一种统计分析方法。
假设对于某个问题的研究涉及到P个指标,分别用Xl,X2….XP,表示,这个指标构成的P维随机向量设为X1-XP,对X进行线性变换,可以通过线性组合的方式形成新的综合变量这里用C表示:新的综合变量和原来变量之间的关系可以用下面的
公式表示:
在这里插入图片描述
上式中的线性组合可以是任意的,由不同的线性变换得到的综合变量的统计特征也是不一样的。为了使综合变量可以较好的描述原变量的特征,应该要让(方差尽可能的大,并且Ci之问相互独立.
简单来说就是把多个指标通过空间投影,矩阵运算分析,转换为几个综合指标。
下面我们来介绍一下怎么通过R语言进行主成分分析,先导入我们的R包和数据

library(ggplot2)
library(factoextra)
library(FactoMineR)
library(foreign)
be <- read.spss("E:/r/test/Employee data.sav",
                use.value.labels=F, to.data.frame=T)

在这里插入图片描述
在这里插入图片描述
我们先来看看数据,这是一个雇员的情况数据(公众号回复:雇员数据,可以获得数据),有如下10个变量Id(观测号)、Gender(性别)、Bdate( 出 生 日 期)、Educ ( 受 教 育 程 度 ( 年 数))、Jobcat(工作种类)、Salary(目前年薪)、Salbegin(开始受聘时的年薪)、Jobtime(受雇时间)、Prevexp(受
雇以前的工作时间)、Minority(是否少数民族)。
我们取educ、salary、salbegin、jobtime、prevexp来进行主成分分析,先把数据提取出来

be1<-be[c(4,6,8,9,7)]

在这里插入图片描述
因为每个定义数据不同,取值范围波动很大,因先进行数据标准化,这一步很重要

be.scaled<-scale(be1)##标准化数据

标准化后数据如下
在这里插入图片描述
标准话数据后就可以正式分析了,

pca <- princomp(be.scaled,cor = T)#主成分分析函数,cor为表示用样本的相关矩阵做主成分分析

画出碎石图

screeplot(pca,type="line",main="碎石图",lwd=2)

在这里插入图片描述
我们可以看到前3个主成分贡献比较大,,一般挑选前面几个方差最大的为主成分(累积方差贡献率在80%到90%之间)

dcor<-cor(be.scaled)###求相关矩阵
deig<-eigen(dcor) ##求相关矩阵的特征值和特征向量
deig$values###查看特征值
sum(deig$values) 
sum(deig$values[1:3])/5###求前3个主成分的累积方差贡献率

在这里插入图片描述
可以看到前3个成分(comp.1—comp.3)贡献率已经达到90%了,因此前三个为主成分,其实没有必要这么复杂,我们直接

summary(pca,loadings = T)

在这里插入图片描述
proportion of variance行给出了主成份的方差贡献率,我们把前3个加起来,结果也是一样的,loadings部分给出了载荷系数,我们可以看出各个指标的参与程度,得出各指标的系数。
生成我们的主成分的输出数据

pca_data <- predict(pca)

在这里插入图片描述
接下来进行做图,假设我们以Jobcat(工作种类)对主成分进行绘图,

be.pca<- PCA(pca_data, graph = FALSE)

我们只要在fill.ind这里定义就可以了,其他的不用修改,但这里要注意一点jobcat在数据中定义为数字,我们要把它改为因子,不然就会出错

fviz_pca_ind(be.pca,
             geom.ind = "point",
             pointsize =3,pointshape = 21,fill.ind = be$jobcat ,
             palette = c("#00AFBB", "#E7B800", "#FC4E07"),
             addEllipses = TRUE, # Concentration ellipses
             legend.title = "Groups",
             title="")+theme_grey()

在这里插入图片描述
重新来过

be$jobcat <-as.factor(be$jobcat)
fviz_pca_ind(be.pca,
             geom.ind = "point",
             pointsize =3,pointshape = 21,fill.ind = be$jobcat ,
             palette = c("#00AFBB", "#E7B800", "#FC4E07"),
             addEllipses = TRUE, # Concentration ellipses
             legend.title = "Groups",
             title="")+theme_grey()

在这里插入图片描述
还可以进一步修改,

fviz_pca_ind(be.pca,geom.ind="point",pointsize=3,
             pointshape=21,fill.ind=be$jobcat,
             palette=c("#00AFBB","#E7B800","#FC4E07"),
             addEllipses=TRUE,legend.titl="Groups",title="")+theme_grey()+
  theme(
    text=element_text(size=12,face="plain",color="black"),
    axis.title=element_text(size=11,face="plain",color="black"),
    axis.text = element_text(size=10,face="plain",color="black"),
    legend.title = element_text(size=11,face="plain",color="black"),
    legend.text = element_text(size=11,face="plain",color="black"),
    legend.background = element_blank(),
    legend.position=c(0.88,0.15)
  )

在这里插入图片描述
有没有简单点的方法?也可以通过ggfortify包进行快速做图,

library(ggfortify)
autoplot(prcomp(be.scaled), data = be, 
         shape=21,colour ="black",fill= 'jobcat', size=3,
         frame = TRUE,frame.type = 'norm', frame.colour = 'jobcat')

在这里插入图片描述
这里要注意一下,如果数据没有标准化,做出来的图完全不同,下图是没有标准化数据做的

autoplot(prcomp(be1), data = be, 
         shape=21,colour ="black",fill= 'jobcat', size=3,
         frame = TRUE,frame.type = 'norm', frame.colour = 'jobcat')

在这里插入图片描述
参考文献:
[1]魏景海. 基于R下的主成分分析及应用[J]. 哈尔滨师范大学自然科学学报, 2014(4):4.
[2]胡良平. 基于SAS与R软件的主成分分析[J]. 四川精神卫生, 2018, 31(2):6.
[3]刘聪, 汪明. R软件在主成分分析中的应用研究[J]. 电脑知识与技术:学术版, 2011, 7(5):3.
[4]李小胜, 陈珍珍. 如何正确应用SPSS软件做主成分分析[J]. 统计研究, 2010, 27(8):4.
[5] Zhang J . Beautiful Data Visualization with R (《R语言数据可视化之美》)[M]. 2019.
在这里插入图片描述

  • 7
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值