主成分分析和探索性因子分析是用来探索和简化多变量复杂关系的常用方法,能解决信息过度复杂的多变量数据问题。
主成分分析PCA:一种数据降维技巧,将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分
探索性因子分析EFA:用来发现一组变量的潜在结构的方法,通过寻找一组更小的,潜在的隐藏的结构来揭示已观测到的,显式的变量间的关系.
R基础安装包中提供了PCA和EFA函数分别为princoomp()和factanal(), psych包中也提供了相关函数,它提供了比基础函数更加丰富和有用的选项.
主成分分析:
判断主成分的个数:1) 先验知识, 2) 解释变量方差的积累值的阈值来判断需要的主成分数,3) 检查变量间k*k 相关系数矩阵来判断保留的主成分数
principal(r, nfactors=, rotate=, score = )
r是相关系数矩阵或者原始数据矩阵
nfactors 设定主成分数
rotate 指定旋转的方法(默认,最大方差旋转)
scores 设定是否需要计算主成分得分(默认不需要)
library(psych)
#这个例子只有一个主成分
#删除CONT变量(下标-1),生成三种评价指标
fa.parallel(USJudgeRatings[,-1],fa='pc',n.iter=100,show.legend = FALSE)
#图中表明选择一个主成分便可,之后使用principal()函数挑出相应的主成分
pc <- principal(USJudgeRatings[,-1],nfactors = 1,scores=TRUE)
pc
#从原始数据中获得成分得分
pc$scores
#这个例子有2个主成分
fa.parallel(Harman23.cor$cov,n.obs=302,fa='pc',n.iter=100,show.legend = FALSE)
rc <- principal(Harman23.cor$cov,nfactors=2,rotate="varimax",scores=TRUE)
rc
#主成分分析基于相关系数矩阵时,原始数据不可用
round(unclass(rc$weights),2)
attach(Harman23.cor)
#利用以下公式
#PC1 = 0.28*cov$height + 0.30*arm.span + 0.30*foream + 0.29*lower.leg - 0.0
#6*weight - 0.08*bitro.diameter - 0.10*chest.girth-0.04*chest.width
探索性因子分析:
EFA目标是通过发掘隐藏在数据下的一组较少的,更为基本的无法观测的变量来揭示一组可观测变量的相关性。这些虚拟的,无法观测的变量称为因子。
library(psych)
options(digits=2)
#数据集ability.cov提供变量的协方差矩阵
covariances<-ability.cov$cov
#用cov2cor将其转化为相关系数矩阵
correlations<-cov2cor(covariances)
correlations
#判断要提取的引子数
fa.parallel(correlations,n.obs = 112,fa="both",n.iter=100)
#用fa函数获取相应的结果
fa<-fa(correlations, nfactors=2,rotate="none",fm='pa')
fa