17 votos

Diferencia en diferencias con datos de panel a nivel individual

¿Cuál es la forma correcta de especificar un modelo de diferencias en diferencias con datos de panel a nivel individual?

Este es el montaje: Supongamos que tengo datos de panel a nivel individual incrustados en las ciudades durante varios años y que el tratamiento varía a nivel de ciudad-año. Formalmente, dejemos que $y_{ist}$ sea el resultado para el individuo $i$ en la ciudad $s$ y el año $t$ y $D_{st}$ sea una variable ficticia que indique si la intervención afectó a la ciudad $s$ en el año $t$ . Un estimador típico de DiD, como el descrito en Bertrand et al (2004, p. 250), se basa en un modelo OLS simple con términos de efecto fijo para la ciudad y el año:

$$ y_{ist} = A_{s} + B_t + cX_{ist} + \beta D_{st} + \epsilon_{ist} $$

Pero, ¿ignora ese estimador la estructura de panel a nivel individual (es decir, múltiples observaciones para cada individuo dentro de las ciudades)? ¿Tiene sentido ampliar este modelo con un término de efecto fijo a nivel individual? $S_i$ ? Muchas aplicaciones de DiD utilizan datos de sección transversal repetidos sin los datos de panel a nivel individual.


Bertrand, Marianne, Esther Duflo y Sendhil Mullainathan. 2004. "¿Hasta qué punto debemos confiar en las estimaciones de diferencias en diferencias?" Quarterly Journal of Economics 119(1):249-75.

0 votos

Si quiere capturar los efectos de las variables ficticias de las entidades, ¿por qué no hacer un modelo de efectos fijos? DID es equivalente a FE con 2 periodos de tiempo, por lo que incluir dummies y luego hacer DID haría que se perdieran.

0 votos

Corríjame si me equivoco, pero veo dos diferencias: a) un modelo de fe utilizaría una comparación dentro de la unidad para estimar el efecto (por ejemplo, si los ingresos son mayores o menores después de un determinado acontecimiento vital). La idea de un enfoque DiD es utilizar otras observaciones como tendencia de control para captar lo que habría ocurrido sin el tratamiento. b) DiD se centra en un tratamiento a nivel de grupo y no a nivel individual. Ahora la pregunta es qué ocurre si añado un término de alimentación a nivel individual a la ecuación de mi ejemplo. ¿Utiliza eso las observaciones de control como tendencia de control? Aunque todos los obs de control no varían con el tratamiento...

17voto

Andy Puntos 10250

Una buena característica de la diferencia en diferencias (DiD) es que no se necesitan datos de panel para ello. Dado que el tratamiento se produce en algún tipo de nivel de agregación (en su caso, las ciudades), sólo es necesario tomar muestras aleatorias de individuos de las ciudades antes y después del tratamiento. Esto le permite estimar $$ y_{ist} = A_g + B_t + \beta D_{st} + c X_{ist} + \epsilon_{ist} $$ y obtener el efecto causal del tratamiento como la diferencia esperada del resultado posterior al tratamiento menos la diferencia esperada del resultado posterior al control.

Hay un caso en el que la gente utiliza efectos fijos individuales en lugar de un indicador de tratamiento y es cuando no tenemos un nivel de agregación bien definido en el que se produce el tratamiento. En ese caso se estimaría $$ y_{it} = \alpha_i + B_t + \beta D_{it} + cX_{it}+\epsilon_{it} $$ donde $D_{it}$ es un indicador del periodo posterior al tratamiento para los individuos que lo han recibido (por ejemplo, un programa de mercado de trabajo que ocurre en todas partes). Para más información al respecto, véase notas de clase por Steve Pischke.

En su entorno, añadir efectos fijos individuales no debería cambiar nada con respecto a las estimaciones puntuales. El indicador de tratamiento $A_g$ sólo serán absorbidos por los efectos fijos individuales. Sin embargo, estos efectos fijos podrían absorber parte de la varianza residual y, por tanto, reducir potencialmente el error estándar de su coeficiente DiD.

