R цикл для нескольких фреймов данных с использованием Lavaan - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время я работаю с данными с 8 волнами, каждая волна на данный момент хранится в своем собственном фрейме данных.Я сделал большую часть очистки данных с большим количеством повторений, так как я не мог понять, как заставить R запускать один и тот же скрипт на разных фреймах данных.Теперь я хочу сделать CFA с использованием Lavaan, и я заметил, что сценарий становится очень грязным, так как 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)

...

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

@ 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)
0 голосов
/ 27 февраля 2019

Один из способов сделать это проще - поместить все ваши bds_x data.frames в list, а затем запустить вашу модель во всех из них с 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.список списков, каждый из которых содержит подгонку, сводку и modindices для каждого data.frame

...