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

在R中检验不同回归模型的treat系数是否存在显著差异

检验不同回归模型系数相等性的实现方法

针对你需要检验treat对Y1、Y2的效应是否一致的需求,以下提供两种无需堆叠因变量的事后检验方法:

方法一:手动构造Wald检验(考虑残差相关性)

由于两个模型基于同一观测样本,Y1和Y2的残差大概率存在相关性,必须纳入联合方差计算,步骤如下:

  1. 提取核心统计量并计算协方差
# 提取treat的系数
coef_Y1 <- coef(twfe_Y1)["treat::1"]
coef_Y2 <- coef(twfe_Y2)["treat::1"]

# 提取模型残差
resid_Y1 <- residuals(twfe_Y1)
resid_Y2 <- residuals(twfe_Y2)

# 计算聚类层面的残差协方差(与原模型聚类标准误逻辑一致)
library(dplyr)
cluster_cov <- dt %>%
  group_by(group) %>%
  summarise(cov = mean(resid_Y1 * resid_Y2)) %>%
  pull(cov) %>%
  mean()

# 提取两个模型treat系数的方差
var_Y1 <- vcov(twfe_Y1)["treat::1", "treat::1"]
var_Y2 <- vcov(twfe_Y2)["treat::1", "treat::1"]

# 计算系数差的方差:var(Y1-Y2) = var(Y1) + var(Y2) - 2*cov(Y1,Y2)
var_diff <- var_Y1 + var_Y2 - 2 * cluster_cov
  1. 计算Wald统计量与p值
# 计算系数差值
coef_diff <- coef_Y1 - coef_Y2

# 构造Wald统计量(服从自由度1的卡方分布)
wald_stat <- (coef_diff)^2 / var_diff

# 计算对应的p值
p_value <- 1 - pchisq(wald_stat, df = 1)

# 输出结果
cat(sprintf("treat效应差值: %.4f\nWald统计量: %.4f\np值: %.4f\n", coef_diff, wald_stat, p_value))

方法二:使用modelsummary包的联合假设检验

modelsummary支持直接对多模型系数做假设检验,无需手动计算协方差:

  1. 安装并加载包
install.packages("modelsummary")
library(modelsummary)
  1. 执行假设检验
# 定义检验假设:treat对Y1的效应 = treat对Y2的效应
hypotheses <- c("treat::1 (twfe_Y1) = treat::1 (twfe_Y2)")

# 执行检验,指定与原模型一致的聚类标准误
model_test <- hypothesis_test(list(twfe_Y1, twfe_Y2), 
                              hypotheses = hypotheses,
                              vcov = ~group)

# 输出检验结果
print(model_test)

关键注意事项

  • 必须考虑残差相关性:忽略Y1、Y2残差的协方差会导致标准误估计偏误,进而影响检验的准确性。
  • 适配其他倍分法包:如果使用did等其他包,只需替换提取系数、残差的代码,核心检验逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:49:51