如何将含潜变量回归的lavaan SEM转为lme4多水平模型
研究背景
我尝试将lavaan构建的结构方程模型转换为lmer多水平项目反应模型。目标模型包含2个潜因子,各自由3个观测变量测量;其中一个潜因子作为因变量,对另一个潜因子、以及个体水平不随时间变化的外生二分类协变量(sex,性别)做回归。
核心问题
恳请指导如何将结构方程模型中的潜变量间回归关系纳入多水平模型框架?在下方最小可运行示例中,我已完成lavaan模型拟合,并尝试在lmer中实现对应的分层版本,但始终无法正确设置潜变量回归结构,也不确定仅预测第二个潜因子的性别协变量的正确纳入位置。
可运行示例
为lme4与lavaan预处理数据
library(dplyr) library(tidyr) library(lavaan) library(lme4) library(semPlot) # 载入数据,保留模型所需变量,剔除缺失值,对所有潜变量指标做标准化处理 # 其中lv2的所有测量项设为连续变量,lv1的所有测量项设为有序变量 dat <- lavaan::HolzingerSwineford1939 %>% select(starts_with("x") | sex) %>% select(-c("x7","x8","x9")) %>% mutate(sex = sex - 2) %>% mutate(across(starts_with("x"), ~ scale(.x))) %>% mutate(across(c(paste0("x", 1:3)), ~ case_when(. < -0.5 ~ 1, . >= -0.5 & . < 0.5 ~ 2, . >= 0.5 ~ 3))) %>% na.omit() # 为单参数多水平项目反应模型准备数据 # 转换为长格式:每一行对应一个题项作答,新增题项对应潜因子的指示变量,以及题项所属潜因子的分类变量 dat_irt <- dat %>% mutate(id = 1:n()) %>% pivot_longer(names_to = "item", cols = starts_with("x"), values_to = "response") %>% mutate(lv1_item = case_when(item %in% paste0("x",1:3) ~ 1, TRUE ~ 0), lv2_item = case_when(item %in% paste0("x",4:6) ~ 1, TRUE ~ 0), item_type = case_when(lv1_item == 1 ~ "lv1", TRUE ~ "lv2"))
lavaan模型设定 m1 <- 'lv1 =~ x1 + x2 + x3 lv2 =~ x4 + x5 + x6 lv2 ~ lv1 + sex' m1_out <- lavaan::sem(model = m1, data = dat) # 查看路径图与模型输出结果 m1_out %>% semPaths()

lme4分层模型尝试 # 拟合单因子Rasch(单参数Logistic)模型 dat_irt %>% lme4::lmer(response ~ -1 + item + (1 | id), .) %>% summary() # 尝试实现lv1对lv2的回归:当前写法只能得到每个被试id的能力估计值,无法实现潜变量间的回归设定 dat_irt %>% lme4::lmer(response ~ -1 + item + (-1 + item_type | id), .) %>% summary() # 尝试加入个体水平不随时间变化的二分外生协变量性别:不清楚协变量的放置位置,因为仅需要性别预测lv2 dat_irt %>% lme4::lmer(response ~ -1 + item + sex + (-1 + sex + item_type | id), .) %>% summary()
内容的提问来源于stack exchange,提问作者socialscientist
相关产品推荐
相关产品推荐

