主成分与因子分析
本节涵盖主要组成部分和因素分析。后者包括探索性和确认性方法。
主要组件
所述princomp()函数产生未旋转的主成分分析。
# Pricipal Components Analysis
# entering raw data and extracting PCs
# from the correlation matrix
fit <- princomp(mydata, cor=TRUE)
summary(fit) # print variance accounted for
loadings(fit) # pc loadings
plot(fit,type="lines") # scree plot
fit$scores # the principal components
biplot(fit)
使用cor = FALSE将主成分基于协方差矩阵。使用covmat =选项直接输入相关或协方差矩阵。如果输入协方差矩阵,请包含选项n.obs =。
psych包中的principal()函数可用于提取和旋转主要组件。
# Varimax Rotated Principal Components
# retaining 5 components
library(psych)
fit <- principal(mydata, nfactors=5, rotate="varimax")
fit # print results
mydata可以是原始数据矩阵或协方差矩阵。使用缺失数据的成对删除。旋转可以是“无”,“varimax”,“quatimax”,“promax”,“oblimin”,“simplimax”或“簇”
探索性因素分析
所述factanal()函数产生最大似然因子的分析。
# Maximum Likelihood Factor Analysis
# entering raw data and extracting 3 factors,
# with varimax rotation
fit <- factanal(mydata, 3, rotation="varimax")
print(fit, digits=2, cutoff=.3, sort=TRUE)
# plot factor 1 by factor 2
load <- fit$loadings[,1:2]
plot(load,type="n") # set up plot
text(load,labels=names(mydata),cex=.7) # add variable names
该旋转=选项包括“最大方差法”,“PROMAX”和“无”。添加选项分数= “回归”或“巴特利特”以产生因子分数。使用covmat =选项直接输入相关或协方差矩阵。如果输入协方差矩阵,请包含选项n.obs =。
心理包中的factor.pa()函数 提供了许多因子分析相关函数,包括主轴因子分解。
# Principal Axis Factor Analysis
library(psych)
fit <- factor.pa(mydata, nfactors=3, rotation="varimax")
fit # print results
mydata可以是原始数据矩阵或协方差矩阵。使用缺失数据的成对删除。旋转可以是“varimax”或“promax”。
确定提取的因素数量
探索性因素分析中的关键决定是要提取多少因素。该n因子包提供一系列功能,在这个决定帮助。有关这种方法的详细信息可以在Raiche,Riopel和Blais 的PowerPoint演示文稿中找到。当然,任何因素解决方案都必须被解释为有用。
# Determine Number of Factors to Extract
library(nFactors)
ev <- eigen(cor(mydata)) # get eigenvalues
ap <- parallel(subject=nrow(mydata),var=ncol(mydata),
rep=100,cent=.05)
nS <- nScree(x=ev$values, aparallel=ap$eigen$qevpea)
plotnScree(nS)
走得更远
该FactoMineR包提供了大量的探索性因子分析的附加功能。这包括使用定量和定性变量,以及包含辅助变量和观察值。以下是您可以使用此包创建的图表类型的示例。
# PCA Variable Factor Map
library(FactoMineR)
result <- PCA(mydata) # graphs generated automatically
Thye GPARotation包提供了超过varimax和promax的丰富旋转选项。
结构方程建模
验证性因子分析 (CFA)是更广泛的结构方程模型 (SEM)方法学的子集。SEM通过sem包装在R中提供。模型通过RAM规格输入(与SAS中的PROC CALIS相似)。尽管sem是一个综合性的软件包,但我的建议是,如果您正在进行重要的SEM工作,那么您需要获得AMOS的副本。它可以更加方便用户,并创建更具吸引力和出版物的输出。话虽如此,以下是使用sem的CFA示例。
假设我们有六个观察变量(X1,X2,…,X6)。我们假设存在两个未观测到的潜在因素(F1,F2),这些潜在因素如本图所述是观测变量的基础。在F1上加载X1,X2和X3(加载lam1,lam2和lam3)。F2上的X4,X5和X6加载(加载lam4,lam5和lam6)。双头箭头表示两个潜在因素(F1F2)之间的协方差。e1到e6表示残差(观测变量中的变量未被两个潜在因子考虑)。我们将F1和F2的方差设置为1,以便参数具有比例。这将导致F1F2代表两个潜在因素之间的相关性。
对于sem,我们需要观察变量的协方差矩阵 – 因此下面代码中的cov()语句。CFA模型是使用specify.model()函数指定的。格式为箭头指定,参数名称,起始值。选择NA的起始值会告诉程序选择一个起始值而不是自己提供一个起始值。请注意,F1和F2的方差固定为1(第二列中的NA)。空行需要结束RAM规范。
# Simple CFA Model
library(sem)
mydata.cov <- cov(mydata)
model.mydata <- specify.model()
F1 -> X1, lam1, NA
F1 -> X2, lam2, NA
F1 -> X3, lam3, NA
F2 -> X4, lam4, NA
F2 -> X5, lam5, NA
F2 -> X6, lam6, NA
X1 <-> X1, e1, NA
X2 <-> X2, e2, NA
X3 <-> X3, e3, NA
X4 <-> X4, e4, NA
X5 <-> X5, e5, NA
X6 <-> X6, e6, NA
F1 <-> F1, NA, 1
F2 <-> F2, NA, 1
F1 <-> F2, F1F2, NA
mydata.sem <- sem(model.mydata, mydata.cov, nrow(mydata))
# print results (fit indices, paramters, hypothesis tests)
summary(mydata.sem)
# print standardized coefficients (loadings)
std.coef(mydata.sem)
您可以使用boot.sem()函数来引导结构方程模型。有关详细信息,请参阅帮助(boot.sem)。另外,函数mod.indices( )将产生修改索引。通过重新指定参数,使用修改索引来改进模型拟合,可将您从验证性分析转换为探索性分析。
有关sem的更多信息,请参阅John Fox的“使用R中的sem Package进行结构方程建模”。
来练习
要练习改进的预测,请尝试Kaggle R机器学习教程