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

如何从R语言did包输出中提取精确p值与自由度?

从did包的多期多组DiD结果中提取精确p值与自由度

在使用did包进行多期多组DiD分析时,默认summary()输出仅标识p值是否小于0.05,但可以通过提取结果对象的核心统计量自行计算精确p值,具体操作如下:

1. 提取核心统计量

aggte()生成的结果对象中,已经包含计算p值所需的关键数据:

  • group_effects$att:各组的ATT估计值
  • group_effects$se:对应估计值的标准误

2. 计算双侧精确p值

did包默认采用正态近似构建置信区间,因此可以基于正态分布计算双侧p值,公式为:
p值 = 2 * pnorm(-|统计量|),其中统计量 = ATT估计值 / 标准误

代码示例(基于你的复现场景)

library(did)
data("mpdta")

# 估计组水平ATT
out <- att_gt(
  yname = "lemp",
  gname = "first.treat",
  idname = "countyreal",
  tname = "year",
  xformla = ~ 1,
  data = mpdta,
  est_method = "reg"
)

group_effects <- aggte(out, type = "group")

# 提取统计量并计算p值
att_vals <- group_effects$att
se_vals <- group_effects$se
p_vals <- 2 * pnorm(-abs(att_vals / se_vals))

# 整理为可读表格
result_table <- data.frame(
  处理组 = group_effects$group,
  ATT估计值 = round(att_vals, 4),
  标准误 = round(se_vals, 4),
  精确p值 = round(p_vals, 4)
)

print(result_table)

关于自由度的说明

如果需要提取自由度:

  • 当使用est_method="reg"时,att_gt()的输出out$models包含每个处理组对应的回归模型,可通过循环提取残差自由度:
    # 提取各组回归模型的残差自由度
    df_list <- lapply(out$models, function(m) m$df.residual)
    
  • 不过did包默认使用正态近似推断,样本量较大时该近似结果足够可靠,无需额外用t分布调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:22:18