A continuación se muestra un ejemplo de código que demuestra que este es el caso. Yo utilizo Stata, pero usted puede reproducirlo en el paquete estadístico de su elección. Los "individuos" aquí son en realidad países, pero siguen estando agrupados según algún indicador de tratamiento.

* load the data set (requires an internet connection)
use "http://dss.princeton.edu/training/Panel101.dta"

* generate the time and treatment group indicators and their interaction
gen time = (year>=1994) & !missing(year)
gen treated = (country>4) & !missing(country)
gen did = time*treated

* do the standard DiD regression
reg y_bin time treated did

------------------------------------------------------------------------------
       y_bin |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        time |       .375   .1212795     3.09   0.003     .1328576    .6171424
     treated |   .4166667   .1434998     2.90   0.005       .13016    .7031734
         did |  -.4027778   .1852575    -2.17   0.033    -.7726563   -.0328992
       _cons |         .5   .0939427     5.32   0.000     .3124373    .6875627
------------------------------------------------------------------------------

 * now repeat the same regression but also including country fixed effects
 areg y_bin did time treated, a(country)

------------------------------------------------------------------------------
       y_bin |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        time |       .375    .120084     3.12   0.003     .1348773    .6151227
     treated |          0  (omitted)
         did |  -.4027778   .1834313    -2.20   0.032    -.7695713   -.0359843
       _cons |   .6785714    .070314     9.65   0.000       .53797    .8191729
-------------+----------------------------------------------------------------

Así, se ve que el coeficiente DiD sigue siendo el mismo cuando se incluyen los efectos fijos individuales ( areg es uno de los comandos de estimación de efectos fijos disponibles en Stata). Los errores estándar son ligeramente más ajustados y nuestro indicador de tratamiento original fue absorbido por los efectos fijos individuales y, por lo tanto, se eliminó de la regresión.

En respuesta al comentario
Mencioné el ejemplo de Pischke para mostrar cuando la gente utiliza efectos fijos individuales en lugar de un indicador de grupo de tratamiento. Su escenario tiene una estructura de grupo bien definida, por lo que la forma en que ha escrito su modelo está perfectamente bien. Los errores estándar deberían agruparse a nivel de ciudad, es decir, el nivel de agregación en el que se produce el tratamiento (no lo he hecho en el código del ejemplo, pero en los ajustes de DiD los errores estándar deben corregirse, como se demuestra en el artículo de Bertrand et al).

En cuanto a los promotores, no tienen mucho que hacer aquí. El indicador de tratamiento $D_{st}$ es igual a 1 para las personas que viven en una ciudad tratada $s$ en el periodo posterior al tratamiento $t$ . Para calcular el coeficiente DiD, en realidad sólo tenemos que calcular cuatro expectativas condicionales, a saber $$ c = \left[ E(y_{ist}|s=1,t=1) - E(y_{ist}|s=1,t=0)\right] - \left[ E(y_{ist}|s=0,t=1) - E(y_{ist}|s=0,t=0)\right] $$

Por lo tanto, si tiene 4 periodos posteriores al tratamiento para un individuo que vive en una ciudad tratada durante los dos primeros, y luego se traslada a una ciudad de control durante los dos periodos restantes, las dos primeras de esas observaciones se utilizarán en el cálculo de $E(y_{ist}|s=1,t=1)$ y los dos últimos en $E(y_{ist}|s=0,t=1)$ . Para que quede claro por qué la identificación proviene de las diferencias del grupo a lo largo del tiempo y no de los que se mueven, se puede visualizar esto con un simple gráfico. Supongamos que el cambio en el resultado se debe realmente sólo al tratamiento y que éste tiene un efecto contemporáneo. Si tenemos un individuo que vive en una ciudad tratada después del inicio del tratamiento, pero que luego se traslada a una ciudad de control, su resultado debería volver a ser el que tenía antes de ser tratado. Esto se muestra en el siguiente gráfico estilizado.

