11.4 Regresión con efectos fijos en el tiempo

El control de las variables que son constantes entre entidades pero que varían con el tiempo se puede realizar al incluir efectos fijos en el tiempo. Si existe solo efectos fijos de tiempo, el modelo de regresión de efectos fijos se convierte en \[Y_{it} = \beta_0 + \beta_1 X_{it} + \delta_2 B2_t + \cdots + \delta_T BT_t + u_{it},\] donde solo se incluyen variables ficticias \(T-1\) (se omite \(B1\)), ya que el modelo incluye una intersección. Este modelo elimina el sesgo de variables omitidas causado por la exclusión de variables no observadas que evolucionan con el tiempo, pero son constantes en todas las entidades.

En algunas aplicaciones, es significativo incluir efectos fijos tanto de entidad como de tiempo. El modelo de efectos fijos de entidad y tiempo es \[Y_{it} = \beta_0 + \beta_1 X_{it} + \gamma_2 D2_i + \cdots + \gamma_n DT_i + \delta_2 B2_t + \cdots + \delta_T BT_t + u_{it} .\] El modelo combinado permite eliminar el sesgo de las variables inobservables que cambian con el tiempo, pero son constantes en las entidades y controla los factores que difieren entre las entidades pero que son constantes en el tiempo. Estos modelos se pueden estimar utilizando el algoritmo MCO que se implementa en R.

El siguiente fragmento de código muestra cómo estimar la entidad combinada y el modelo de efectos fijos de tiempo de la relación entre las muertes y el impuesto a la cerveza, \[\text{Tasa de fatalidad}_{it} = \beta_1 \text{Impuesto a la cerveza}_{it} + \text{Efectos de estado} + \text{Efectos fijos de tiempo} + u_{it}\] usando tanto lm() como plm(). Es sencillo estimar esta regresión con lm(), ya que es solo una extensión de (11.6) por lo que solo se tiene que ajustar el argumento formula agregando el regresor adicional year para efectos fijos de tiempo. En la llamada de plm() se establece otro argumento effect = “twoways” para la inclusión de variables ficticias de entidad y tiempo.

# estimar un modelo de regresión combinado de efectos fijos de entidad y tiempo

# a través de lm()
fatal_tefe_lm_mod <- lm(fatal_rate ~ beertax + state + year - 1, data = Fatalities)
fatal_tefe_lm_mod
#> 
#> Call:
#> lm(formula = fatal_rate ~ beertax + state + year - 1, data = Fatalities)
#> 
#> Coefficients:
#>  beertax   stateal   stateaz   statear   stateca   stateco   statect   statede  
#> -0.63998   3.51137   2.96451   2.87284   2.02618   2.04984   1.67125   2.22711  
#>  statefl   statega   stateid   stateil   statein   stateia   stateks   stateky  
#>  3.25132   4.02300   2.86242   1.57287   2.07123   1.98709   2.30707   2.31659  
#>  statela   stateme   statemd   statema   statemi   statemn   statems   statemo  
#>  2.67772   2.41713   1.82731   1.42335   2.04488   1.63488   3.49146   2.23598  
#>  statemt   statene   statenv   statenh   statenj   statenm   stateny   statenc  
#>  3.17160   2.00846   2.93322   2.27245   1.43016   3.95748   1.34849   3.22630  
#>  statend   stateoh   stateok   stateor   statepa   stateri   statesc   statesd  
#>  1.90762   1.85664   2.97776   2.36597   1.76563   1.26964   4.06496   2.52317  
#>  statetn   statetx   stateut   statevt   stateva   statewa   statewv   statewi  
#>  2.65670   2.61282   2.36165   2.56100   2.23618   1.87424   2.63364   1.77545  
#>  statewy  year1983  year1984  year1985  year1986  year1987  year1988  
#>  3.30791  -0.07990  -0.07242  -0.12398  -0.03786  -0.05090  -0.05180

# a través de plm()
fatal_tefe_mod <- plm(fatal_rate ~ beertax, 
                      data = Fatalities,
                      index = c("state", "year"), 
                      model = "within", 
                      effect = "twoways")

coeftest(fatal_tefe_mod, vcov = vcovHC, type = "HC1")
#> 
#> t test of coefficients:
#> 
#>         Estimate Std. Error t value Pr(>|t|)  
#> beertax -0.63998    0.35015 -1.8277  0.06865 .
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Antes de discutir los resultados, se deben convencer de que state y year son de la clase factor.

# marcar la clase de 'state' y 'year'
class(Fatalities$state)
#> [1] "factor"
class(Fatalities$year)
#> [1] "factor"

Las funciones lm() convierten los factores en variables ficticias automáticamente. Dado que se excluye la intersección agregando -1 al lado derecho de la fórmula de regresión, lm() estima los coeficientes para las variables binarias \(n + (T-1) = 48 + 6 = 54\) (variables ficticias de 6 años y 48 variables ficticias estatales). Una vez más, plm() solo informa el coeficiente estimado en \(Impuesto a la cerveza\).

La función de regresión estimada es

\[\begin{align} \widehat{\text{Tasa de fatalidad}} = -\underset{(0.35)}{0.64} \times \text{Impuesto a la cerveza} + \text{Efectos de estado} + \text{Efectos fijos de tiempo}. \tag{11.8} \end{align}\]

El resultado \(-0.66\) está cerca del coeficiente estimado para el modelo de regresión que incluye solo los efectos fijos de la entidad. Como era de esperar, el coeficiente se estima con menos precisión, pero es significativamente diferente de cero a \(10\%\).

En vista de (11.7) y (11.8), se concluye que relación estimada entre las muertes por accidentes de tránsito y el impuesto real a la cerveza no se ve afectada por el sesgo de la variable omitida debido a factores que son constantes en el tiempo.