Análisis de Residuos

R para introducir a la Econometría: Análisis de Residuos

Estudiar el comportamiento de los residuos u_i = Y_i - \hat{Y}_i es de vital importancia para el análisis de regresión, pues varios de los supuestos del Modelo Clásico de Regresión Lineal (MCRL) hacen énfasis en los residuos, es por esto que se recurre a herramientas que nos permitan verificar si se cumplen estos supuestos y así, aumentar la confiabilidad sobre las conclusiones que se hagan a partir del modelo planteado.

También pudiera interesarte

Anuncios

Tabla de Contenidos

Los análisis que se exponen en esta lectura son los siguientes:

Datos a considerar para los ejemplos

Consideremos un pequeño conjunto de datos, particularmente, los datos que se encuentran en la Tabla 3.2 del libro de Econometría de Damodar N. Gujarati and Dawn Porter en su quinta edición. Este conjunto de datos proporciona los datos primarios que se necesitan para estimar el efecto cuantitativo de la escolaridad en los salarios:

ObservaciónSalarioEscolaridad
14.45676
25.777
35.97878
47.33179
57.318210
66.584411
77.818212
87.835113
911.022314
1010.673815
1110.836116
1213.61517
1313.53118
Tabla 3.2

Residuos independientes

Una vez que hemos planteado un modelo lineal, es importante que los residuos alberguen toda esa información que no podemos explicar con la variable independiente, es por esta razón que uno de los supuestos del Modelo Clásico de Regresión Lineal propone que los residuos deben ser independientes de la variable independiente.

Considerando el caso en que la regresora es estocástica, los valores que toma la variable independiente X pueden haber sido muestreados junto con la variable dependiente Y. En este caso se supone que la variable X y el término de error son independientes u, esto es,

cov(X_i, u_i)=0.

Para calcular en R la covarianza de entre la variable independiente X y los residuos de nuestro modelo u, recurrimos a la instrucción cov() usando la siguiente sintaxis:

cov(X,Y-lm(Y~X)$fitted.values)

Donde, Y.e es la variable que almacena los valores estimados de Y. Sin embargo, recordando que si definimos el modelo lineal usando la instrucción lm(), podemos hacer un llamado a los residuos usando la sintaxis lm(Y~X)$residuals, de esta forma, podemos determinar la covarianza usando la siguiente sintaxis:

cov(X,lm(Y~X)$residuals)

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos calcular la covarianza entre la variable independiente Escolaridad y los residuos lm(salario~escolaridad)$residuals, para esto, usamos la siguiente sintaxis:

cov(escolaridad,lm(salario~escolaridad)$residuals)

Al ejecutar esta instrucción obtenemos la covarianza que buscamos, que en este caso es igual a 2.276825e-18, notando que este valor es prácticamente cero, concluimos que los residuos son independientes de la variable Escolaridad.

En su consola debería aparecer:

> cov(escolaridad,se.lm$residuals)
[1] 2.276825e-18
Anuncios

Media igual a cero

La media de los residuos (o perturbaciones) debe ser igual a cero. Para calcular en R la media de los residuos de nuestro modelo u, recurrimos a la instrucción mean(), entonces si previamente hemos definido el modelo lineal usando la instrucción lm() usamos la siguiente sintaxis:

mean(Y-lm(Y~X)$fitted.values)

Donde, Y.e es la variable que almacena los valores estimados de Y. Sin embargo, recordando que si definimos el modelo lineal usando la instrucción lm(), podemos hacer un llamado a los residuos usando la sintaxis lm(Y~X)$residuals, de esta forma, podemos determinar la covarianza usando la siguiente sintaxis:

mean(lm(Y~X)$residuals)

También se pueden apreciar los residuos al observar un resumen del modelo lineal recurriendo la instrucción summary(), usando la siguiente sintaxis:

summary(lm(Y~X)$residuals)

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos calcular la media de los residuos lm(salario~escolaridad)$residuals, para esto, usamos la siguiente sintaxis:

mean(lm(salario~escolaridad)$residuals)

