具有 3 个级别的数据中的 CFA - 估计第 2 级的因子分数?

问题描述

我正在处理具有 3 个级别的数据集:

  1. 老师
  2. 学校
  3. 国家

使用教师的调查回复,目的是使用验证性因素分析 (CFA),最终目标是在学校层面获得因素分数。

一个目标是测试不同国家/地区的测量不变性。

我想在 R 中使用 lavaan 包,因为它能够通过 lavaan.survey-extension(抽样设计、权重等)处理我的数据的复杂调查设计

我已经做了一些初步分析,我在 cfa 函数中使用 country-ID 作为组参数。这使我有可能进行跨国家的测量不变性分析。问题是,我的因子分数是在个别教师级别给出的,而我对学校级别感兴趣。

关于如何在学校层面获得这些因素分数的任何想法?

以下是我使用的一些函数示例。我认为不需要我的数据样本,但如果需要,我会创建一些。

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,group="countryID",group.equal = c("loadings"))

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

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


解决方法

您似乎想要多级测量不变性。您应该使用 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)

Source