You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在lavaan中基于多重插补数据构建含双调节变量的区分性 dyad 调节型APIM模型

如何在lavaan中基于多重插补数据构建含双调节变量的区分性 dyad 调节型APIM模型

我明白你现在的需求是给区分性的母亲-父亲 dyad 构建调节型APIM,让母亲的调节变量只作用于她自己的Actor和Partner路径,父亲的调节变量同理,同时还要处理多重插补的数据。之前你尝试手动生成交互项但模型结构没搭对,我来帮你修正这个思路和代码。

一、核心思路梳理

针对区分性 dyad 的调节型APIM,我们需要明确几个关键点:

  • 母亲的调节变量(mom_mod)要调节母亲的Actor效应(mom_var1 → mom_var2)和母亲的Partner效应(mom_var1 → dad_var2)
  • 父亲的调节变量(dad_mod)要调节父亲的Actor效应(dad_var1 → dad_var2)和父亲的Partner效应(dad_var1 → mom_var2)
  • 调节分析必须先控制调节变量的主效应,且交互项要基于中心化后的变量生成(你之前做的均值中心化是对的,能有效减少多重共线性)
  • 多重插补后生成交互项的流程没问题:转long格式生成交互项再转回mids对象,这个步骤是正确的

二、修正后的完整代码流程

1. 加载包与数据生成、预处理

这部分你原来的代码基本没问题,我只做了小幅度的简洁化调整:

library(mice)
library(lavaan)
library(tidyverse)
library(faux)
library(missMethods)
library(semTools)
library(semPlot)

options(scipen = 9999)
set.seed(1234)

# 生成模拟数据
df <- faux::rnorm_multi(n = 100, vars = 6, mu = 3, sd = 1,
                        varnames = c("mom_var1", "mom_var2", "mom_mod",
                                     "dad_var1", "dad_var2", "dad_mod")) %>%
  mutate(id = rep(1:100)) %>% 
  select(id, everything()) %>%
  missMethods::delete_MCAR(cols = c("mom_var1", "mom_var2", "mom_mod",
                                    "dad_var1", "dad_var2", "dad_mod"), p = .15)

# 均值中心化调节变量(仅中心化,不标准化)
center_scale <- function(x) {
  as.numeric(scale(x, center = TRUE, scale = FALSE))
}

df <- df %>%
  mutate(mom_mod = center_scale(mom_mod),
         dad_mod = center_scale(dad_mod))

2. 多重插补与交互项生成

这部分你的逻辑完全正确,直接保留即可:

# 多重插补
imp <- mice::mice(df, m = 5, maxit = 10, seed = 1234, printFlag = FALSE)

# 转long格式生成交互项,再转回mids对象
impute_dfs <- mice::complete(imp, action = "long", include = TRUE) %>%
  mutate(mom_int = mom_var1 * mom_mod,  # 母亲核心变量×母亲调节变量
         dad_int = dad_var1 * dad_mod)  # 父亲核心变量×父亲调节变量

imp <- as.mids(impute_dfs)

3. 修正后的调节型APIM模型语法

这是最关键的部分,我去掉了多余的协方差和截距设定,聚焦于被调节的路径本身,完全匹配你想要的模型结构:

# 调节型APIM模型语法
moderated_apim <- "
  # 主效应路径 + 调节效应路径(交互项)
  # 母亲的Y变量:主效应(自身X、父亲X、母亲调节变量)+ 调节效应(父亲X×父亲调节变量)
  mom_var2 ~ a1*mom_var1 + p21*dad_var1 + mom_mod + p21_mod*dad_int
  
  # 父亲的Y变量:主效应(自身X、母亲X、父亲调节变量)+ 调节效应(母亲X×母亲调节变量)
  dad_var2 ~ a2*dad_var1 + p12*mom_var1 + dad_mod + p12_mod*mom_int
  
  # 额外的调节效应:自身X×自身调节变量(Actor效应的调节)
  mom_var2 ~ a1_mod*mom_int
  dad_var2 ~ a2_mod*dad_int
  
  # APIM基础结构:均值、方差、协方差
  # X变量的均值
  mom_var1 ~ mx1*1
  dad_var1 ~ mx2*1
  
  # Y变量的截距
  mom_var2 ~ my1*1
  dad_var2 ~ my2*1
  
  # X变量的方差
  mom_var1 ~~ vx1*mom_var1
  dad_var1 ~~ vx2*dad_var1
  
  # Y变量的残差方差
  mom_var2 ~~ vy1*mom_var2
  dad_var2 ~~ vy2*dad_var2
  
  # dyad内X的协方差、Y残差的协方差
  mom_var1 ~~ cx*dad_var1
  mom_var2 ~~ cy*dad_var2
  
  # 可选:定义差异/平均参数(用于区分性dyad的组间比较)
  a_diff := a1 - a2          # Actor效应差异
  p_diff := p12 - p21        # Partner效应差异
  a_mod_diff := a1_mod - a2_mod  # Actor调节效应差异
  p_mod_diff := p12_mod - p21_mod  # Partner调节效应差异
"

4. 拟合模型与查看结果

# 拟合多重插补后的模型
sem_model <- sem.mi(model = moderated_apim, fixed.x = FALSE, data = imp)

# 查看结果(标准化解更易解释调节效应)
summary(sem_model, standardized = TRUE, fit.measures = TRUE)

5. 模型可视化

你之前的可视化代码可以调整一下,确保路径对应正确:

# 用完整数据拟合模型用于绘图(仅可视化用,不用于参数估计)
df_plot <- df %>%
  mutate(mom_int = mom_var1*mom_mod,
         dad_int = dad_var1*dad_mod)

plot_model <- sem(moderated_apim, fixed.x = FALSE, data = df_plot)
baseplot <- semPlot::semPlotModel(plot_model)

# 替换为多重插补模型的标准化估计
desired_output <- data.frame(standardizedsolution(sem_model)) %>%
  filter(op != ":=")
baseplot@Pars$est <- desired_output$est.std

# 绘制路径图
semPaths(baseplot, nCharNodes = 0, what = "est",
         whatLabels = "invisible", fade = FALSE, layout = "tree2",
         rotation = 2, style = "ram", intercepts = FALSE, residuals = FALSE,
         optimizeLatRes = TRUE, curve = 3.1, nDigits = 3, sizeMan = 12, sizeMan2 = 10,
         label.cex = 1.2, edge.label.position = 0.45, edge.label.cex = 1.5)

三、模型参数解释

  • a1:母亲的Actor主效应(mom_var1→mom_var2),a1_mod:母亲调节变量对这个Actor效应的调节程度
  • a2:父亲的Actor主效应(dad_var1→dad_var2),a2_mod:父亲调节变量对这个Actor效应的调节程度
  • p12:母亲的Partner主效应(mom_var1→dad_var2),p12_mod:母亲调节变量对这个Partner效应的调节程度
  • p21:父亲的Partner主效应(dad_var1→mom_var2),p21_mod:父亲调节变量对这个Partner效应的调节程度
  • 如果某个调节参数(如a1_mod)显著,说明对应的调节变量会改变该路径的效应强度

备注:内容来源于stack exchange,提问作者jrcalabrese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:13:05