Al ejecutar esta instrucción obtenemos la media de los residuos, que en este caso es igual a 8.515157e-18, notando que este valor es prácticamente cero, concluimos que la media de los residuos es igual a cero.

En su consola debería aparecer:

> mean(se.lm$residuals)
[1] 8.515157e-18
Anuncios

Homocedasticidad

Para estudiar la homocedasticidad de los residuos o la homogeneidad de la varianza, se estudia qué tan constante es la varianza de los residuos, es decir, se estudia la heterocedasticidad de los residuos y se verifica que esta sea lo más pequeña posible. Para esto, es necesario estudentizar de los residuos de la siguiente forma:

\dfrac{u-\overline{u}}{\hat{\sigma}^2}

Posteriormente, comparamos los residuos estudentizados con los valores estimados de la variable dependiente y esto se pude hacer de dos formas: Gráficamente o Estadísticamente.

Gráficamente

Haciendo diagrama de dispersión recurriendo a la instrucción plot(), entonces si previamente hemos definido el modelo lineal usando la instrucción lm() usamos la siguiente sintaxis:

std.res = (lm(Y~X)$residuals-mean(lm(Y~X)$residuals))/sigma2.e
plot(lm(Y~X)$fitted.values,std.res)

En un gráfico donde no haya heterocedasticidad (es decir, que indique homocedasticidad), es necesario que los puntos estén distribuidos de forma aleatoria y repartidos con equidad a través a lo largo del Eje Vertical, es decir, si se traza una recta horizontal en cero, estos no deberían estar acumulados ni por encima ni por debajo de esta recta.

Este gráfico de dispersión se puede generar con mayor detalle usando la instrucción plot() sobre el modelo lineal, que genera cuatro gráficos pero nos interesarán sólo dos de ellos, el 1 y el 3:

plot(lm(Y~X),1)
plot(lm(Y~X),3)

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos generar un diagrama de dispersión de los residuos y de la raíz cuadrada de los residuos estudentizados uno junto al otro combinando la instrucciones par() y plot(), para esto, usamos la siguiente sintaxis:

#par(mfrow = c(1,2))
plot(lm(salario~escolaridad),1)
plot(lm(salario~escolaridad),3)

Al ejecutar esta instrucción obtenemos los gráficos que estamos buscando:

La línea roja es un ajuste local de los residuos (ponderada localmente) que suaviza los puntos del diagrama de dispersión para facilitad la detección patrones en los residuos. La situación ideal es que esta línea roja sea una se asemeje a una recta horizonal centrada en cero.

En este ejemplo, la línea roja no es una recta horizonal centrada en cero pero estos parecieran estar al menos, distribuidos de forma aleatoria. Sin embargo, debido a la poca cantidad de datos, no podemos hacer una conclusión fehaciente.

Estadísticamente

Prueba de Breush-Pagan

La Breush-Pagan Test (Prueba de Breusch–Pagan), parte del hecho que la media de los residuos es igual a cero y si la varianza no depende de la variable independiente, se puede obtener una estimación de esta varianza a partir del promedio de los cuadrados de los residuos.

De esta forma, a partir del contrarrecíproco, se concluye que si esta estimación de la varianza no se puede obtener, entones la varianza está linealmente relacionada con la variable independiente. Para esto se define una regresión lineal auxiliar para el cuadrado de los residuos

\hat{u}^2 = \gamma_0 + \gamma_1 \cdot x + v

Se plantea entonces como hipótesis nula que existe homocedasticidad y como hipótesis alternativa que existe heterocedasticidad. Es una prueba de chi-cuadrado: el estadístico de prueba se distribuye n\chi^2 con k grados de libertad. Si el estadístico de prueba tiene un p-value por debajo de un umbral apropiado, entonces se rechaza la hipótesis nula de homocedasticidad y se asume heterocedasticidad.

Para llevar a cabo esta prueba en R, se carga a la librería lmtest y en ella recurrimos a la instrucción bptest() usando la siguiente sintaxis:

library(lmtest)
bptest(lm(Y~X))

También se puede llevar a cabo esta prueba en R, cargando la librería car y en ella recurrimos a la instrucción ncvTest() usando la siguiente sintaxis:

