Las bases de datos en panel son bases en las que podemos observar el comportamiento de un grupo de entidades en el tiempo. Estas entidades pueden ser empresas, estados, paÃses o individuos. Una base de datos en panel luce asÃ:
data.frame(Pais = c(1,1,1,2,2,2), Anio = c(2001,2002,2003,2001,2002,2003), Y = rnorm(6), X1 = runif(6), X2 = floor(runif(6,0,100)))
## Pais Anio Y X1 X2
## 1 1 2001 -0.2366455 0.6200135 79
## 2 1 2002 -2.9091591 0.2168213 28
## 3 1 2003 0.4711550 0.3318029 93
## 4 2 2001 0.2660643 0.4526049 29
## 5 2 2002 -1.8652359 0.5086563 64
## 6 2 2003 -1.3209354 0.2399477 56
Para el trabajo con bases de datos en panel, tanto con efectos fijos como con efectos aleatorios, haremos uso del paquete plm(Croissant y Milo, 2008), que contiene funciones y métodos de ajuste relevantes al análisis de este tipo de información. Para instalar el paquete, y cargarlo en el sistema, ejecute las siguientes lÃneas de código:
if(!require('plm')){
install.packages("plm")
library(somepackage)
}
Para ilustrar los métodos de efectos fijos y efectos aleatorios, se usa la información del repositorio del Data and Statistical Services de Princeton y se pueden descargar en el siguiente enlace. Estos datos estan en formato *.dta (stata), por lo que, para cargarlo en R, debemos usar la biblioteca foreign.
if(!require('foreign')){
install.packages("foreign")
}
library("foreign")
Panel <- read.dta("\Direccion\del\archivo.dta")
Visualizar este tipo de información es relativamente sencillo. En las siguientes lÃneas de código, cargaremos la base de datos y haremos una visualización con el uso de la función coplot().
coplot(y ~ year|country, type = "l", data = Panel)
También es posible realizar un gráfico conjunto de todas las lÃneas de tiempo. Esto nos permite comparar de una manera mas cómoda la evolución de las diferentes entidades:
library(car) # Companion to Applied Regression: Contiene una version ampliada del diagrama de dispersion
scatterplot(y ~ year|country, boxplots = FALSE, reg.line = FALSE,data = Panel)
El modelo básico lineal que se usa en econometrÃa se describe con el siguiente modelo general bajo las restricciones apropiadas: \[ y_{it} = \alpha_{it}+\beta_{it}^\intercal x_{it}+\varepsilon_{it}, \] donde \(i=1,2,\dots,n\) es el indicador del individuo, \(t = 1,2,\dots,T\) es el indicador del tiempo y \(\varepsilon_{it}\sim\mathcal{N}(0,\sigma^2)\)
El siguiente código nos ayuda a graficar un intervado de 95% de confianza alrededor de las medias para observar la heterogeneidad entre los paÃses. Es decir, que tan distintos son entre sÃ.
library(gplots)
plotmeans(y ~ country, main = "Heterogeneidad entre paises", data = Panel)
O bien, podemos observar también la heterogeneidad del conjunto de paÃses a través de los años.
plotmeans(y ~year, main = "Heterogeneidad a traves del tiempo", data = Panel)
Veamos que sucede si intentamos realizar una regresión por MCO. Siempre es buena idea intentar usar las herramientas básicas antes de las más complicadas, tanto para practicar un poco más como para poder aprender a realizar un buen comparativo. En este caso, la heterogeneidad entre paÃses y en el tiempo debe tomarse en consideración por el modelo.
mco <- lm(y ~ x1, data = Panel)
summary(mco)
##
## Call:
## lm(formula = y ~ x1, data = Panel)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.546e+09 -1.578e+09 1.554e+08 1.422e+09 7.183e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.524e+09 6.211e+08 2.454 0.0167 *
## x1 4.950e+08 7.789e+08 0.636 0.5272
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.028e+09 on 68 degrees of freedom
## Multiple R-squared: 0.005905, Adjusted R-squared: -0.008714
## F-statistic: 0.4039 on 1 and 68 DF, p-value: 0.5272
Note que el valor p es extremadamente alto. Esto se puede deber a que el modelo por mÃnimos cuadrados interpreta la heterogeneidad entre los paÃses y en el tiempo como ruido en el modelo. En otras palabras, si los paÃses fueran todos iguales y/o, las variables no evolucionaran en el tiempo, entonces el modelo de mÃnimos cuadrados ordinarios podrÃa ser suficiente para lograr explicar el modelo. Guardemos los valores ajustados y observemos la regresión por MCO.
yhat <- mco$fitted.values
plot(Panel$x1, Panel$y, pch = 16, xlab = "x1", ylab = "y")
abline(mco, col = "red", lwd = 3)
#### Modelo de Efectos Fijos con variable Dummy El siguiente modelo controla la regresión tomando en consideración la heterogeneidad entre paÃses. El siguiente trabaja el modelo como si, en efecto, se creara una columna con una variable dummy (dicotómica, o de ceros y unos) para cada uno de los paÃses. Esta variable tiene un valor de 1 para cada dato que coincide con el paÃs de la variable Dummy y un cero para el resto. Note que, controlando a los paÃses, la variable
x1 se vuelve significativa.
fixed.dum <- lm(y ~ x1 + factor(country) - 1 , data = Panel)
summary(fixed.dum)
##
## Call:
## lm(formula = y ~ x1 + factor(country) - 1, data = Panel)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.634e+09 -9.697e+08 5.405e+08 1.386e+09 5.612e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## x1 2.476e+09 1.107e+09 2.237 0.02889 *
## factor(country)A 8.805e+08 9.618e+08 0.916 0.36347
## factor(country)B -1.058e+09 1.051e+09 -1.006 0.31811
## factor(country)C -1.723e+09 1.632e+09 -1.056 0.29508
## factor(country)D 3.163e+09 9.095e+08 3.478 0.00093 ***
## factor(country)E -6.026e+08 1.064e+09 -0.566 0.57329
## factor(country)F 2.011e+09 1.123e+09 1.791 0.07821 .
## factor(country)G -9.847e+08 1.493e+09 -0.660 0.51190
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.796e+09 on 62 degrees of freedom
## Multiple R-squared: 0.4402, Adjusted R-squared: 0.368
## F-statistic: 6.095 on 8 and 62 DF, p-value: 8.892e-06
yhat <- fixed.dum$fitted
scatterplot(yhat~Panel$x1|Panel$country, boxplots=FALSE, xlab="x1", ylab="yhat",smooth=FALSE)
abline(lm(Panel$y~Panel$x1),lwd=3, col="red")