Inferencia Causal
Centro de Investigación y Docencia Económicas
Maestría en Economía
Diferencia en diferencias especifica las condiciones bajo las cuales es posible identificar el efecto del tratamiento al comparar unidades tratadas y no tratadas, cuando se dispone de información antes y después de la intervención
Esta estrategia es ampliamente utilizada para analizar el efecto de leyes y políticas que afectan a un grupo de individuos al mismo tiempo
Además, constituye el fundamento para otro de los métodos en donde la investigación actual es muy activa, el control sintético
El supuesto fundamental es el de tendencias paralelas, que significa que podemos aprender sobre la trayectoria que hubieran seguido las unidades tratadas a partir de la trayectoria que siguieron las unidades no tratadas
DID se popularizó en la década de los 2000 y ha tenido un fuerte segundo aire en los 2020 para el análisis de tratamientos con adopción escalonada

Angrist & Pischke (2014) describen lo sucedido con el sector bancario en Mississippi durante la Gran Depresión
En EUA, la FED tiene 12 bancos regionales y cada uno tiene autonomía para tomar ciertas decisiones de política monetaria
En particular, Mississippi tiene una parte del estado bajo el mando del distrito 6 (Atlanta) y la otra parte en el distrito 8 (San Luis)

\[ D= \begin{cases} 1\quad\quad \text{proveer liquidez adicional (distrito 6)} \\ 0\quad\quad \text{dar igual o menos liquidez (distrito 8)} \\ \end{cases} \]
Si estamos interesados en la cantidad de bancos que sobrevivieron y decir algo sobre qué política es más efectiva, ¿qué podemos hacer?
Una primera respuesta sería contar la diferencia después de la crisis:
| Distrito 8 | Distrito 6 | Diferencia |
|---|---|---|
| \(D=0\) | \(D=1\) | |
| 132 bancos | 121 bancos | -11 bancos |
Pareciera que la política de proveer liquidez, easy money, causó que quebraran más bancos
Sin embargo, esta comparación claramente ignora las condiciones iniciales
banks <- read_csv("banks_mm.csv",
locale = locale(encoding = "latin1"))
banks <- banks |>
filter(month(date) == 7L, mday(date) == 1L) |>
mutate(year = year(date)) |>
select(year, bib6, bib8) |>
pivot_longer(c(bib6, bib8), names_to = "distrito",
values_to = "banks") |>
arrange(distrito, year) |>
mutate(treatment = ifelse(distrito == "bib6", 1, 0),
post = ifelse(year >= 1931, 1, 0))
banks |>
mutate(banks = ifelse(year == 1930 | year == 1931,
banks, NA)) |>
filter(year <= 1932) |>
ggplot(aes(year, banks, color = distrito)) +
geom_line(linewidth = 2) +
scale_y_continuous(limits = c(100, 180)) +
labs(x = "Año", y = "Bancos abiertos",
color = "Distrito")
\[m_{8}=\frac{Y_{8,post}-Y_{8,pre}}{X_{8,post}-X_{8,pre}}=\frac{132-165}{1931-1930}=-33\]
donde \(X_{d,pre}\) y \(X_{d,post}\) son los años
\[m_{6}=\frac{\tilde{Y}_{6,post}-Y_{6,pre}}{X_{6,post}-X_{6,pre}}=\frac{\tilde{Y}_{6,post}-135}{1931-1930}=-33\]
banks_cf <- banks |>
mutate(banks = ifelse(year == 1930 | year == 1931,
banks, NA)) |>
filter(year <= 1932) |>
mutate(tipo = "observado")
d6_cf <- banks_cf |>
filter(distrito == "bib6") |>
mutate(banks = ifelse(year == 1931, 102, banks),
tipo = "contrafactual")
banks_cf <- rbind(banks_cf, d6_cf)
banks_cf |>
ggplot(aes(year, banks,
color = distrito, linetype = tipo)) +
geom_line(linewidth = 2) +
scale_linetype_manual(values = c("dashed", "solid")) +
scale_y_continuous(limits = c(100, 180)) +
labs(x = "Año", y = "Bancos abiertos",
color = "Distrito", linetype = "Tipo")
\[ \begin{aligned} \hat{\delta}_{DID}&=(Y_{6,post}-Y_{6,pre})-(Y_{8,post}-Y_{8,pre}) \\ &=(Y_{6,1931}-Y_{6,1930})-(Y_{8,1931}-Y_{8,1930}) \\ &=(121-135)-(132-165) \\ &=-14+33 = 19 \end{aligned} \]
El estimador de DID toma en cuenta las diferencias iniciales. El distrito 8 ya tenía más bancos abiertos que el 6 antes de la crisis
DID construye un contrafactual para las unidades tratadas usando la pendiente de las no tratadas
Definiciones
\(t\in\{1,2\}\) periodos
$D_i=
\[\begin{cases} 1\quad\quad \text{si $i$ es tratado} \\ 0\quad\quad \text{si $i$ no es tratado} \\ \end{cases}\]$
El tratamiento ocurre entre los periodos 1 y 2
\(Y_{it}\) es la variable de resultados observada
Datos en panel con \(i=1,\ldots,N\) unidades (puede adaptarse a secciones cruzadas repetidas)
\(Y_{it}(0)\) y \(Y_{it}(1)\) son los resultados potenciales bajo cada valor del tratamiento
Estimamos el ATT (average treatment effect on the treated): \[ATT=E(Y_2(1)-Y_2(0)|D=1)\]
\(Y_2(0)\) no es observado para el grupo con \(D=1\)
Callaway & Sant’Anna (2021) y Roth, Sant’Anna, Bilinski & Poe (2023) usan ATT mientras que CA usa ATET
Supuesto 1: tendencias paralelas
\[E(Y_2(0) - Y_1(0) | D = 1) = E(Y_2(0) - Y_1(0) | D = 0)\]
Supuesto 2: no anticipación
\[Y_{i1}(0) = Y_{i1}(1) \quad \forall \quad \text{$i$ con $D_i = 1$}\]
Supuesto 3: SUTVA
\[E(Y_2(0)|D=1)=E(Y_1(0)|D=1)+E(Y_2(0)-Y_1(0)|D=0)\]
\[ \begin{aligned} E(Y_2(0)|D=1)&=E(Y_1(1)|D=1)+E(Y_2(0)-Y_1(0)|D=0) \\ &=E(Y_1|D=1)+E(Y_2-Y_1|D=0) \end{aligned} \]
\[ATT=\underbrace{E(Y_2-Y_1|D=1)}_{\text{cambio para } D=1}-\underbrace{E(Y_2-Y_1|D=0)}_{\text{cambio para } D=0}\]
\[ATT=\underbrace{(E(Y_2|D=1)-E(Y_2|D=0))}_{\text{diferencia entre grupos en $t=2$}}-\underbrace{(E(Y_1|D=1)-E(Y_1|D=0))}_{\text{diferencia entre grupos en $t=1$}}\]
Las ecuaciones anteriores expresan el \(ATT\) como una diferencia en diferencias de esperanzas poblacionales
Una forma natural de estimarlo es reemplazar las esperanzas por sus análogos muestrales. Siguiendo la primera expresión para el \(ATT\), podemos estimar:
\[\widehat{ATT}=(\bar{Y}_{t=2,D=1}-\bar{Y}_{t=1,D=1})-(\bar{Y}_{t=2,D=0}-\bar{Y}_{t=1,D=0})\]
donde \(\bar{Y}_{t=t',D=d}\) es la media muestral de \(Y\) para el grupo \(d\) en el periodo \(t'\)
La forma más común de implementar la estimación por DID es usando una regresión
Definimos \(POST_t=\mathbf{1}(t=2)\)
\[Y_{it}=\alpha+\beta D_i+\gamma POST_t+\delta_{DID}(D_i\times POST_t)+\varepsilon_{it}\]
| \(t=1\) | \(t=2\) | Diferencia | |
|---|---|---|---|
| \(D=0\) | \(\alpha\) | \(\alpha+\gamma\) | \(\gamma\) |
| \(D=1\) | \(\alpha+\beta\) | \(\alpha+\beta+\gamma+\delta_{DID}\) | \(\gamma+\delta_{DID}\) |
| Diferencia | \(\beta\) | \(\beta+\delta_{DID}\) | \(\delta_{DID}\) |
Lo que la regresión identifica
Si se cumplen los supuestos 1, 2 y 3, \(\delta_{DID}=ATT\)
La ventaja de usar regresión es que obtenemos errores estándar y podemos añadir covariables (con cuidado)
medias <- tibble(
t = rep(1:2, 3), Y = c(2, 3, 4, 7, 4, 5),
Grupo = rep(c("D=0", "D=1", "D=1 sin tratamiento"),
each = 2))
medias |>
ggplot(aes(t, Y, color = Grupo, linetype = Grupo)) +
geom_line(linewidth = 1.5) +
annotate("segment", x = 1, xend = 2.05,
y = 2, yend = 2, linetype = "dotted") +
annotate("segment", x = c(0.95, 2.05, 2.05),
xend = c(0.95, 2.05, 2.05),
y = c(2, 2, 5), yend = c(4, 3, 7),
arrow = arrow(ends = "both",
length = unit(0.1, "in"))) +
annotate("text", x = c(1, 0.89, 2.13, 2.18),
y = c(1.7, 3, 2.5, 6), parse = TRUE, size = 6,
label = c("alpha", "beta", "gamma",
"delta[DID]")) +
scale_color_manual(values = c("grey40", "darkred",
"darkred")) +
scale_linetype_manual(values = c(1, 1, 2)) +
scale_x_continuous(breaks = 1:2,
limits = c(0.85, 2.3)) +
labs(x = "Periodo", y = "E(Y)") +
theme(legend.position = "bottom")
Como en el ejemplo de las corridas bancarias, donde tenemos datos sobre el número de bancos en cada distrito en cada año (1929-1934), podemos tener varias observaciones pre y post intervención
También podemos tener múltiples unidades en los grupos tratado y no tratado
Podemos generalizar la regresión sustituyendo las dummies por efectos fijos:
\[Y_{it}=\alpha_i+\lambda_t+\delta_{DID}(D_i\times POST_t)+\varepsilon_{it}\]
\(\alpha_i\): efectos fijos individuales (sustituyen a \(\alpha+\beta D_i\)), diferencias entre unidades que no cambian en el tiempo
\(\lambda_t\): efectos fijos de periodo (sustituyen a \(\gamma POST_t\)), choques comunes a todas las unidades
\(D_i\times POST_t\): término de interacción, con \(POST_t=\mathbf{1}(t\geq t_0)\) y \(t_0\) el primer periodo tratado
\(\delta_{DID}\) es el efecto de tratamiento
Si hay varios puntos pre intervención, el supuesto de tendencias paralelas para ese subperiodo puede evaluarse empíricamente
Usemos los datos del archivo banks_mm.csv que se utilizan en MM
Es una forma muy básica de datos en panel: cada fila representa un distrito en un periodo de tiempo
Podemos identificar si cada fila pertenece a un distrito tratado o no o a un periodo posterior al tratamiento o no
| year | distrito | banks | treatment | post |
|---|---|---|---|---|
| 1929 | bib6 | 141 | 1 | 0 |
| 1930 | bib6 | 135 | 1 | 0 |
| 1931 | bib6 | 121 | 1 | 1 |
| 1932 | bib6 | 113 | 1 | 1 |
| 1933 | bib6 | 102 | 1 | 1 |
| 1934 | bib6 | 102 | 1 | 1 |
| 1929 | bib8 | 169 | 0 | 0 |
| 1930 | bib8 | 165 | 0 | 0 |
| 1931 | bib8 | 132 | 0 | 1 |
| 1932 | bib8 | 120 | 0 | 1 |
| 1933 | bib8 | 111 | 0 | 1 |
| 1934 | bib8 | 109 | 0 | 1 |
| Bancos abiertos | |
|---|---|
| * p < 0.1, ** p < 0.05, *** p < 0.01 | |
| treatment | -29.000** |
| (8.754) | |
| post | -49.000*** |
| (7.581) | |
| treatment:post | 20.500* |
| (10.721) | |
| (Intercept) | 167.000*** |
| (6.190) | |
| Num.Obs. | 12 |
\[\hat{\delta}_{DID}=(Y_{6,1931}-Y_{6,1930})-(Y_{8,1931}-Y_{8,1930})=19\]
did_bank2 <- lm(banks ~ treatment*post,
data = filter(banks,
year == 1930 | year == 1931))
# Cuatro observaciones y cuatro coeficientes:
# no hay errores estándar
modelsummary(list("Bancos abiertos" = did_bank2),
coef_map = c("treatment",
"post",
"treatment:post",
"(Intercept)"),
statistic = NULL,
gof_map = c("nobs"))| Bancos abiertos | |
|---|---|
| treatment | -30.000 |
| post | -33.000 |
| treatment:post | 19.000 |
| (Intercept) | 165.000 |
| Num.Obs. | 4 |
En estos ejemplos hipotéticos asumimos un tratamiento que ocurre en 1975
Este gráfico muestra un caso de tendencias paralelas
El estimador de DID captura correctamente el salto por encima de la tendencia en la unidad tratada

| Tasa de mortalidad | |
|---|---|
| δ (D × POST) | 7.000 |
| Num.Obs. | 32 |

En este segundo ejemplo, el supuesto de tendencias paralelas pre intervención se viola
La línea de la unidad tratada es más inclinada en todos los periodos y estimar esta relación por DID de nuevo atribuiría a la política la diferencia de tendencias que ya existía antes de la intervención

| Tasa de mortalidad | |
|---|---|
| δ (D × POST) | 8.000 |
| Num.Obs. | 32 |

En este tercer ejemplo hay tendencias que no son paralelas pre tratamiento
La pendiente para la unidad tratada es mayor que la de la no tratada en todos los periodos
Aquí DID detectaría un efecto, pero sobreestimado, pues al salto en la unidad tratada le sumaría la brecha que de todos modos se iba abriendo por tener una tendencia más inclinada que la de la no tratada
Una forma de separar ambas cosas es incluir tendencias específicas por unidad:
\[ \begin{aligned} Y_{it}=&\alpha+\beta D_i+\gamma POST_t + \theta t \\ &+ \rho (D_i\times t) + \delta_{DID}(D_i\times POST_t)+\varepsilon_{it} \end{aligned} \]

| DID simple | Con tendencias | |
|---|---|---|
| δ (D × POST) | 15.000 | 7.000 |
| ρ (D × t) | 1.000 | |
| θ (t) | 1.000 | |
| Num.Obs. | 32 | 32 |

Estamos nuevamente ante un diseño con posible presencia de errores agrupados
La dimensión relevante ahora es \(i\) pues es muy probable que haya características no observadas de las unidades que presentan correlación serial
Con suficientes unidades, podemos usar los resultados de la matriz de varianza agrupada, donde el nivel de agrupación es ahora \(i\)
En general, cuando trabajamos con datos en panel, lo relevante es que \(N\) sea lo suficientemente grande para usar teoría asintótica (y no solo \(NT\))
Bertrand, Duflo & Mullainathan (2004) analizan 92 artículos de DID y encuentran que la mayoría no reconoce el problema de correlación serial, por lo que subestiman los errores estándar estimados
En la actualidad, en el trabajo empírico se pone énfasis en la correcta estimación de la matriz de varianzas usando resultados asintóticos o bootstrap por bloques en el caso de tener pocos grupos o clusters
Card & Krueger (1994) estudian el efecto del incremento del salario mínimo (de 4.25 a 5.05 dólares por hora en abril de 1992)
El cambio ocurrió en Nueva Jersey y se emplea a la vecina Pensilvania como no tratada
Encuestaron a los mismos restaurantes de comida rápida en ambos estados antes y después del cambio al salario mínimo y compararon el empleo equivalente de tiempo completo (FTE)
| PA | NJ | NJ - PA | |
|---|---|---|---|
| FTE antes | 23.33 | 20.44 | -2.89 |
| (1.35) | (0.51) | (1.44) | |
| FTE después | 21.17 | 21.03 | -0.14 |
| (0.94) | (0.52) | (1.07) | |
| Cambio en FTE | -2.16 | 0.59 | 2.76 |
| (1.25) | (0.54) | (1.36) | |
| Nota: Errores estándar entre paréntesis. Fuente: adaptado de la tabla 3 de Card & Krueger (1994). |

DID es uno de esos campos tan activos en la investigación que cosas que pensábamos superadas o completamente estudiadas se han modificado en los últimos años
En esta sección mostramos el tratamiento que MHE y MM dan a los problemas de adopción escalonada
La adopción escalonada ocurre cuando existen varios periodos de tratamiento y algunas unidades van siendo tratadas de forma desfasada
En México, las leyes de despenalización del aborto o las que reconocen las uniones entre personas del mismo sexo son buenos ejemplos de tratamientos con adopción escalonada
Hasta los trabajos de Goodman-Bacon (2021), Borusyak, Jaravel & Spiess (2024) y de Chaisemartin & D’Haultfœuille (2020), los problemas con adopción escalonada se abordaban econométricamente de la misma forma que hemos descrito hasta ahora, conocida como efectos fijos bidireccionales o two-way fixed effects
Esta sección presenta el tipo de tratamiento que hoy ya consideramos inapropiado
Más adelante se presentan alternativas para los problemas de adopción escalonada
Diferencias en la edad legal para beber en Estados Unidos
¿Las restricciones a la edad mínima para comprar alcohol tienen un impacto en la mortalidad?
Alabama redujo la edad legal a 19 en 1975, mientras que, por ejemplo, Arkansas mantuvo la edad en 21
Podemos definir \(LEGAL_{st}\) como la proporción de individuos de entre 18 y 20 años autorizados para beber en el estado \(s\) y en el año \(t\)
\[Y_{st}=\alpha+\delta_{DID}LEGAL_{st}+\sum_k\beta_k STATE_{ks}+\sum_j \gamma_j YEAR_{jt}+\varepsilon_{st}\]
Los datos que acabamos de describir tienen una estructura de panel
La variable de panel es el estado \(s\) y la variable de tiempo es el año \(t\)
En nuestros datos, cada estado se encuentra presente en varios años, y para cada estado y año sabemos la mortalidad y la fracción de personas de 18 a 20 años que pueden beber
Efectos fijos \(STATE_{ks}\): diferencias entre estados que no cambian con el tiempo
Efectos año \(YEAR_{jt}\): factores que afectan a todas las unidades por igual en un momento del tiempo
La interpretación de los resultados es directa
El acceso a alcohol causa un incremento de casi 11 muertes adicionales por cada 100,000 habitantes y este efecto es estadísticamente significativo
No hay efectos donde no esperaríamos tenerlos
| Muertes por 100,000 habs.: | \(\hat{\delta}_{DID}\) |
|---|---|
| Todas | 10.80 |
| (4.59) | |
| Accidentes en vehículos | 7.59 |
| (2.50) | |
| Suicidio | 0.59 |
| (0.59) | |
| Causas internas | 1.33 |
| (1.59) |
Consideremos el siguiente problema de adopción escalonada

Cuatro posibles comparaciones \(2\times 2\)
\[\hat{\delta}_{jU}=\left(\bar{Y}_j^{POST(j)}-\bar{Y}_j^{PRE(j)}\right)-\left(\bar{Y}_U^{POST(j)}-\bar{Y}_U^{PRE(j)}\right),\;j\in\{k,l\}\]
\[\hat{\delta}^{k}_{kl}=\left(\bar{Y}_k^{MID(k,l)}-\bar{Y}_k^{PRE(k)}\right)-\left(\bar{Y}_l^{MID(k,l)}-\bar{Y}_l^{PRE(k)}\right)\]
\[\hat{\delta}^{l}_{kl}=\left(\bar{Y}_l^{POST(l)}-\bar{Y}_l^{MID(k,l)}\right)-\left(\bar{Y}_k^{POST(l)}-\bar{Y}_k^{MID(k,l)}\right)\]

Denotamos \(D_{it}=1\) cuando la unidad \(i\) es tratada en el periodo \(t\)
Por el teorema de Frisch-Waugh-Lovell sabemos que podemos purgar de efectos fijos a \(D_{it}\)
Es decir, podemos estimar por MCO, donde \(P_{\tau t}\) son dummies temporales y \(S_{ji}\) son dummies individuales:
\[D_{it}=\sum_{\tau}\gamma_\tau P_{\tau t}+\sum_{j}\pi_j S_{ji}+\varepsilon_{it}\]
Luego obtenemos \(\tilde{D}_{it}=D_{it}-\hat{D}_{it}\)
Y entonces el estimador de TWFE puede escribirse como el coeficiente de una regresión bivariada, donde \(\hat{C}(\cdot,\cdot)\) es la covarianza muestral y \(\hat{V}^D\) es la varianza de la variable de tratamiento purgada de efectos fijos:
\[\hat{\delta}_{DID}=\frac{\hat{C}(Y_{it}, \tilde{D}_{it})}{\hat{V}^D}\]
\[\hat{\delta}_{DID}=s_{kU}\hat{\delta}_{kU}+s_{lU}\hat{\delta}_{lU}+s_{kl}^k\hat{\delta}_{kl}^k+s_{kl}^l\hat{\delta}_{kl}^l\]
con los pesos dados por:
\[ \begin{aligned} s_{kU}&=\frac{(n_k+n_U)^2\hat{V}_{kU}^D}{\hat{V}^D} \\ s_{lU}&=\frac{(n_l+n_U)^2\hat{V}_{lU}^D}{\hat{V}^D} \\ s_{kl}^k&=\frac{[(n_k+n_l)(1-\bar{D}_l)]^2\hat{V}_{kl}^{D,k}}{\hat{V}^D} \\ s_{kl}^l&=\frac{[(n_k+n_l)\bar{D}_k]^2\hat{V}_{kl}^{D,l}}{\hat{V}^D} \end{aligned} \]
\[ \begin{aligned} s_{kU}&=\frac{(n_k+n_U)^2\hat{V}_{kU}^D}{\hat{V}^D}=\frac{(n_k+n_U)^2n_{kU}(1-n_{kU})\bar{D}_k(1-\bar{D}_k)}{\hat{V}^D} \\ s_{lU}&=\frac{(n_l+n_U)^2\hat{V}_{lU}^D}{\hat{V}^D}=\frac{(n_l+n_U)^2n_{lU}(1-n_{lU})\bar{D}_l(1-\bar{D}_l)}{\hat{V}^D} \\ s_{kl}^k&=\frac{[(n_k+n_l)(1-\bar{D}_l)]^2\hat{V}_{kl}^{D,k}}{\hat{V}^D}=\frac{[(n_k+n_l)(1-\bar{D}_l)]^2n_{kl}(1-n_{kl}) \frac{\bar{D}_k-\bar{D}_l}{1-\bar{D}_l}\frac{1-\bar{D}_k}{1-\bar{D}_l}}{\hat{V}^D} \\ s_{kl}^l&=\frac{[(n_k+n_l)\bar{D}_k]^2\hat{V}_{kl}^{D,l}}{\hat{V}^D}=\frac{[(n_k+n_l)\bar{D}_k]^2n_{kl}(1-n_{kl})\frac{\bar{D}_l}{\bar{D}_k}\frac{\bar{D}_k-\bar{D}_l}{\bar{D}_k}}{\hat{V}^D} \end{aligned} \]
Pongamos atención a uno de los pesos, \(s_{kU}\), para ver la intuición
Vimos que:
\[s_{kU}=\frac{(n_k+n_U)^2\hat{V}_{kU}^D}{\hat{V}^D}=\frac{(n_k+n_U)^2n_{kU}(1-n_{kU})\bar{D}_k(1-\bar{D}_k)}{\hat{V}^D}\]
\[\hat{V}_{kU}^D=n_{kU}(1-n_{kU})\bar{D}_k(1-\bar{D}_k)\]
Una primera cosa que entra en juego es \(n_{kU}=\frac{n_k}{n_k+n_U}\), el peso relativo de las unidades tratadas temprano en la submuestra
Recordemos que \(\bar{D}_k\) indica la fracción del tiempo del panel que las unidades \(k\) permanecen tratadas
Dado que \(D_{it}\) es binaria, \(\bar{D}_k(1-\bar{D}_k)\) es la varianza de \(D_{it}\) para las unidades \(k\)
\(\bar{D}_k(1-\bar{D}_k)\) alcanza un máximo de 0.25, es decir, la contribución se maximiza cuando el tratamiento ocurre lo más cercano a la mitad del panel (\(\bar{D}_k=0.5\))
En resumen, los pesos están dados por
\[\text{peso} = \frac{(\text{participación de la submuestra})^2(\text{varianza del tratamiento purgada de efectos fijos en la submuestra})}{\text{varianza del tratamiento purgada de efectos fijos en la muestra completa}}\]
Todos los grupos funcionan como controles (algunas veces)
Los pesos en cada comparación \(2 \times 2\) dependen del tamaño de la muestra usada para estimarlos y del tiempo que las unidades permanecen tratadas
El efecto estimado se modificaría solo por agregar más años al final del panel
Los términos que dominen pueden incluso cambiar el signo del efecto estimado
Goodman-Bacon (2021) muestra que, en general, usar TWFE solo recupera un efecto de tratamiento bajo supuestos muy fuertes, el más crucial, bajo efectos de tratamiento que no varían en el tiempo (no hay efectos dinámicos)
Hasta ahora hemos usado la descomposición de Goodman-Bacon para mostrar lo que hace el estimador de TWFE
Ahora mostraremos bajo qué condiciones el estimador de TWFE estima el ATT
Para ello escribimos cada comparación \(2\times 2\) en términos de resultados potenciales
\[ATT_k(W)\equiv\frac{1}{T_W}\sum_{t\in W}E\left[Y_{it}(k)-Y_{it}(0)\,|\,t_i=k\right]\]
En la práctica, \(W\) serán las ventanas posteriores al tratamiento que aparecen en las comparaciones \(2\times 2\) (\(POST(k)\), \(MID(k,l)\), \(POST(l)\))
El cambio en el resultado promedio sin tratamiento del grupo \(k\) entre dos ventanas \(W_0\) y \(W_1\):
\[\Delta Y_k^0(W_1,W_0)\equiv\frac{1}{T_{W_1}}\sum_{t\in W_1}E\left[Y_{it}(0)\,|\,t_i=k\right]-\frac{1}{T_{W_0}}\sum_{t\in W_0}E\left[Y_{it}(0)\,|\,t_i=k\right]\]
\[ \begin{aligned} \delta_{kU}&=ATT_k(POST(k))+\left[\Delta Y_k^0(POST(k),PRE(k))-\Delta Y_U^0(POST(k),PRE(k))\right]\\ \delta_{kl}^k&=ATT_k(MID(k,l))+\left[\Delta Y_k^0(MID(k,l),PRE(k))-\Delta Y_l^0(MID(k,l),PRE(k))\right]\\ \delta_{kl}^l&=ATT_l(POST(l))+\left[\Delta Y_l^0(POST(l),MID(k,l))-\Delta Y_k^0(POST(l),MID(k,l))\right]\\ &\quad-\left[ATT_k(POST(l))-ATT_k(MID(k,l))\right] \end{aligned} \]
En las dos primeras, las tendencias paralelas solo involucran resultados sin tratamiento
En la tercera, el control \(k\) ya está tratado. Además de tendencias paralelas, tenemos el efecto en \(k\) entre \(MID(k,l)\) y \(POST(l)\)
\[\underset{N\to\infty}{\text{plim}}\;\hat{\delta}_{DID}=VWATT+VWCT-\Delta ATT\]
Efecto de tratamiento promedio ponderado por varianza (variance-weighted ATT): es un promedio de ATTs por grupo y ventana con pesos positivos
Tendencias comunes ponderadas por varianza (variance-weighted common trends): es un promedio de las diferencias en tendencias contrafactuales usando los mismos pesos de la descomposición
Cambio en los efectos de tratamiento: es el cambio en los efectos de tratamiento para grupos que sirven como control ya tratados
\[\Delta ATT\equiv\sum_{k\neq U}\sum_{l>k}\sigma_{kl}^l\left[ATT_k(POST(l))-ATT_k(MID(k,l))\right]\]
Si se cumplen tendencias paralelas entre todos los grupos, \(VWCT=0\)
Si además los efectos no cambian en el tiempo, \(\Delta ATT=0\) y TWFE estima \(VWATT\) (un promedio ponderado de ATTs con pesos que dependen del tamaño de cada grupo y de cuándo fue tratado)
TWFE estima el ATT solo si el efecto es constante, \(ATT_k(W)=ATT\), en cuyo caso \(\Delta ATT=0\) y \(VWATT=ATT\)
Si los efectos cambian en el tiempo, \(\Delta ATT\neq 0\) y TWFE está sesgado respecto a \(VWATT\) aunque se cumplan tendencias paralelas (usar a los ya tratados como controles resta los cambios en sus efectos)
Goodman-Bacon (2021) no es el único trabajo que estudia las desventajas de usar TWFE con adopción escalonada
de Chaisemartin & D’Haultfœuille (2020) parten de los parámetros a estimar y sus resultados son más generales en cuanto a tipos de tratamiento
Borusyak, Jaravel & Spiess (2024) se enfocan en problemas con efectos dinámicos
Las conclusiones de los tres apuntan en la misma dirección, es mejor considerar otro tipo de estimadores para problemas escalonados y con tipos de tratamiento más complejos
El estimador de Callaway & Sant’Anna (2021) es una forma muy sencilla de explotar la información del desfase del tratamiento
Además permite una presentación muy intuitiva de los efectos de tratamiento
Esencialmente consiste en definir una serie de cohortes de unidades y estimar los impactos para cada cohorte
Luego podemos agregar los impactos por cohorte o presentar la dinámica de los impactos de forma gráfica
\(G_i=\min\{t:D_{it}=1\}\) es el primer periodo en que \(i\) es tratado
\(G_i=\infty\) indica que \(i\) nunca es tratado
\(\mathcal{G}\) es el conjunto de periodos en que alguna unidad empieza a ser tratada
\(t=1,\ldots,T\) son los periodos
\(D_{it}=1\;\forall\;t\geq G_i\) indica tratamiento absorbente
Definamos el efecto del tratamiento al periodo \(t\) para la cohorte que empezó a ser tratada en \(g\):
\[ATT(g,t)=E(Y_{t}(g)-Y_{t}(\infty)|G=g)\]
Supuesto 1. Tendencias paralelas en el contexto escalonado
\[E(Y_{t}(\infty)-Y_{t'}(\infty)|G=g)=E(Y_{t}(\infty)-Y_{t'}(\infty)|G=g')\quad\forall\;t\neq t',\; g\neq g'\]
Supuesto 1a. Tendencias paralelas en el contexto escalonado (débil)
Supuesto 2. No anticipación en el contexto escalonado
\[Y_{it}(g)=Y_{it}(\infty)\quad \forall\;i \;\text{y}\;\forall\;t<g\]
\[ATT(g,t)=E(Y_{t}-Y_{g-1}|G=g)-E(Y_{t}-Y_{g-1}|G\in\mathcal{G}_{comp}) \quad \forall\; t\geq g\]
Queremos comparar el valor de la variable de impacto entre el periodo \(g-1\) y el \(t\) para el grupo que fue tratado en \(g\) con algún grupo de comparación denominado \(\mathcal{G}_{comp}\) de tamaño \(N_{\mathcal{G}_{comp}}\)
Sustituyendo por el análogo muestral, donde \(N_g\) es el número de unidades en la cohorte \(g\):
\[\widehat{ATT}(g,t)=\frac{1}{N_g}\sum_{i:\;G_i=g}(Y_{it}-Y_{i,g-1})-\frac{1}{N_{\mathcal{G}_{comp}}}\sum_{i:\;G_i\in \mathcal{G}_{comp}}(Y_{it}-Y_{i,g-1})\]
¿Qué es \(\mathcal{G}_{comp}\)?
Si tenemos pocos periodos y cohortes puede ser práctico reportar todos los \(\widehat{ATT}(g,t)\)
También podemos construir medidas agregadas:
\[\theta = \sum_{g\in\mathcal{G}}\sum_{t=g}^{T}w(g,t)ATT(g,t)\]
Efecto de tratamiento por duración de exposición: \(\theta(e)\), el efecto promedio \(e\) periodos después del tratamiento, donde \(e=t-g\) es el tiempo que transcurre desde que se realizó el tratamiento
Efecto de tratamiento por grupo o cohorte: \(\theta(\tilde{g})\), nos permite conocer si el efecto del tratamiento es distinto para cohortes que fueron tratadas temprano o tarde
Efecto de tratamiento acumulado: \(\theta(\tilde{t})\), es el efecto promedio por participar en el tratamiento hasta una fecha \(\tilde{t}\)
Toma en cuenta la heterogeneidad de los efectos de tratamiento
Los pesos son especificados por el investigador y no mecánicamente como en TWFE
Hace explícito el grupo de comparación (nunca tratados o aún no tratados)
El estimador de Callaway & Sant’Anna no es la única forma de explotar los datos de adopción escalonada
Sun & Abraham (2021): usan un enfoque de regresión de un estudio de evento con interacciones entre cohorte y tiempo relativo al tratamiento, usando como control a los nunca tratados (o a la última cohorte en ser tratada) y luego promedian los efectos por cohorte
de Chaisemartin & D’Haultfœuille (2026): comparan, periodo a periodo, a las unidades que cambian de estado de tratamiento con unidades que tenían el mismo tratamiento inicial y que aún no cambian. Permite tratamientos que se encienden y apagan o que no son binarios
Borusyak, Jaravel & Spiess (2024): estiman los efectos fijos de unidad y de tiempo solo con observaciones no tratadas, imputan \(Y_{it}(0)\) para las tratadas y promedian las diferencias \(Y_{it}-\hat{Y}_{it}(0)\)
Dube, Girardi, Jordà & Taylor (2025): para cada horizonte \(h\) realizan una regresión de \(Y_{i,t+h}-Y_{i,t-1}\) sobre el inicio del tratamiento, restringiendo la muestra a unidades recién tratadas y a controles limpios (aún no tratados). Se conoce como proyecciones locales y es más usado en macroeconometría
Los estudios de evento son una forma de brindar evidencia en favor de las tendencias paralelas
La idea es mostrar que existe evidencia de tendencias paralelas en los periodos pre tratamiento y asumir que, por tanto, habría tendencias paralelas en los periodos posteriores
Sin embargo, las tendencias paralelas en los periodos pre tratamiento no son necesarias para la identificación del ATT
Un estudio de evento estima un coeficiente para cada periodo relativo al inicio del tratamiento
Definiciones
\(t^*\): periodo en que inicia el tratamiento
\(e=t-t^*\): tiempo relativo al inicio del tratamiento, con \(e=-K,\ldots,-1,0,\ldots,L\)
Se plantea la siguiente regresión: \[Y_{it}=\alpha_i+\lambda_t+\sum_{e=-K}^{-2}\mu_e\left(D_i\times \mathbf{1}\{t-t^*=e\}\right)+\sum_{e=0}^{L}\delta_e\left(D_i\times \mathbf{1}\{t-t^*=e\}\right)+\varepsilon_{it}\]
\(\alpha_i\) y \(\lambda_t\) son efectos fijos de unidad y de tiempo
Lo que hace este modelo es interactuar el indicador de tratamiento con indicadores de cada periodo relativo, salvo un periodo base
Se omite \(e=-1\), el periodo previo al tratamiento y todos los coeficientes se miden respecto a él
El periodo base debe ser uno en el que nadie ha sido tratado
Adelantos (\(\mu_e\), con \(e\leq -2\))
\[\mu_e=\left(E(Y_{t^*+e}(0)|D=1)-E(Y_{t^*-1}(0)|D=1)\right)-\left(E(Y_{t^*+e}(0)|D=0)-E(Y_{t^*-1}(0)|D=0)\right)\]
Rezagos (\(\delta_e\), con \(e\geq 0\))
\(\delta_e\) es el efecto del tratamiento sobre los tratados \(e\) periodos después del inicio del tratamiento, siempre que se cumplan tendencias paralelas entre \(t^*-1\) y \(t^*+e\) y no anticipación
Los rezagos permiten ver la dinámica del efecto (si aparece de inmediato, si crece o si se desvanece)
El supuesto de tendencias paralelas no puede probarse pues incluye \(E(Y_t(0)|D=1)\) después del tratamiento, un contrafactual que no observamos
Pero los adelantos \(\mu_e\) no involucran contrafactuales, pues son comparaciones de resultados observados antes del tratamiento
Si \(\mu_e\approx 0\) para \(e\leq -2\), tratados y no tratados seguían trayectorias paralelas antes de la intervención
Esto hace más creíble que la trayectoria de los no tratados aproxime el contrafactual de los tratados después de la intervención
Si los \(\mu_e\) son distintos de cero o muestran una tendencia, hay razones para dudar del diseño
El mostrar tendencias paralelas pre tratamiento aporta evidencia sugerente, pero no una prueba, de la plausibilidad del supuesto de tendencias contrafactuales paralelas después del tratamiento
Simulamos un panel de 100 unidades observadas durante 10 periodos, siendo tratadas las primeras 50 (\(D_i=1\))
El tratamiento inicia en \(t^*=6\), así que \(e\) va de \(-5\) a \(4\)
El resultado es \(Y_{it}=a_i+0.3t+\tau_{it}+u_{it}\), con un efecto de unidad \(a_i\sim N(0,1)\), una tendencia común \(0.3t\) y \(u_{it}\sim N(0,1)\)
El efecto \(\tau_{it}\) es cero antes del tratamiento y \(1+0.5e\) para \(e\geq 0\) (las tendencias paralelas se cumplen por construcción)
Estimamos con felm() con efectos fijos de unidad y de tiempo y errores estándar agrupados por unidad
D * e interactúa \(D_i\) con cada periodo relativo, con \(e=-1\) como base
Los efectos fijos absorben los términos de \(D_i\) y \(e\)
Podemos reportar los coeficientes estimados para cada adelanto y rezago
evento <- felm(Y ~ D * e | id + t | 0 | id,
data = panel)
modelsummary(list("Y" = evento),
coef_map = c("D:e-5" = "e = -5",
"D:e-4" = "e = -4",
"D:e-3" = "e = -3",
"D:e-2" = "e = -2",
"D:e0" = "e = 0",
"D:e1" = "e = 1",
"D:e2" = "e = 2",
"D:e3" = "e = 3",
"D:e4" = "e = 4"),
shape = term ~ model + statistic,
statistic = "std.error",
gof_map = c("nobs"))| Y | ||
|---|---|---|
| Est. | S.E. | |
| e = -5 | 0.350 | 0.280 |
| e = -4 | 0.137 | 0.262 |
| e = -3 | 0.038 | 0.248 |
| e = -2 | 0.156 | 0.308 |
| e = 0 | 1.147 | 0.265 |
| e = 1 | 1.389 | 0.296 |
| e = 2 | 2.012 | 0.281 |
| e = 3 | 2.116 | 0.283 |
| e = 4 | 3.436 | 0.316 |
| Num.Obs. | 1000 | |
Se grafican los \(\widehat{\mu}_e\) y \(\widehat{\delta}_e\) con sus intervalos de confianza
En el periodo base (\(e=-1\)) el coeficiente es cero por construcción
En esta simulación, los adelantos son cercanos a cero y el efecto crece con el tiempo de exposición
Con adopción escalonada, el estudio de evento por TWFE hereda el problema de pesos de Goodman-Bacon, por lo que se prefiere graficar \(\theta(e)\) de Callaway & Sant’Anna

Inferencia Causal
CIDE · Maestría en Economía
© 2026 Irvin Rojas. Distribuido bajo licencia Creative Commons CC BY-NC-SA 4.0. Los materiales de terceros citados conservan sus propios derechos.

Inferencia Causal · Diferencia en diferencias