library(car)
ncvTest(lm(Y~X))

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos llevar a cabo la Prueba de Breusch–Pagan, para esto, usamos la siguiente sintaxis:

library(lmtest)
bptest(lm(salario~escolaridad))

Al ejecutar esta instrucción obtenemos los resultados de la prueba, donde nos interesará de forma particular que el p-value es igual a 0.3394, notando que este valor es mayor que 0.05, entonces no rechazamos la hipótesis nula y podemos asumir que existe homocedasticidad.

En su consola debería aparecer:

> library(lmtest)
> bptest(lm(salario~escolaridad))
	studentized Breusch-Pagan test
data:  lm(salario ~ escolaridad)
BP = 0.91274, df = 1, p-value = 0.3394
Anuncios

No-Autocorrelación

Sin consideramos dos valores de la variable independiente X, digamos X_i y X_j con (i\neq j), la correlación entre dos u_i y u_j cualesquiera (i\neq j) es cero. En pocas palabras, estas observaciones se muestrean de manera independiente. Es decir, se verifica que

cov(u_i, u_j |X_i, X_j)=0 o, si X no es estocástica, cov(u_i, u_j)=0

Esta verificación se pude hacer de dos formas: Gráficamente o Estadísticamente.

Gráficamente

Diagrama de Dispersión

Haciendo diagrama de dispersión recurriendo a la instrucción plot(), entonces si previamente hemos definido el modelo lineal usando la instrucción lm() usamos la siguiente sintaxis:

plot(lm(Y~X)$residuals)

Este gráfico de dispersión se puede generar con mayor detalle usando la instrucción plot() sobre el modelo lineal, que genera cuatro gráficos pero en este caso nos interesarán sólo dos de ellos, el 1 y el 3:

plot(lm(Y~X),1)
plot(lm(Y~X),3)

Un indicador de no autocorrelación es que en el gráfico de dispersión no se presente ningún patrón lineal de comportamiento, en términos coloquiales: deben estar todos a lo loco. Dicho esto, los gráficos de dispersión, sirven principalmente como indicadores pero si no se tiene certeza sobre lo que se observa, lo mejor es llevar a cabo una prueba estadística.

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos generar un diagrama de dispersión de los residuos y de la raíz cuadrada de los residuos estudentizados uno junto al otro combinando la instrucciones par() y plot(), para esto, usamos la siguiente sintaxis:

#par(mfrow = c(1,2))
plot(lm(salario~escolaridad),1)
plot(lm(salario~escolaridad),3)

Al ejecutar esta instrucción obtenemos los gráficos que estamos buscando:

La línea roja es un ajuste local de los residuos (ponderada localmente) que suaviza los puntos del diagrama de dispersión para facilitad la detección patrones en los residuos. Lo que buscamos es que esta línea roja no describa un comportamiento lineal recta creciente ni decreciente.

En este ejemplo, la línea roja no es una línea recta creciente ni decreciente por lo que estos gráficos sugieren que los residuos no presentan autocorrelación. Hay que tomar en cuenta que los gráficos sirven meramente como indicadores, así que también se deben llevar a cabo pruebas estadísticas.

Estadísticamente

Prueba de Durbin-Watson

Para estudiar la autocorrelación de los residuos, es necesario estudiar la autocorrelación para cualesquiera dos u_i y u_j, esta tarea puede resultar tediosa, así que una de las alternativas es aplicar la Durbin-Watson test (Prueba de Durbin-Watson) que originalmente es usada para datos generados a través del tiempo (Series de Tiempo) para observar si existe una tendencia al comparar periodos previos. En este caso se estudia la relación entre los valores separados el uno del otro por un intervalo de tiempo igual a uno (cada elemento, con su anterior), esto es lo que se conoce como el rezago igual a 1.

Considerando una regresión auxiliar para los residuos expresada como una serie de tiempo usando el coeficiente de correlación \rho, de la forma:

u_i = \rho u_{i-1}+ \nu_i

Se plantea la hipótesis nula de que usando el coeficiente de correlación \rho = 0 y la hipótesis alternativa es \rho \neq 0, para probar esta hipótesis se define el siguiente estadístico de prueba:

