首先,加载我们需要用到的包,
install.packages("corrplot")#相关系数矩阵可视化
install.packages("psych")#因子分析,本次实验使用其平行分析的能力
#另外需要下载mvstat程序包,安装到library的路径下
读取我们准备好的数据
airquality <- read.csv("C:/Users/LRT/Desktop/graduate/paper/data/Airdata.csv",
sep=",", header = TRUE,stringsAsFactors = FALSE)
因为原始数据中的变量名称都是中文,所以先简化一次变量名称
colnames(airquality) <- c("city", "SO2", "NO2","PM10", "CO","O3","PM2.5","days","rain")
简化结束后,查看数据结构等
#查看数据结构
summary(airquality)
str(airquality)
进行因子分析时,需要先检验变量之间的相关性,在这里先将变量之间的相关系数进行可视化
#相关系数矩阵及具有双色表正负相关
airquality_cor <- cor(airquality[2:9], method = "spearman")#spearman法求相关系数矩阵
library(corrplot)#加载corrplot包
corrplot.mixed(airquality_cor, number.cex = .9)#绘制混合型相关系数矩阵图
效果如图:
只有图形展示还是不够的,我们需要进行KMO和巴雷特球形检验
#巴雷特球形检验&KMO检验
library(psych)#加载检验用到的包
cortest.bartlett(airquality_cor)#巴雷特球形检验
KMO(airquality_cor)#kmo检验
注意这里的KMO函数书写格式必须为大写
检验结果如图,且结果说明适合做因子分析。
接下来需要判断这几个变量需要提取几个因子
#判断需要提取的公因子个数
library(psych)#加载检验用到的包
fa.parallel(airquality_cor, n.obs = 320,
fa = "fa", n.iter = 100)#制作碎石图判断个数
代码中,fa表示适合提取的因子个数,如改成pc则表示主成分个数,如果都想展示就改成both,n.iter为要执行的模拟分析的数量。
结果如图:
这里R建议我们选择两个因子
接下来进行主成分法提取因子,并对因子进行最大方差旋转,最后得到一系列我们需要的值
library(mvstats)
airquality_score <- factpc(airquality[2:9],2,rotation="varimax",scores = "regression")
airquality_score$Vars#输出因子方差、方差贡献率以及累计方差贡献率
airquality_score$loadings#输出因子载荷矩阵
airquality_score$scores#输出因子得分
airquality_score$Rank#输出排名
factor.plot(airquality_score,labels = rownames(airquality_score$loadings),
title = "Factor Analysis",pos = "3")
其中,计算得分的方法可以为regression(回归),也可以为bartlett(巴雷特)。
最后依据结果进行分析即可。