PCA(数据降维), EFA(发现潜在结构)
library(psych)
complete.cases(USJudgeRatings)
library(psych)
fa.parallel(USJudgeRatings[,-1],fa="pc",n.iter=100,show.legend=F,main="Picture")
# n.iter模拟100个随机数据矩阵推导出特征值均值(虚线)
# fa=主成分(pc),因子(fa),两个(both)
abline(h=1,lty=1,col="black")
# 超过虚线或abline,被选为主成分——得到个数
pc <- principal(USJudgeRatings[,-1], nfactors=1, rotate="none")
# nfactors设置主成分个数
# rotate主成分旋转:"varimax" ;主成分提取不需要旋转,设置成none
主成分旋转:
rotate=“none” 不旋转
rotate=“varimax” 方差极大旋转(属于正交旋转的一种)
rotate=“promax” 斜交旋转
显示内容的含义:
(1)PC1 栏包含了成分载荷,指观测变量与主成分的相关系数。如果提取不止一个主成分,那么还将会有 PC2 、 PC3 等栏。成分载荷(component loadings)可用来解释主成分的含义。
(2)h2 栏指成分公因子方差,即主成分对每个变量的方差解释度。
(3)u2 栏指成分唯一性,即方差无法被主成分解释的比例(1–h2)
pc <- principal(USJudgeRatings[,-1], nfactors=1, score=TRUE)
# score=TRUE加上才可以获得成分得分
head(pc$scores)
如果做了旋转(主成分分析基于相关系数矩阵),该怎么确定主成分得分?
rc <- principal(Harman23.cor$cov, nfactors=2, rotate="varimax")
round(unclass(rc$weights), 2)
head(pc$scores)
# 根据显示的系数
PC1 = 0.28*height + 0.30*arm.span + 0.30*forearm + 0.29*lower.leg -
0.06*weight - 0.08*bitro.diameter - 0.10*chest.girth -
0.04*chest.width
covariances <- ability.cov$cov # ability.cov是一个包含变量协方差矩阵的数据集
correlations <- cov2cor(covariances) # 把协方差矩阵转化为相关系数矩阵
fa.parallel(correlations, n.obs=112, fa="both", n.iter=100,
main="Scree plots with parallel analysis")
不确定几个因子时,高估因子数通常比低估因子数的结果好。
fa <- fa(correlations, nfactors=2, rotate="none", fm="pa")
# 主轴迭代法 fm="pa" 提取未旋转的因子
# rotate="varimax" "none" "promax"
使用主轴迭代法提取未旋转的因子
factor.plot(fa, labels=rownames(fa$loadings))
fa$weights