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

R中嵌套数据框的多层中介分析:适配包与实现方案问询

重复测量嵌套数据的中介分析解决方案

问题描述

现有嵌套重复测量数据:3个分组(Group A/B/C),每个分组包含30个用户ID,每个ID对应3条不同产品(Fruit/Dairy/Meat)的反应记录。需完成两类中介分析:

  • 组间中介分析与汇总:比较不同Group的中介效应
  • 组内产品间中介分析与汇总:同一Group内,不同Product的中介效应比较

可复现数据生成代码:

set.seed(1994)

# 生成90个唯一ID
n_IDs <- 90
ID <- paste0("ID", 1:n_IDs)

# 定义分组与产品
Groups <- rep(c("A", "B", "C"), each = n_IDs / 3)
Products <- rep(c("Fruit", "Dairy", "Meat"), times = n_IDs)

# 每个ID重复3次匹配产品
ID_rep <- rep(ID, each = 3)

# 确保所有向量长度一致
n_total <- length(ID_rep)

# 生成中介变量、协变量、自变量与因变量
Mediator1 <- round(runif(n_total, -100, 100))
Mediator2 <- round(runif(n_total, -100, 100))
Mediator3 <- round(runif(n_total, -100, 100))
Mediator4 <- round(runif(n_total, -100, 100))
Covariate1 <- round(runif(n_total, -100, 100))
Covariate2 <- round(runif(n_total, -100, 100))
IV <- round(runif(n_total, -100, 100))
DV <- round(runif(n_total, -100, 100))

# 创建数据框
DF <- data.frame(ID = ID_rep, Group = rep(Groups, each = 3), Product = Products, Mediator1, Mediator2, Mediator3, Mediator4, Covariate1, Covariate2, IV, DV)

参考工具为Amanda Kay Montoya开发的MEMORE宏(非R环境),需适配R包实现分析。


适配R包与代码实现

针对嵌套重复测量结构,推荐使用**lavaan(支持多层结构方程模型,适配ID嵌套)和mediation**(结合混合效应模型检验中介效应),以下分两类需求实现:

1. 组间中介分析与汇总

实现思路

通过分层结构方程模型,将Group作为分组变量,ID作为聚类变量,同时拟合各组中介模型并检验组间效应差异。

代码示例(以Mediator1为例,可扩展多中介)

# 安装加载依赖包
if (!require(lavaan)) install.packages("lavaan")
if (!require(dplyr)) install.packages("dplyr")
library(lavaan)
library(dplyr)

# 定义多层中介模型
group_med_model <- '
  # 中介路径定义
  Mediator1 ~ a*IV + Covariate1 + Covariate2
  DV ~ b*Mediator1 + c*IV + Covariate1 + Covariate2
  
  # 计算总效应与间接效应
  total_eff := c + a*b
  indirect_eff := a*b
  
  # 允许路径系数随Group变化(检验组间差异)
  a ~~ 0*Group
  b ~~ 0*Group
  c ~~ 0*Group
'

# 拟合模型,指定ID为聚类变量,Group为分组变量
fit_group <- sem(group_med_model, data = DF, cluster = "ID", group = "Group")

# 查看模型整体结果
summary(fit_group, fit.measures = TRUE, ci = TRUE)

# 提取各组中介效应并汇总
group_eff_summary <- parameterEstimates(fit_group) %>%
  filter(label %in% c("indirect_eff", "total_eff")) %>%
  select(group, label, est, se, ci.lower, ci.upper)

print(group_eff_summary)

2. 组内产品间中介分析与汇总

实现思路

按Group分组,在每组内结合混合效应模型(控制ID随机效应),检验不同Product下的中介效应差异,通过mediation包实现效应的Bootstrap检验。

代码示例(以Mediator1为例)

# 安装加载依赖包
if (!require(lmerTest)) install.packages("lmerTest")
if (!require(mediation)) install.packages("mediation")
library(lmerTest)
library(mediation)
library(dplyr)

# 按Group循环分析,存储结果
product_med_results <- list()

for (g in unique(DF$Group)) {
  # 提取当前组数据
  group_subset <- DF %>% filter(Group == g)
  
  # 拟合中介变量模型(控制ID随机效应与Product固定效应)
  m_model <- lmer(Mediator1 ~ IV + Covariate1 + Covariate2 + Product + (1|ID), data = group_subset)
  # 拟合因变量模型(控制ID随机效应、Product固定效应与中介变量)
  dv_model <- lmer(DV ~ IV + Mediator1 + Covariate1 + Covariate2 + Product + (1|ID), data = group_subset)
  
  # 检验Product分组下的中介效应(Bootstrap抽样1000次)
  med_fit <- mediate(m_model, dv_model, treat = "IV", mediator = "Mediator1", sims = 1000, group = "Product")
  
  product_med_results[[g]] <- med_fit
  cat("\n===== 分组", g, "产品间中介效应结果 =====\n")
  print(summary(med_fit))
}

# 汇总所有组的产品中介效应
product_eff_summary <- do.call(rbind, lapply(names(product_med_results), function(g) {
  eff_data <- product_med_results[[g]]$d1
  data.frame(
    Group = g,
    Product = rownames(eff_data),
    indirect_eff = eff_data$Estimate,
    se = eff_data$SE,
    ci_lower = eff_data$`2.5%`,
    ci_upper = eff_data$`97.5%`
  )
}))

print(product_eff_summary)

补充说明

  • 多中介变量扩展:若需同时检验Mediator1-Mediator4,可在lavaan模型中添加多条中介路径,或在mediation循环中遍历每个中介变量。
  • 模型调整:可根据需求修改模型(如添加Product随机效应、调整控制变量)。
  • 效应显著性:Bootstrap置信区间不含0则说明中介效应显著。

内容的提问来源于stack exchange,提问作者Smuts94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:05:55