我一直试图在Rstudio中编写一个函数,该函数为EFA提取越来越多的潜在因子,并在最终表中报告每种解决方案的拟合度。在下面,我粘贴了我能想到的。
不幸的是,它有一些关键限制:
for循环需要设置要提取的因子的间隔。很好,但是如果函数在出现错误消息时停止运行(如“超出最大迭代次数”,“在GPFoblq中未获得收敛”),那就更好了。
[已解决]最终表中包含一个丑陋的第一列,其标签为“ RMSEA”,这是完全没有用的,但我无法摆脱它。
通常,for循环可能不是达到目标的最优雅方法。
library(psych)
library(GPArotation)
library(dplyr)
library(plyr)
library(knitr)
efas <- list()
for (i in 1:10) {
fitn <- fa(bfi, nfactors = i, fm = "pa", rotate = "oblimin", scores = "regression")
efas[[i]] <- data.frame(fitn$TLI, fitn$RMSEA[1], fitn$rms, fitn$BIC) %>%
mutate(Factors = i) %>%
dplyr::rename(TLI = fitn.TLI,
RMSEA = fitn.RMSEA.1.,
SRMR = fitn.rms,
BIC = fitn.BIC) %>%
dplyr::select(Factors, TLI, RMSEA, SRMR, BIC)
}
d <- do.call("rbind", efas) %>%
kable()%>%
sub("^\\|[^|]+(\\|.*)", "\\1", .)
d
感谢您的帮助!