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

R语言:为双重差分模型高效循环计算多指标

高效批量运行双重差分(DID)模型的方法

嘿,我明白你现在手动复制粘贴跑不同指标的DID模型有多麻烦——尤其是指标多的时候,既费时间又容易出错。下面给你几个R里高效批量处理的方法,帮你摆脱重复代码的困扰:

方法1:基础R的lapply批量生成模型

先把你要分析的所有因变量列出来,然后用循环批量拟合模型,完全不需要复制粘贴:

# 第一步:定义需要分析的指标列表
outcome_vars <- c("miles_driven", "hours_worked")

# 第二步:批量生成DID模型
did_models <- lapply(outcome_vars, function(var) {
  # 动态构建DID公式:因变量 ~ 处理组 + 时间 + 交互项
  did_formula <- as.formula(paste(var, "~ Group + Time + Group:Time"))
  # 拟合线性模型
  lm(did_formula, data = df)
})

# 给模型列表命名,方便后续调用(比如查看某指标的模型结果)
names(did_models) <- outcome_vars

之后你想查看某个指标的模型结果,直接用summary(did_models$miles_driven)或者summary(did_models$hours_worked)就行,非常便捷。

方法2:用tidyverse+purrr+broom一键整理模型结果

如果需要把所有模型的系数、p值、置信区间整理成结构化的数据框(方便后续分析或可视化),用tidyverse生态的工具会更顺手:

首先加载必要的包:

library(tidyverse)
library(broom)

然后批量拟合模型并提取结果:

# 批量拟合+整理结果
did_summary <- tibble(outcome = outcome_vars) %>%
  mutate(
    # 批量拟合每个指标的DID模型
    model = map(outcome, ~lm(as.formula(paste(.x, "~ Group + Time + Group:Time")), data = df)),
    # 提取模型的系数、p值、置信区间等信息
    tidied_results = map(model, tidy, conf.int = TRUE)
  ) %>%
  # 把嵌套的结果展开成数据框
  unnest(tidied_results)

# 重点查看DID核心交互项的结果(Group:Time)
did_summary %>%
  filter(term == "Group:Time") %>%
  select(outcome, estimate, p.value, conf.low, conf.high)

运行完你会得到一个清晰的数据框,直接展示所有指标的DID估计值、显著性和置信区间,省去了逐个查看模型的麻烦。

额外小技巧

  • 如果需要加入控制变量,只需要修改公式即可,比如:
    did_formula <- as.formula(paste(var, "~ Group + Time + Group:Time + age + gender + income"))
    
    批量处理逻辑完全不变。
  • 如果需要稳健标准误,可以用estimatr包的lm_robust替代lm,方法和上面完全一致,只需要替换函数名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:23