enter image description here

Sin embargo, es posible que quiera pensar en las mudanzas por otras razones. Por ejemplo, si el tratamiento tiene un efecto duradero (es decir, sigue afectando al resultado aunque la persona se haya mudado)

2 votos

Buena respuesta. ¿Recomendarías también agrupar los errores a nivel de ciudad aquí?

0 votos

Gran respuesta, gracias. Tu ecuación es la 3 de la página 12, ¿verdad? Pischke introduce esta parte con "Sin embargo, a veces no hay una unidad natural s donde se asigna el tratamiento. En cambio, algunos individuos reciben tratamiento en un momento determinado y otros no". Pero este no es realmente el caso. El tratamiento está en el nivel de la ciudad (o del grupo que sea) en mi entorno + tengo datos de panel. Puede que el modelo sea el correcto, tal vez con datos agrupados. ¿Qué diría usted? ¿Y si los individuos pueden moverse entre ciudades a lo largo de los años? En ese caso, el coeficiente para los "tratados" se identificaría basándose en los que se mudan, ¿no?

0 votos

@DimitriyV.Masterov La recomendación de Bertrand et al sería agrupar los errores estándar a nivel de grupo en el que se produce el tratamiento. También se podría utilizar un bootstrap de bloques con reemplazo, aunque también sería a nivel de ciudad.

3voto

stiduck Puntos 450

La respuesta corta es que el uso del efecto fijo a nivel de la unidad o del grupo tratado no cambia la estimación, sólo la inferencia. Normalmente, el uso del efecto fijo a nivel de la unidad absorberá más variación y, por lo tanto, tendrá errores estándar más pequeños.

El hecho de que las unidades estén en el mismo grupo agregado no cambia este resultado (sólo cambia la forma de definir su nivel del grupo tratado y el hecho de que se necesita un panel en lugar de secciones transversales repetidas). Lo mismo se aplica a los efectos fijos de tiempo: puede utilizar, por ejemplo, efectos fijos de año, o simplemente un EF para antes y después.

Tenga en cuenta, sin embargo, que la equivalencia sólo se mantiene cuando no hay ninguna covariable X. En cuanto hay Xs, los resultados son diferentes si se utilizan efectos fijos de unidad o de grupo.

El ejemplo siguiente compara los 5 estimadores. Los estimadores son:

  1. OLS
  2. FE con FE: grupo (tratado) por periodo (de tratamiento)
  3. FE con FE: unidades por periodo (de tratamiento)
  4. FE con FE: grupo (tratado) por año
  5. FE con FE: unidades por año

                      OLS        FE period-group  FE period-unit  FE year-group  FE year-unit

    did -0.4028 -0.4028 -0.4028 -0.4028 -0.4028 *
    (0.1853) (0.1853) (0.1834) (0.1758) (0.1727)

    Num. obs. 70 70 70 70 70
    Num. groups: time 2 2
    Num. groups: treated 2 2
    Num. groups: country 7 7
    Num. groups: year 10 10

    p < 0.001; p < 0.01; p < 0.05

Y la tabla siguiente muestra las 3 primeras regresiones, esta vez con covariables:

===================================================================
                      OLS x     FE period-group X  FE period-unit X
-------------------------------------------------------------------
did                   -0.407 *  -0.407 *           -0.460 *        
                      (0.189)   (0.189)            (0.187)         
x1                     0.018     0.018              0.220          
                      (0.104)   (0.104)            (0.165)         
-------------------------------------------------------------------
Num. obs.             70        70                 70              
Num. groups: time                2                  2              
Num. groups: treated             2                                 
Num. groups: country                                7              
===================================================================
*** p < 0.001; ** p < 0.01; * p < 0.05

Código:

