11.1 Datos de panel
Concepto clave 10.1
Notación para datos de panel
En contraste con los datos de sección transversal donde se tienen observaciones sobre \(n\) sujetos (entidades), los datos de panel tienen observaciones sobre \(n\) entidades en períodos de tiempo \(T\geq2\). Esto se denota:
\[(X_{it},Y_{it}), \ i=1,\dots,n \ \ \ \text{and} \ \ \ t=1,\dots,T \]
donde el índice \(i\) se refiere a la entidad mientras que \(t\) se refiere al período de tiempo.
A veces, los datos de panel también se denominan datos longitudinales, ya que agregan una dimensión temporal a los datos transversales. Echando un vistazo al conjunto de datos Fatalities comprobando su estructura y enumerando las primeras observaciones.
# cargar el paquete y el conjunto de datos
library(AER)
data(Fatalities)
# obtener la dimensión e inspeccionar la estructura
is.data.frame(Fatalities)
#> [1] TRUE
dim(Fatalities)
#> [1] 336 34
str(Fatalities)
#> 'data.frame': 336 obs. of 34 variables:
#> $ state : Factor w/ 48 levels "al","az","ar",..: 1 1 1 1 1 1 1 2 2 2 ...
#> $ year : Factor w/ 7 levels "1982","1983",..: 1 2 3 4 5 6 7 1 2 3 ...
#> $ spirits : num 1.37 1.36 1.32 1.28 1.23 ...
#> $ unemp : num 14.4 13.7 11.1 8.9 9.8 ...
#> $ income : num 10544 10733 11109 11333 11662 ...
#> $ emppop : num 50.7 52.1 54.2 55.3 56.5 ...
#> $ beertax : num 1.54 1.79 1.71 1.65 1.61 ...
#> $ baptist : num 30.4 30.3 30.3 30.3 30.3 ...
#> $ mormon : num 0.328 0.343 0.359 0.376 0.393 ...
#> $ drinkage : num 19 19 19 19.7 21 ...
#> $ dry : num 25 23 24 23.6 23.5 ...
#> $ youngdrivers: num 0.212 0.211 0.211 0.211 0.213 ...
#> $ miles : num 7234 7836 8263 8727 8953 ...
#> $ breath : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
#> $ jail : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 2 2 2 ...
#> $ service : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 2 2 2 ...
#> $ fatal : int 839 930 932 882 1081 1110 1023 724 675 869 ...
#> $ nfatal : int 146 154 165 146 172 181 139 131 112 149 ...
#> $ sfatal : int 99 98 94 98 119 114 89 76 60 81 ...
#> $ fatal1517 : int 53 71 49 66 82 94 66 40 40 51 ...
#> $ nfatal1517 : int 9 8 7 9 10 11 8 7 7 8 ...
#> $ fatal1820 : int 99 108 103 100 120 127 105 81 83 118 ...
#> $ nfatal1820 : int 34 26 25 23 23 31 24 16 19 34 ...
#> $ fatal2124 : int 120 124 118 114 119 138 123 96 80 123 ...
#> $ nfatal2124 : int 32 35 34 45 29 30 25 36 17 33 ...
#> $ afatal : num 309 342 305 277 361 ...
#> $ pop : num 3942002 3960008 3988992 4021008 4049994 ...
#> $ pop1517 : num 209000 202000 197000 195000 204000 ...
#> $ pop1820 : num 221553 219125 216724 214349 212000 ...
#> $ pop2124 : num 290000 290000 288000 284000 263000 ...
#> $ milestot : num 28516 31032 32961 35091 36259 ...
#> $ unempus : num 9.7 9.6 7.5 7.2 7 ...
#> $ emppopus : num 57.8 57.9 59.5 60.1 60.7 ...
#> $ gsp : num -0.0221 0.0466 0.0628 0.0275 0.0321 ...
# enumerar las primeras observaciones
head(Fatalities)
#> state year spirits unemp income emppop beertax baptist mormon drinkage
#> 1 al 1982 1.37 14.4 10544.15 50.69204 1.539379 30.3557 0.32829 19.00
#> 2 al 1983 1.36 13.7 10732.80 52.14703 1.788991 30.3336 0.34341 19.00
#> 3 al 1984 1.32 11.1 11108.79 54.16809 1.714286 30.3115 0.35924 19.00
#> 4 al 1985 1.28 8.9 11332.63 55.27114 1.652542 30.2895 0.37579 19.67
#> 5 al 1986 1.23 9.8 11661.51 56.51450 1.609907 30.2674 0.39311 21.00
#> 6 al 1987 1.18 7.8 11944.00 57.50988 1.560000 30.2453 0.41123 21.00
#> dry youngdrivers miles breath jail service fatal nfatal sfatal
#> 1 25.0063 0.211572 7233.887 no no no 839 146 99
#> 2 22.9942 0.210768 7836.348 no no no 930 154 98
#> 3 24.0426 0.211484 8262.990 no no no 932 165 94
#> 4 23.6339 0.211140 8726.917 no no no 882 146 98
#> 5 23.4647 0.213400 8952.854 no no no 1081 172 119
#> 6 23.7924 0.215527 9166.302 no no no 1110 181 114
#> fatal1517 nfatal1517 fatal1820 nfatal1820 fatal2124 nfatal2124 afatal
#> 1 53 9 99 34 120 32 309.438
#> 2 71 8 108 26 124 35 341.834
#> 3 49 7 103 25 118 34 304.872
#> 4 66 9 100 23 114 45 276.742
#> 5 82 10 120 23 119 29 360.716
#> 6 94 11 127 31 138 30 368.421
#> pop pop1517 pop1820 pop2124 milestot unempus emppopus gsp
#> 1 3942002 208999.6 221553.4 290000.1 28516 9.7 57.8 -0.02212476
#> 2 3960008 202000.1 219125.5 290000.2 31032 9.6 57.9 0.04655825
#> 3 3988992 197000.0 216724.1 288000.2 32961 7.5 59.5 0.06279784
#> 4 4021008 194999.7 214349.0 284000.3 35091 7.2 60.1 0.02748997
#> 5 4049994 203999.9 212000.0 263000.3 36259 7.0 60.7 0.03214295
#> 6 4082999 204999.8 208998.5 258999.8 37426 6.2 61.5 0.04897637
# resumir las variables 'state' y 'year'
summary(Fatalities[, c(1, 2)])
#> state year
#> al : 7 1982:48
#> az : 7 1983:48
#> ar : 7 1984:48
#> ca : 7 1985:48
#> co : 7 1986:48
#> ct : 7 1987:48
#> (Other):294 1988:48
Se encuentra que el conjunto de datos consta de 336 observaciones sobre 34 variables. Se puede observar que la variable state es una variable de factor con 48 niveles (uno para cada uno de los 48 estados federales contiguos de los EE. UU.).
La variable year también es una variable factorial que tiene 7 niveles que identifican el período de tiempo en que se realizó la observación. Esto nos da \(7\times48 = 336\) observaciones en total. Dado que todas las variables se observan para todas las entidades y durante todos los períodos de tiempo, el panel está equilibrado. Si faltaran datos para al menos una entidad en al menos un período de tiempo, se llamarían datos de panel desequilibrado.
Ejemplo: Muertes por accidentes de tránsito e impuestos sobre el alcohol
Se debe comenzar con la creación de un gráfico. Para ello, se estiman regresiones simples utilizando datos de los años 1982 y 1988 que modelan la relación entre el impuesto a la cerveza (ajustado por dólares de 1988) y la tasa de fatalidades de tránsito, medida como el número de fatalidades por 10000 habitantes. Luego, se grafican los datos y se agregan las funciones de regresión estimadas correspondientes.
# definir la tasa de letalidad
$fatal_rate <- Fatalities$fatal / Fatalities$pop * 10000
Fatalities
# subconjunto de los datos
<- subset(Fatalities, year == "1982")
Fatalities1982 <- subset(Fatalities, year == "1988") Fatalities1988
# estimar modelos de regresión simple usando datos de 1982 y 1988
<- lm(fatal_rate ~ beertax, data = Fatalities1982)
fatal1982_mod <- lm(fatal_rate ~ beertax, data = Fatalities1988)
fatal1988_mod
coeftest(fatal1982_mod, vcov. = vcovHC, type = "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 2.01038 0.14957 13.4408 <2e-16 ***
#> beertax 0.14846 0.13261 1.1196 0.2687
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(fatal1988_mod, vcov. = vcovHC, type = "HC1")
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1.85907 0.11461 16.2205 < 2.2e-16 ***
#> beertax 0.43875 0.12786 3.4314 0.001279 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Las funciones de regresión estimadas son:
\[\begin{align*} \widehat{\text{Tasa de fatalidad}} =& \, \underset{(0.15)}{2.01} + \underset{(0.13)}{0.15} \times \text{Impuesto a la cerveza} \quad (\text{Datos de } 1982), \\ \widehat{\text{Tasa de fatalidad}} =& \, \underset{(0.11)}{1.86} + \underset{(0.13)}{0.44} \times \text{Impuesto a la cerveza} \quad (\text{Datos de } 1988). \end{align*}\]
# graficar las observaciones y agregar la línea de regresión estimada para los datos de 1982
plot(x = Fatalities1982$beertax,
y = Fatalities1982$fatal_rate,
xlab = "Impuesto a la cerveza (en dólares de 1988)",
ylab = "Tasa de mortalidad (muertes por 10000)",
main = "Tasas de accidentes de tráfico e impuestos a la cerveza en 1982",
ylim = c(0, 4.5),
pch = 20,
col = "steelblue")
abline(fatal1982_mod, lwd = 1.5)
# graficar las observaciones y agregar la línea de regresión estimada para los datos de 1988
plot(x = Fatalities1988$beertax,
y = Fatalities1988$fatal_rate,
xlab = "Impuesto a la cerveza (en dólares de 1988)",
ylab = "Tasa de mortalidad (muertes por 10000)",
main = "Tasas de accidentes de tráfico e impuestos a la cerveza en 1988",
ylim = c(0, 4.5),
pch = 20,
col = "steelblue")
abline(fatal1988_mod, lwd = 1.5)
En ambas gráficas, cada punto representa las observaciones del impuesto a la cerveza y la tasa de mortalidad para un estado dado en el año respectivo. Los resultados de la regresión indican una relación positiva entre el impuesto a la cerveza y la tasa de letalidad para ambos años. El coeficiente estimado del impuesto a la cerveza para los datos de 1988 es casi tres veces mayor que el del conjunto de datos de 1988. Esto es contrario a las expectativas: Se supone que los impuestos sobre el alcohol reducen la tasa de accidentes de tránsito. Como se sabe por el Capítulo 7, esto posiblemente se deba al sesgo de la variable omitida, ya que ambos modelos no incluyen ninguna covariable; por ejemplo, condiciones económicas. Esto podría corregirse mediante el uso de un enfoque de regresión múltiple. Sin embargo, esto no puede tener en cuenta los factores omitidos no observables que difieren de un estado a otro, pero se puede suponer que son constantes durante el período de observación; por ejemplo, la actitud de la población hacia la conducción bajo los efectos del alcohol. Como se muestra en la siguiente sección, los datos de panel nos permiten mantener dichos factores constantes.