CFA в данных с 3 уровнями - оценка факторов на уровне 2?

Я работаю над набором данных с 3 уровнями:

  1. Учитель
  2. Школа
  3. Страна

Используя ответы учителей на опросы, цель состоит в том, чтобы использовать подтверждающий факторный анализ (CFA) с конечной целью получения оценок факторов на уровне школы.

Еще одной целью является проверка неизменности измерений в разных странах.

Я хочу использовать пакет lavaan в R, потому что он может работать со сложным дизайном опроса моих данных через расширение lavaan.survey-extension (дизайн выборки, веса и т. д.)

Я сделал предварительный анализ, где я использую идентификатор страны в качестве группового аргумента в функции cfa. Это дает мне возможность проводить анализ инвариантности измерений в разных странах. Проблема в том, что мои баллы по факторам даны на уровне отдельных учителей, а меня интересует уровень школы.

Любые идеи о том, как получить эти факторные баллы на школьном уровне?

Вот несколько примеров функций, которые я использую. Я не думаю, что мне нужен образец данных, но я создам его, если он будет запрошен.

library(lavaan)
library(SEMtools)

#define model
reduced_mod <-' 
 leadership_sup =~ TC3G22D + TC3G22E + TC3G22K
 continous_develop_collab =~ TT3G32A + TT3G32B + TT3G32C + TT3G32D '

#Fit model with different restraints:
fit_no_restraint <- cfa(model = reduced_mod, data = cfa_data, group="countryID")

fit_metric <- cfa(model = reduced_mod, data = cfa_data, group="countryID", group.equal = c("loadings"))

fit_scalar <- cfa(model = reduced_mod, data = cfa_data, group="countryID", group.equal = c("loadings", "intercepts"))

#Compare fit statistics
compareFit(scalar = fit_scalar , metric = fit_metric , config = fit_no_restraint)



person Anders    schedule 08.02.2021    source источник


Ответы (1)


Кажется, вы хотите многоуровневую инвариантность измерений. Вы должны использовать measEq.syntax() из пакета semTools:

## ---------------------
## Multilevel Invariance
## ---------------------

## To test invariance across levels in a MLSEM, specify syntax as though
## you are fitting to 2 groups instead of 2 levels.

mlsem <- ' f1 =~ y1 + y2 + y3
           f2 =~ y4 + y5 + y6 '
## metric invariance
syntax.metric <- measEq.syntax(configural.model = mlsem, meanstructure = TRUE,
                               ID.fac = "std.lv", sample.nobs = c(1, 1),
                               group = "cluster", group.equal = "loadings")
## by definition, Level-1 means must be zero, so fix them
syntax.metric <- update(syntax.metric,
                        change.syntax = paste0("y", 1:6, " ~ c(0, NA)*1"))
## save as a character string
mod.metric <- as.character(syntax.metric, groups.as.blocks = TRUE)
## convert from multigroup to multilevel
mod.metric <- gsub(pattern = "group:", replacement = "level:",
                   x = mod.metric, fixed = TRUE)
## fit model to data
fit.metric <- lavaan(mod.metric, data = Demo.twolevel, cluster = "cluster")
summary(fit.metric)

Источник

person Sinval    schedule 20.02.2021