Я хочу запустить Multigroup CFA. Ниже я использовал хорошо известный набор данных, доступный в lavaan, для создания воспроизводимого примера. Набор данных содержит данные об успеваемости учеников, обучающихся в двух школах. Цель исследования - подтвердить структуру скрытых переменных по группам.
Хотя модель измерения одинакова для групп, я хочу протестировать различные структурные модели между группой 1 (школа = "Пастер") и группой 2 (школа = "Грант-Уайт"). Как я могу это сделать? Один из способов справиться с этим сценарием - использовать purrr::map_if
и предварительно указать две структуры. К сожалению, этот подход неэффективен, когда у вас более двух групп или вам необходимо провести дополнительный анализ со значениями загрузки.
Мне интересно, есть ли способ указать эту информацию (например, текстовый ~ speed = NA или что-то) в функции lavaan::cfa
.
Спасибо всем, кто поможет!
library(lavaan)
library(magrittr)
library(purrr)
library(dplyr)
library(tidyr)
HS.model <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
visual ~ speed
textual ~ speed'
fit <- cfa(HS.model,
data = HolzingerSwineford1939,
group = "school")
summary(fit)
HS.model1 <- 'visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
visual ~ speed
textual ~ speed'
HS.model2 <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
visual ~ speed'
HolzingerSwineford1939 %>%
group_by(school) %>%
nest() %>%
dplyr::mutate(m = data %>% map_if((school == "Pasteur"), function(d) cfa(HS.model1, data = d)),
m = m %>% map_if((school == "Grant-White"), function(d) cfa(HS.model2, data = d)),
stdsol = m %>%
map(function(fit) standardizedsolution(fit))) %>%
unnest(stdsol) %>%
as.data.frame() %>%
dplyr::filter(op != "~~") %>%
unite(Effect, lhs, op, rhs, sep = "") %>%
dplyr::select(school, Effect, est.std) %>%
tidyr::spread(school, est.std)