He observado que en algunas de mis regresiones de estudios de sucesos, dependiendo del paquete de R que utilice obtengo resultados diferentes en cuanto a la violación de las tendencias previas paralelas. En concreto, realicé una regresión de estudio de sucesos utilizando el paquete "fixest", que indicaba que los grupos de tratamiento y control no seguían tendencias paralelas antes del tratamiento, mientras que el paquete "did" por Callaway y Sant'Anna mostró que ambos grupos seguían la misma tendencia antes del tratamiento, es decir, que los coeficientes se situaban en torno a cero. Todas las unidades tratadas lo fueron al mismo tiempo, por lo que no pudo deberse a efectos escalonados del tratamiento.
A continuación, generé otros datos para ver si este problema se limitaba a mi conjunto de datos. Generé un conjunto de datos de observaciones "tratadas" y "no tratadas" a lo largo de 10 periodos, con 100 observaciones por grupo (2000 observaciones en total), donde las observaciones del grupo no tratado se sitúan en torno a cero en cada periodo, pero las observaciones del grupo tratado crecen linealmente de -5 a 5 a lo largo de los 10 periodos (véase el gráfico).
Por lo tanto, cabría esperar que los coeficientes de la regresión del estudio de eventos también indicaran una violación de las tendencias paralelas, sin cambio de tendencia en el momento del tratamiento (5). De hecho, el paquete fixest muestra exactamente esto:
Sin embargo, cuando ejecuto la regresión en el paquete did, obtengo lo siguiente:
donde por algunas razones las pre-tendencias son simplemente filtradas. ¿Alguien tiene alguna idea de lo que está pasando aquí? Traté de averiguar a partir de la publicación pero no he encontrado nada que pueda aplicarse a esta situación. Aquí está el código R para reproducir el ejemplo:
library(did)
library(ggplot2)
## Generate data
period <- rep(1:10, 200)
id <- rep(1:200, each = 10)
group <- rep(0:1, each = 1000)
values0 <- 0 + rnorm(1000, mean = 0, sd = 1)
values1 <- period[1001:2000] - 5 + rnorm(1000, mean = 0, sd = 1)
values <- c(values0, values1)
first_treated <- rep(c(0,6), each = 1000)
df <- data.frame(cbind(period, id, group, values, first_treated))
## Plot data
ggplot(df, aes(period, values, colour = group)) +
geom_point(alpha = 0.3) +
theme_classic()
## Run fixest estimation
iplot(feols(values ~ i(period, group, ref = c(5)),
data=df))
## Run did estimation
did_test <- att_gt(yname = "values",
idname = "id",
tname = "period",
gname = "first_treated",
data = df)
did_test <- aggte(did_test, type = "dynamic", na.rm = TRUE)
ggdid(did_test)