RStudio探索性因素分析:编写一个函数,提取越来越多的因素

RStudio探索性因素分析:编写一个函数,提取越来越多的因素,r,function,for-loop,purrr,factor-analysis,R,Function,For Loop,Purrr,Factor Analysis,我一直在尝试在Rstudio中编写一个函数,用于提取越来越多的全民教育潜在因素,并在最终表格中报告每个解决方案的拟合度量。下面,我粘贴了我能想到的东西 不幸的是,它有一些关键的限制: for循环需要设置要提取的因子的间隔。这很好,但如果函数在收到错误消息时停止(例如“超过最大迭代次数”、“在GPFoblq中未获得收敛”),则会更好 [已解决]最后一个表包含一个丑陋的第一列,标签为“RMSEA”,这是完全无用的,但我无法摆脱它 一般来说,for循环可能不是达到目标的最优雅的方式 library(

我一直在尝试在Rstudio中编写一个函数,用于提取越来越多的全民教育潜在因素,并在最终表格中报告每个解决方案的拟合度量。下面,我粘贴了我能想到的东西

不幸的是,它有一些关键的限制:

  • 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
    
    图书馆(心理学)
    图书馆(GParotion)
    图书馆(dplyr)
    图书馆(plyr)
    图书馆(knitr)
    全民教育百分比
    dplyr::选择(因子、TLI、RMSEA、SRMR、BIC)
    }
    d%
    kable()%>%
    sub(“\\\\\\\[^\\\\\\]+(\\\\\\\\\.*”,“\\1”,)
    D
    

  • 谢谢你的帮助

    您是否可以让您的示例具有可复制性,也就是说,本质上,我们应该能够在一个新的R会话中复制粘贴您的代码,并运行它?谢谢:)(提示:
    dput(db)
    fa
    的定义或包,其他必要的
    library()
    调用…)谢谢您的评论!我从R中随机选取了一个数据库,现在该函数可以运行了。期待阅读您的反馈!谢谢什么是
    big5
    ?big5是qgraph包中包含的数据集。这只是一个随机数据集,您可以在其上运行EFA。@Aurèle我不知道为什么big5数据集不起作用。由于bfi数据集包含代表5个因素的25个个性项目,我应该已经解决了这个问题。