d = \dfrac{\sum_{i=2}^n (u_i - u_{i-1})^2}{\sum_{i=1}^n u_i^2}

Se denota con la letra d (por Durbin-Watson). Entonces, considerando el coeficiente de correlación muestral de los residuos \hat{\rho}, el estadístico de prueba d es aproximadamente 2(1-\hat{\rho}, por lo tanto, si este estadístico de prueba es igual a 2, esto implica que \hat{\rho} = 0 indicando que no existe correlación (serial) entre los residuos.

Para llevar a cabo esta prueba en R, se carga a la librería lmtest y en ella recurrimos a la instrucción dbtest() usando la siguiente sintaxis:

library(lmtest)
dwtest(lm(Y~X))

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos llevar a cabo la Prueba de Durbin-Watson, para esto, usamos la siguiente sintaxis:

library(lmtest)
dwtest(lm(salario~escolaridad))

Al ejecutar esta instrucción obtenemos los resultados de la prueba, donde nos interesará de forma particular que el p-value es igual a 0.1992, notando que este valor es mayor que 0.05, entonces no rechazamos la hipótesis nula y podemos asumir que los residuos no presentan autocorrelación.

También podemos finarnos en el estadístico de Durbin-Watson, que en este caso es igual a 1.738, que está cercano a 2. Entonces no rechazamos la hipótesis nula y podemos asumir que los residuos no presentan autocorrelación.

En su consola debería aparecer:

> dwtest(lm(salario~escolaridad))
	Durbin-Watson test
data:  lm(salario ~ escolaridad)
DW = 1.738, p-value = 0.1992
alternative hypothesis: true autocorrelation is greater than 0
Anuncios

Normalidad

El modelo clásico de regresión lineal normal supone que cada u_i está normalmente distribuida si

  • Media: E(u_i)=0
  • Varianza: var(u_i) = \sigma^2
  • Covarianza: cov(u_i,u_j) = 0, \, i \neq j

Estos supuestos se expresan en forma más compacta como

u_i \sim N(0,\sigma^2)

Donde el símbolo \sim significa distribuido, N denota distribución normal y los términos entre paréntesis representan los dos parámetros de la distribución normal: la media y la varianza, respectivamente.

Esta verificación se pude hacer de dos formas: Gráficamente o Estadísticamente.

Gráficamente

Histograma

Podemos graficar un histograma recurriendo a la instrucción hist() para hacer un histograma representando las frecuencias, entonces si previamente hemos definido el modelo lineal usando la instrucción lm() usamos la siguiente sintaxis:

hist(lm(Y~X)$residuals)

Aunque si queremos ver un histograma representando la densidad, incorporamos la opción prob = TRUE en la instrucción hist() y más aún, si queremos representar sobre nuestro histograma la línea de densidad, recurrimos a la instrucción line() en conjunto con la instrucción density() usando la siguiente sintaxis:

hist(lm(Y~X)$residuals,prob = TRUE)
lines(density(lm(Y~X)$residuals))

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos generar un histograma de los residuos usando la siguiente sintaxis:

hist(se.lm$residuals,prob = TRUE)
lines(density(se.lm$residuals))

Al ejecutar esta instrucción obtenemos el gráfico que estamos buscando:

El gráfico de barras que representa el histograma no demuestra de forma concreta una distribución normal y aunque la línea pareciera dibujar una especie de campana con una protuberancia en el lado izquierdo, no podemos hacer una conclusión fehaciente, así que también se deben llevar a cabo pruebas estadísticas.

Normal QQ-Plot

El QQ-Plot se traduce como el Diagrama de Cuantil-Cuantil y es un diagrama de dispersión que permite comparar distribución de probabilidades. Una gráfica Q-Q es una gráfica de dispersión creada al graficar dos conjuntos de cuantiles entre sí. Si ambos conjuntos de cuantiles provienen de la misma distribución, deberíamos ver los puntos formando una línea que es aproximadamente recta.

Es decir, al comparar la distribución de probabilidad normal con la distribución de probabilidad de los residuos de nuestro modelo lineal, si estos forman una línea recta, este es un indicador de que los residuos están distribuidos de forma normal.

Este gráfico se puede generar con usando la instrucción plot() sobre el modelo lineal, que genera cuatro gráficos pero en este caso nos interesará sólo uno de ellos, el 2:

plot(lm(Y~X),2)

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos generar un histograma de los residuos usando la siguiente sintaxis:

plot(lm(salario~escolaridad),2)

Al ejecutar esta instrucción obtenemos el gráfico que estamos buscando:

Aunque no de forma precisa, podemos notar que el diagrama de dispersión pareciera ajustarse a la recta indentidad, representada con una línea punteada, por lo que este gráfico sugiere que sí hay una distribución normal de los residuos. Sin embargo, no podemos hacer una conclusión fehaciente, así que también se deben llevar a cabo pruebas estadísticas.

Estadísticamente

Jarque–Bera test

La Prueba de Jarque-Bera partiendo del hecho de que una distribución normal tiene coeficiente de asimetría igual a 0 y Curtosis igual a 3. Estos dos elementos se miden a partir de los residuos de nuestro modelo lineal usando la siguientes formulas, respectivamente:

S = \dfrac{ \hat{\mu}_3 }{ \hat{\sigma}^3 } = \dfrac{\frac1n \sum_{i=1}^n (x_i-\bar{x})^3} {\left(\frac1n \sum_{i=1}^n (x_i-\bar{x})^2 \right)^{3/2}} y K = \dfrac{ \hat{\mu}_4 }{ \hat{\sigma}^4 } = \dfrac{\frac1n \sum_{i=1}^n (x_i-\bar{x})^4} {\left(\frac1n \sum_{i=1}^n (x_i-\bar{x})^2 \right)^{2}}

Definiendo así el coeficiente de asimetría (S) y la curtosis (K), se define el estadístico de Jarque-Bera de la siguiente forma:

\mathit{JB} = \frac{n}{6} \left( S^2 + \frac14 (K-3)^2 \right)

Si el valor del estadístico es igual a cero, este es un indicador de que la distribución de los residuos es normal. Más aún, El estadístico de Jarque-Bera se distribuye asintóticamente como una distribución chi cuadrado con dos grados de libertad y puede usarse para probar la hipótesis nula de que los datos pertenecen a una distribución normal. La hipótesis nula es una hipótesis conjunta de que la asimetría y el exceso de curtosis son nulos (asimetría = 0 y curtosis = 3)

Para llevar a cabo esta prueba en R, se carga a la librería tseries y en ella recurrimos a la instrucción jarque.bera.test() usando la siguiente sintaxis:

library(tseries)
jarque.bera.test(lm(Y~X)$residuals)

Ejemplo

Una vez que hemos calculado el modelo lineal que define este conjunto de datos usando la instrucción lm(), podemos llevar a cabo la Prueba de Jarque-Bera, para esto, usamos la siguiente sintaxis:

library(tseries)
jarque.bera.test(se.lm$residuals)

Al ejecutar esta instrucción obtenemos los resultados de la prueba, donde nos interesará de forma particular que el p-value es igual a 0.6608, notando que este valor es mayor que 0.05, entonces no rechazamos la hipótesis nula y podemos asumir que el coeficiente de asimetría es igual a cero y que la curtosis es igual tres, por lo que asumimos que los residuos tienen una distribución normal.

En su consola debería aparecer:

> library(tseries)
> jarque.bera.test(se.lm$residuals)
	Jarque Bera Test
data:  se.lm$residuals
X-squared = 0.8287, df = 2, p-value = 0.6608
Anuncios

Bibliografía complementaria


Observaciones

Las pruebas expuestas en esta lección sirven para hacer algunas aseveraciones y su carácter didáctico es importante para entender el análisis de residuos, sin embargo, Jeffrey Wooldridge en su cuenta de twitter hace algunas observaciones que deben ser consideradas al hacer trabajos más especializados.

¿Tienes dudas? ¿Necesitas más ejemplos? No dudes en escribir.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .