did_multiplegt_dyn (Chaisemartin和D’Haultfœuille 2024)

目录

  1. 简介
  2. 安装和选项
  3. 数据集
  4. 测试包

简介

DIDmultiplegtDYN包实现了de Chaisemartin和D’Haultfœuille (2024) (以下简称dCDH24)提出的估计量。与其前身DIDmultiplegt一样,dCDH24的关键优势在于命令中允许的广泛处理设计范围。它可以与二元且吸收的(交错)处理一起使用,但也可以与非二元处理(离散或连续)一起使用,这种处理可以多次增加或减少,即使滞后处理影响结果,并且即使当前和滞后处理在空间上和/或时间上具有异质效应。

DIDmultiplegt不同,dCDH24不依赖自助复制来计算标准误。默认情况下,该命令计算解析标准误,这大大减少了运行时间。与其前身的另一个不同之处在于与R语言的改进集成。该命令现在提供了summaryprint的自定义方法。由于输出是具有did_multiplegt_dyn类的嵌套列表,该命令允许进一步的方法分派。最后,命令输出始终包括事件研究图作为ggplot对象,这意味着用户可以使用ggplot2库提供的全部工具来自定义事件研究图的显示。

相对于DIDmultiplegt,dCDH24配备了大量新的估计和估计后选项:

  • normalized: 估计每单位处理的动态效应;
  • predict_het: 内置处理效应异质性分析;
  • designdate_first_switch: 估计后选项,用于分析处理的设计和时机;
  • byby_path: 在组级变量或处理路径内估计动态效应;
  • trends_lin: 内置组特定线性趋势;
  • only_never_switchers: 将dCDH24估计量限制为仅比较转换者和从不转换者。

安装和选项

该包可以从CRAN安装

install.packages("DIDmultiplegtDYN") # 安装(只需要运行一次或在更新时运行)
library("DIDmultiplegtDYN") # 将包加载到内存中(每个新会话都需要)

该包的主要工作函数是did_multiplegt_dyn(),其最简单的形式如下:

did_multiplegt_dyn(df, outcome, group, time, treatment, ...)

其中

变量 描述
df 数据集
outcome 结果变量
group 组变量
time 时间变量
treatment 处理变量(任何虚拟变量、离散或连续数值变量)
额外参数

再次,did_multiplegt_dyn()的一个关键优点是它允许非常灵活的估计策略和要求。有各种额外的函数参数旨在支持或调用这些灵活性。我们在上面已经介绍了一些最重要的参数,但你可以查看帮助文件 (?did_multiplegt_dyn) 获取更详细的信息。

数据集

为了演示该包的实际应用,我们将使用我们之前创建的虚假数据集。这是数据外观的提醒。

head(dat)
#>   time id        y rel_time treat first_treat
#> 1    1  1 2.158289      -11 FALSE          12
#> 2    2  1 2.498052      -10 FALSE          12
#> 3    3  1 3.034077       -9 FALSE          12
#> 4    4  1 4.886266       -8 FALSE          12
#> 5    5  1 7.085950       -7 FALSE          12
#> 6    6  1 5.788352       -6 FALSE          12

或者以图形形式显示。

测试包

如果还没有加载包,请记得加载。

library(DIDmultiplegtDYN)

让我们尝试基本的did_multiplegt_dyn()命令:

did_multiplegt_dyn(df = dat, outcome = "y", group = "id", time = "time", treatment = "treat")

#' ----------------------------------------------------------------------
#'        处理效应估计:事件研究效应
#' ----------------------------------------------------------------------
#'  估计量        SE     LB CI     UB CI         N 转换者
#'  -0.45717   0.44252  -1.32450   0.41015        83        26

#' ----------------------------------------------------------------------
#'     每单位处理的平均累积(总)效应
#' ----------------------------------------------------------------------
#'  估计量        SE     LB CI     UB CI         N 转换者
#'  -0.45717   0.44252  -1.32450   0.41015        83        26
#' 累积处理效应所跨越的平均时间段数:1.0000


#' 该包的开发由欧盟资助。
#' ERC REALLYCREDIBLE - GA N. 101043899

一次性运行did_multiplegt_dyn计算处理转换后第一个时期的动态效应。现在让我们尝试具有更多动态效应、安慰剂和组级聚类的命令。

mod_dCDH24 = did_multiplegt_dyn(
  dat, 'y', 'id', 'time', 'treat', # 原始回归参数
  effects   = 10,                  # 后处理期数
  placebo   = 10,                  # 预处理期数
  cluster   = 'id'                 # 聚类SE的变量
  )

