2

我目前正在处理 8 个 wave 的数据,每个 wave 现在都存储在它自己的数据框中。我已经通过大量重复完成了大部分数据清理,因为我无法弄清楚如何让 R 在不同的数据帧上运行相同的脚本。现在我想用 Lavaan 做一个 CFA,我注意到脚本变得非常混乱,CFA 正在为所有 8 个波的多个变量完成。我很想找到一种方法来简化我的脚本,以便我和其他人都清楚。在下面,您可以找到一个简短的示例,说明“长”版代码的外观,但我希望在缩短它方面得到一些帮助!

我试过使用 for 循环,但我无法让它工作。

如果您有任何提示,请告诉我,这样我就可以停止复制粘贴相同的代码并替换 df 中的数字!

# Example with 2 waves in 2 df
model_ADI_aff <- "aff =~ bds89 + bds39 + bds50 + bds29 + bds84 + bds49 + bds70 + bds88 + bds11 + bds28
                "
fit_ADI_aff_1 <- cfa(model_ADI_aff,
                 data = bds_1,
                 missing = "fiml",
                 estimator = "MLR",
                 se = "robust.huber.white",
                 test = "yuan.bentler")
summary(fit_ADI_aff_1, standardized = TRUE, fit.measures = TRUE)
modindices(fit_ADI_aff_1, sort.=TRUE, minimum.value=3)

fit_ADI_aff_2 <- cfa(model_ADI_aff,
                     data = bds_2,
                     missing = "fiml",
                     estimator = "MLR",
                     se = "robust.huber.white",
                     test = "yuan.bentler")
summary(fit_ADI_aff_2, standardized = TRUE, fit.measures = TRUE)
modindices(fit_ADI_aff_2, sort.=TRUE, minimum.value=3)

...

4

2 回答 2

0

使其更简单的一种方法是将所有 bds_xdata.frames放入 alist中,然后在所有这些中运行模型lapply()

model_ADI_aff <- "aff =~ bds89 + bds39 + bds50 + bds29 + bds84 + bds49 + bds70 + bds88 + bds11 + bds28"

fun = function(bds){
 fit = cfa(model_ADI_aff,
           data = bds,
           missing = "fiml",
           estimator = "MLR",
           se = "robust.huber.white",
           test = "yuan.bentler")
 summ = summary(fit)
 mo = modindices(fit_ADI_aff_2, sort.=TRUE, minimum.value=3)

 list(fit = fit,summary = summ, modindices = mo)
}

df_list = "list containing all bds"
results = lapply(df_list,fun)

results将是一个列表列表,每个列表都包含每个列表的拟合、摘要和修改索引data.frame

于 2019-02-27T13:04:57.800 回答
0

@Fino

我做了一些调整,似乎成功了,非常感谢!

fun = function(bds){
  fit = cfa(model_ADI_aff,
            data = bds,
            missing = "fiml",
            estimator = "MLR",
            se = "robust.huber.white",
            test = "yuan.bentler")
  summ = summary(fit, standardized = TRUE, fit.measures = TRUE)
  mo = modindices(fit, sort.=TRUE, minimum.value=3)

  list(fit = fit,summary = summ, modindices = mo)
}

df_list <- list (bds_1, bds_2, bds_3, bds_4, bds_5, bds_6, bds_7, bds_8)
results = lapply(df_list,fun)
于 2019-03-01T11:05:51.693 回答