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
相关产品推荐
相关产品推荐