#' ----------------------------------------------------------------------
#'        处理效应估计:事件研究效应
#' ----------------------------------------------------------------------
#'              估计量 SE      LB CI    UB CI    N  转换者
#' Effect_1     -0.45717 0.44252 -1.32450 0.41015  83 26       
#' Effect_2     6.01241  0.41452 5.19997  6.82485  83 26       
#' Effect_3     12.15926 0.37512 11.42404 12.89448 83 26       
#' Effect_4     17.79738 0.38663 17.03960 18.55516 83 26       
#' Effect_5     23.88198 0.31469 23.26520 24.49877 77 26       
#' Effect_6     29.81641 0.42263 28.98808 30.64474 77 26
#' Effect_7     36.41290 0.47205 35.48770 37.33810 77 26
#' Effect_8     42.90801 0.28881 42.34196 43.47407 77 26
#' Effect_9     48.40043 0.50253 47.41549 49.38537 67 26
#' Effect_10    54.32903 0.40159 53.54193 55.11614 67 26

#' ----------------------------------------------------------------------
#'     每单位处理的平均累积(总)效应
#' ----------------------------------------------------------------------
#'  估计量        SE     LB CI     UB CI         N 转换者
#'  27.12607   0.32014  26.49860  27.75353       642       260
#' 累积处理效应所跨越的平均时间段数:5.5000

#' ----------------------------------------------------------------------
#'      测试平行趋势和无预期假设
#' ----------------------------------------------------------------------
#'              估计量 SE      LB CI    UB CI   N  转换者
#' Placebo_1    -0.20543 0.53571 -1.25541 0.84456 83 26
#' Placebo_2    -0.08358 0.36033 -0.78982 0.62266 83 26
#' Placebo_3    -0.43627 0.38175 -1.18449 0.31195 83 26
#' Placebo_4    -0.23315 0.43870 -1.09300 0.62669 83 26
#' Placebo_5    -0.88144 0.50670 -1.87455 0.11167 77 26
#' Placebo_6    0.07470  0.36160 -0.63401 0.78342 77 26
#' Placebo_7    -0.48019 0.42165 -1.30661 0.34624 77 26
#' Placebo_8    -0.35821 0.44594 -1.23225 0.51582 77 26
#' Placebo_9    0.06761  0.56032 -1.03060 1.16582 67 26
#' Placebo_10   0.06228  0.44232 -0.80465 0.92920 67 26

#' 安慰剂联合零假设检验:p值 = 0.1132

#' 该包的开发由欧盟资助。
#' ERC REALLYCREDIBLE - GA N. 101043899

注意,第一个效应的标准误相对于前一个例子没有改变。这是由于程序计算的标准误已经默认在组级聚类。输出显示动态效应、安慰剂和平均总效应(每单位处理)的点估计、标准误、置信区间和样本大小。默认情况下,printsummary显示还包括安慰剂联合显著性检验的p值和第一个转换后落入动态效应估计的时间段平均数。

让我们检查分配的对象。

print(class(mod_dCDH24))
# [1] "did_multiplegt_dyn"
print(names(mod_dCDH24))
# [1] "args"    "results" "coef"    "plot"

在这个基本设置中,我们可以检索:

  1. 命令调用的参数(args)
  2. 标量/矩阵形式的命令结果(results)
  3. honestdid更兼容的格式的命令结果(coef)
  4. ggplot事件研究图(plot)

除非指定了graph_off = TRUE参数,否则图将自动由命令显示。无论如何,图对象将存储在输出中,并且可以在之后检索。 让我们看看图。

print(mod_dCDH24$plot)

由于上图是一个ggplot对象,可以使用ggplot2库的所有工具来添加自定义层。例如, 我们可以仅用几行代码重现(cs)did图的风格:

# 一个图表示例来说服怀疑的did用户
library(ggplot2) # 加载ggplot2库
plt <- mod_dCDH24$plot # 将图分配给新对象(避免每次都写完整路径)

plt$layers[[1]] <- NULL # 删除线
plt$layers[[1]]$aes_params$colour <- c(rep("#00BFC4", 10), rep("#F7736B", 10)) # 更改CI颜色
plt$layers[[2]]$aes_params$colour <- c(rep("#00BFC4", 11), rep("#F7736B", 10)) # 更改散点颜色
plt <- plt + geom_hline(yintercept = 0, linetype = "dashed", color = "black") +  # 添加参考线
    theme(plot.title = element_text(hjust = 0.5), panel.grid.major = element_blank(), # 清理背景
        panel.grid.minor = element_blank(), panel.background = element_blank(), 
        axis.line = element_line(colour = "black")
    ) + scale_x_continuous(breaks=seq(-10,10,1)) +  # 调整x轴刻度
    ylab(" ") + ggtitle("DIDmultiplegtDYN") # 添加标题
print(plt) 

结果如下: