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

如何在R语言中介模型中纳入时间与个体固定效应?

面板数据中介模型加入个体与时间固定效应的Lavaan实现

核心思路

在Lavaan中实现面板固定效应(个体+时间),核心是控制个体和时间层面的截距差异,常用两种可互换的方式:

  • 纳入个体(id)和时间(year)的虚拟变量(直观直接)
  • 组均值中心化(适用于个体数量较多的场景,等价于个体固定效应)

方法一:直接纳入虚拟变量(小样本个体首选)

步骤1:数据预处理

将id和year转换为因子类型,让Lavaan自动生成虚拟变量实现固定效应控制:

library(lavaan)
library(tibble)

set.seed(123)

n_obs <- 5
n_ids <- 10

dat <- tibble(
  id = factor(rep(1:n_ids, each = n_obs)), # 转换为因子,生成个体虚拟变量
  year = factor(rep(2010:2014, times = n_ids)), # 转换为因子,生成时间虚拟变量
  y = rnorm(n_obs * n_ids, mean = 100, sd = 10),
  m1 = rnorm(n_obs * n_ids, mean = 50, sd = 5),
  m2 = rnorm(n_obs * n_ids, mean = 30, sd = 3),
  m3 = rnorm(n_obs * n_ids, mean = 20, sd = 2),
  iv = rnorm(n_obs * n_ids, mean = 1000, sd = 53),
  weight = runif(n_obs * n_ids, min = 0.5, max = 2)
)

步骤2:修正中介模型(加入固定效应+补全m3路径)

将id和year作为协变量加入所有内生变量的回归方程,同时补全你提到的第三个中介变量m3的路径:

mediation_model <- '
  # 中介变量方程:控制个体+时间固定效应
  m1 ~ a * iv + id + year
  m2 ~ d * iv + id + year
  m3 ~ f * iv + id + year

  # 因变量方程:控制个体+时间固定效应,纳入所有中介变量
  y  ~ c * iv + b * m1 + e * m2 + g * m3 + id + year

  # 间接效应计算
  indirect1 := a * b 
  indirect2 := d * e
  indirect3 := f * g
  total_indirect := indirect1 + indirect2 + indirect3

  # 总效应与直接效应
  total := c + total_indirect
  direct := c
'

步骤3:拟合并查看结果

支持加权拟合(使用你的weight变量):

mediation_results <- sem(mediation_model, data = dat, weights = "weight")
summary(mediation_results, fit.measures = TRUE, standardized = TRUE)

方法二:组均值中心化(大样本个体首选)

当个体数量较多时,大量虚拟变量会拖慢拟合速度,可采用组内中心化去除个体层面的均值差异(等价于控制个体固定效应),再结合时间虚拟变量控制时间固定效应:

library(dplyr)

# 按id进行组内中心化
dat_centered <- dat %>%
  group_by(id) %>%
  mutate(
    iv_c = iv - mean(iv),
    m1_c = m1 - mean(m1),
    m2_c = m2 - mean(m2),
    m3_c = m3 - mean(m3),
    y_c = y - mean(y)
  ) %>%
  ungroup()

# 中心化后的中介模型(控制时间固定效应)
mediation_model_centered <- '
  m1_c ~ a * iv_c + year
  m2_c ~ d * iv_c + year
  m3_c ~ f * iv_c + year
  y_c  ~ c * iv_c + b * m1_c + e * m2_c + g * m3_c + year

  indirect1 := a * b 
  indirect2 := d * e
  indirect3 := f * g
  total_indirect := indirect1 + indirect2 + indirect3
  total := c + total_indirect
  direct := c
'

# 拟合模型
mediation_results_centered <- sem(mediation_model_centered, data = dat_centered, weights = "weight")
summary(mediation_results_centered, fit.measures = TRUE, standardized = TRUE)

关键说明

  • 两种方法的核心都是排除个体和时间层面的非观测异质性,结果应高度一致
  • 若不需要加权,可移除weights = "weight"参数
  • 可使用semPaths(mediation_results)绘制模型路径图(需加载semPlot包)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:15:00