library(tidyverse)
library(haven)
library(texreg)
library(lfe)

dat <- read_dta("http://dss.princeton.edu/training/Panel101.dta")  %>% 
  mutate(time = (year>=1994) ,
         treated = (country>4),
         did = time*treated)

reg_ols <- lm(y_bin~ time+ treated+ did, data = dat)
reg_fe_a <- felm(y_bin~ did | time+ treated, data = dat)
reg_fe_b <- felm(y_bin~ did | time+ country, data = dat)
reg_fe_c <- felm(y_bin~ did | year+ treated, data = dat)
reg_fe_d <- felm(y_bin~ did | year+ country, data = dat)

reg_ols_x <- update(reg_ols, .~.+x1)
reg_fe_a_x <- update(reg_fe_a, .~.+x1)
reg_fe_b_x <- update(reg_fe_b, .~.+x1)

screenreg(list(reg_ols, reg_fe_a, reg_fe_b, reg_fe_c, reg_fe_d), 
          omit.coef = "time|treated|Intercept", digits=4, 
          include.rsquared = FALSE, include.adjrs = FALSE, include.rmse = FALSE,
          custom.model.names = c("OLS", "FE period-group", "FE period-unit", "FE year-group", "FE year-unit"))
#> 
#> =============================================================================================
#>                       OLS        FE period-group  FE period-unit  FE year-group  FE year-unit
#> ---------------------------------------------------------------------------------------------
#> did                   -0.4028 *  -0.4028 *        -0.4028 *       -0.4028 *      -0.4028 *   
#>                       (0.1853)   (0.1853)         (0.1834)        (0.1758)       (0.1727)    
#> ---------------------------------------------------------------------------------------------
#> Num. obs.             70         70               70              70             70          
#> Num. groups: time                 2                2                                         
#> Num. groups: treated              2                                2                         
#> Num. groups: country                               7                              7          
#> Num. groups: year                                                 10             10          
#> =============================================================================================
#> *** p < 0.001; ** p < 0.01; * p < 0.05

screenreg(list(reg_ols_x, reg_fe_a_x, reg_fe_b_x), 
          omit.coef = "time|treated|Inter", digits=3, 
          include.rsquared = FALSE, include.adjrs = FALSE, include.rmse = FALSE,
          custom.model.names = c("OLS x", "FE period-group X", "FE period-unit X"))
#> 
#> ===================================================================
#>                       OLS x     FE period-group X  FE period-unit X
#> -------------------------------------------------------------------
#> did                   -0.407 *  -0.407 *           -0.460 *        
#>                       (0.189)   (0.189)            (0.187)         
#> x1                     0.018     0.018              0.220          
#>                       (0.104)   (0.104)            (0.165)         
#> -------------------------------------------------------------------
#> Num. obs.             70        70                 70              
#> Num. groups: time                2                  2              
#> Num. groups: treated             2                                 
#> Num. groups: country                                7              
#> ===================================================================
#> *** p < 0.001; ** p < 0.01; * p < 0.05

Creado el 2021-04-01 por el paquete reprex (v1.0.0)

1voto

Como complemento a las otras respuestas: cuando se utilizan datos de panel, los individuos no se someten a un muestreo totalmente aleatorio; normalmente, puede haber una deserción no aleatoria entre las oleadas de la encuesta.

Lechner, Rodríguez-Planas y Kranz (2016) demostraron que esto puede dar lugar a diferencias sustanciales entre el modelo DiD simple y el que utiliza efectos fijos. Esto podría llevar a preferir las especificaciones de efectos fijos.

Referencia: Lechner, Michael, Nuria Rodríguez-Planas y Daniel Fernández Kranz. "Estimación por diferencia en diferencia mediante FE y OLS cuando hay no respuesta de panel". Journal of Applied Statistics 43.11 (2016): 2044-2052. https://www.tandfonline.com/doi/abs/10.1080/02664763.2015.1126240

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X