Introducción a la regresión lineal simple

Gustavo Martínez-Valdes

6/3/2022

Objetivo de la sesión.

  1. Que el alumno se adentre en una técnica estadística que le permita medir la magnitud del efecto causal entre dos variables continuas.
  2. Al final de la sesión se espera que el alumno conozca los elementos de la fórmula de regresión lineal simple, la manera de calcular los coeficientes de regresión, evalúe los supuestos de comportamiento del modelo y pueda solicitar éste análisis en la paquetería R y R Studio.

Preparación del ambiente de trabajo.

Sys.setlocale("LC_ALL", "en_US.UTF-8") 
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
library(tidyverse)
library(PerformanceAnalytics)
library(stargazer)
library(lmtest)

Paso de la asociación a la causalidad.

La asociación se refiere a la covaración entre dos variables (\(X\)\(Y\)).

La causalidad es entendida como “efecto causal” (\(X\) -> \(Y\)). (KKV, 1997)

Interés en evaluar el efecto de una variable \(X\) (Variable Independiente) sobre otra \(Y\) (variable Dependiente).

La meta de medir el efecto causal es la Predicción.

Datos.

Se utilizará la matriz de datos sobre el Índice de Desarrollo Humano (IDH) elaborada por el PNUD-ONU, agregado a nivel municipal en México para los años 2000 y 2005.

datos_idh <- read.csv("~/Dropbox/R/idh_mpio_2000_2005.csv", header = TRUE)
str(datos_idh)
## 'data.frame':    2454 obs. of  22 variables:
##  $ id_mpio                      : int  9014 19019 20350 9016 9003 19046 8019 28009 15054 15020 ...
##  $ entidad                      : chr  "Distrito Federal" "Nuevo León" "Oaxaca" "Distrito Federal" ...
##  $ mpio                         : chr  "Benito Juárez" "San Pedro Garza García" "San Sebastián Tutla" "Miguel Hidalgo" ...
##  $ clasificacion_2000           : int  1 2 16 4 3 6 13 21 9 20 ...
##  $ grado_idh_2005               : chr  "alto" "alto" "alto" "alto" ...
##  $ idh_2000                     : num  0.916 0.892 0.854 0.882 0.884 ...
##  $ clasificacion_2005           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ idh_2005                     : num  0.951 0.95 0.92 0.919 0.917 ...
##  $ tasa_moralidad_infantil_2000 : num  17.6 18.4 18 19.1 18.8 ...
##  $ tasa_mortalidad_infantil_2005: num  3.02 3.19 5.28 7.3 6.96 ...
##  $ tasa_alfabetizacion_2000     : num  98.9 97.9 97.3 97.9 97.5 ...
##  $ tasa_alfabetizacion_2005     : num  97.7 98.3 98.5 97.9 97.9 ...
##  $ tasa_asistencia_escolar_2000 : num  77.4 65.3 80.5 70.6 73.6 ...
##  $ tasa_asistencia_escolar_2005 : num  78.7 67.4 81.8 73.1 75.1 ...
##  $ usd_ppc_2000                 : num  31182 27914 10349 21290 20911 ...
##  $ usd_ppc_2005                 : num  27824 33813 16441 21549 19724 ...
##  $ indice_salud_2000            : num  0.874 0.868 0.871 0.862 0.864 ...
##  $ indice_salud_2005            : num  1 0.998 0.98 0.963 0.966 ...
##  $ indice_educacion_2000        : num  0.917 0.87 0.917 0.888 0.895 ...
##  $ indice_educacion_2005        : num  0.914 0.88 0.929 0.897 0.903 ...
##  $ indice_ingreso_2000          : num  0.958 0.94 0.774 0.895 0.892 ...
##  $ indice_ingreso_2005          : num  0.939 0.972 0.852 0.897 0.882 ...

Variables de interés.

Buscaremos identificar el efecto que tiene el ingreso monetario (\(X\)) sobre la mortalidad infantil (\(Y\)) para el año 2005.

¿Cuál sería la hipótesis de trabajo que se puede derivar?

Variables a utilizar:

Distribución de las variables:

hist(datos_idh $ usd_ppc_2005)

hist(datos_idh $ tasa_mortalidad_infantil_2005)

Aspectos al estudiar una “relación”.

Las relaciones existentes entre variables es un objeto del análisis en las Ciencias Sociales.

3 aspectos al estudiar una relación entre variables:

¿Hay asociación entre las variables?

La gráfica de dispersión es un buen instrumento para revisar la asociación entre las variables.

library(tidyverse)
library(PerformanceAnalytics)
dat_matrix <- datos_idh %>%
  select(tasa_mortalidad_infantil_2005, usd_ppc_2005)
PerformanceAnalytics::chart.Correlation(dat_matrix)

La distribución de cada una de las variables presenta sesgos hacia la derecha. No necesariamente tienen una distribución “normal”.
Esto se traduce en que su asociación se comporta más parecido a una curva.

Esto es un problema para el análisis inferencial del modelo de regresión lineal.

Transformando las variables.

Debido a la forma de distribución de las variables, éstas se transformarán al multiplicarse por su logaritmo natural para, así, buscar distribuciones con “normalidad”.

dat_matrix <- dat_matrix %>%
  mutate(log_usd = log(usd_ppc_2005),
         log_mort = log(tasa_mortalidad_infantil_2005))
chart.Correlation(dat_matrix)

En las gráficas de distribución se observa que la asociación entre las variables log_mort y log_usd parece más del tipo “lineal”, y el valor de su coeficiente de correlación de Pearson es de -0.73.

¿Cuál es el sentido y la fuerza de la asociación entre las variables?

Hasta aquí se puede plantear que sí existe asociación entre las variables \(X\) y \(Y\), y es estadísticamente significativa.

El problema explicativo -hasta el momento- radica en que asociación no supone causalidad.

Formas para evaluar el efecto causal.

Pero aún falta indagar: ¿Cuál es el efecto causal de \(X\) sobre \(Y\)?

Dos formas para evaluar el efecto causal:

  1. Recta de regresión lineal simple en una gráfica.
  2. Ecuación de regresión lineal simple.

1. Recta de mejor ajuste.

Meta del análisis: Interés en encontrar la línea que mejor se ajuste a la distribución de dos variables.

¿Cuál es la mejor recta que resume el comportamiento de la asociación entre \(X\) y \(Y\)?

datos_idh %>% #definición de data frame
  na.exclude(idh_2005) %>% #exclusión de datos perdidos
  ggplot(aes(y= tasa_mortalidad_infantil_2005, x = usd_ppc_2005)) + #definición del tamaño del lienzo
  geom_point(aes(color = tasa_alfabetizacion_2005)) + #definición del tipo de representación y adicionales
  labs(title = "Dispersión de mortalidad infantil e ingreso, 2005",
       x = "usd_ppc_2005",
       y = "tasa de mortalidad 2005") + #definición de etiquetas del gráfico
  geom_hline(aes(yintercept = mean(tasa_mortalidad_infantil_2005))) +
  geom_vline(aes(xintercept = mean(usd_ppc_2005))) +
  stat_smooth(method = "lm", # recta por el método de mínimos cuadrados
              col = "#C42126",
              se = FALSE, 
              size = 1)

La recta vertical en color negro se refiere al valor de la media para usd_ppc_2005.
La recta horizontal en color negro se refiere al valor de la media para tasa_mortalidad_2005.
La recta en diagonal en color rojo se refiere a la recta del método de mínimos cuadrados ordinarios (OLS).

Utilidad de la recta de regresión.

Pasos para encontrar la línea con mejor ajuste:

Resultado: línea de regresión de mínimos cuadrados ordinarios (Ordinary Least Squares[OLS]).

Utilidad de la recta de mejor ajuste:

2. Ecuación del modelo de regresión lineal simple.

El modelo más sencillo para representar la relación existente entre dos o más variables es a través del modelo lineal.  En este se asume que la interacción de las variables en la población se ajusta a una recta (y a su ecuación consecuente).

Ecuación para una recta: \[Y = b + mX\]

Diseño de modelos de regresión lineal simple.

Ahora debemos poner manos a la obra y, así, construir nuestro primer modelo de regresión lineal con las variables de interés.

options(scipen = 999)
modelo_1 <- lm(tasa_mortalidad_infantil_2005 ~ usd_ppc_2005, data = datos_idh, na.action = na.exclude)

De esta manera, nuestro primer modelo ya se ha generado y se guardó como un objeto nuevo en la ventana del ambiente.

names(modelo_1)
##  [1] "coefficients"  "residuals"     "effects"       "rank"         
##  [5] "fitted.values" "assign"        "qr"            "df.residual"  
##  [9] "xlevels"       "call"          "terms"         "model"

Este consiste en un objeto tipo lista que contiene 12 elementos. Algunos serán llamados posteriormente.

coef(modelo_1)
##  (Intercept) usd_ppc_2005 
## 33.227730594 -0.001699462

\[\hat{Y_i} = 33.23 - 0.0017 * X_i\]

Pero este modelo tiene el problema sobre el comportamiento “no normal” de las variables de interés.

Modelos adicionales.

Ahora se construirán dos modelos adicionales para mejorar el comportamiento de las variables.

modelo_2 <- lm(tasa_mortalidad_infantil_2005 ~ log(usd_ppc_2005), data = datos_idh, na.action = na.exclude)
coef(modelo_2)
##       (Intercept) log(usd_ppc_2005) 
##         128.22860         -12.24467
exp(coef(modelo_2))
##                                                           (Intercept) 
## 48862297823972996968210886162892778687274509114953170944.000000000000 
##                                                     log(usd_ppc_2005) 
##                                                        0.000004810707

La ecuación que se puede integrar aquí es \[\hat{Y_i} = 128.23 - 0.000048 * X_i\]

modelo_3 <- lm(log(tasa_mortalidad_infantil_2005) ~ log(usd_ppc_2005), data = datos_idh, na.action = na.exclude)
coef(modelo_3)
##       (Intercept) log(usd_ppc_2005) 
##         8.0932561        -0.5841914
exp(coef(modelo_3))
##       (Intercept) log(usd_ppc_2005) 
##      3272.3251620         0.5575565

La ecuación que se puede integrar aquí es \[\hat{Y_i} = 8.09 - 0.56 * X_i\]

Análisis inferencial de los modelos.

El análisis inferencial de los modelos de regresión lineal avanza en 2 niveles:

  1. Análisis de la bondad de ajuste del modelo (capacidad explicativa).
  2. Significancia estadística de cada uno de los coeficientes de regresión (estimadores).
stargazer(modelo_1, modelo_2, modelo_3, type = "text")
## 
## =================================================================================================
##                                                        Dependent variable:                       
##                                 -----------------------------------------------------------------
##                                 tasa_mortalidad_infantil_2005  log(tasa_mortalidad_infantil_2005)
##                                       (1)            (2)                      (3)                
## -------------------------------------------------------------------------------------------------
## usd_ppc_2005                       -0.002***                                                     
##                                    (0.00004)                                                     
##                                                                                                  
## log(usd_ppc_2005)                                 -12.245***               -0.584***             
##                                                    (0.261)                  (0.011)              
##                                                                                                  
## Constant                           33.228***      128.229***                8.093***             
##                                     (0.281)        (2.247)                  (0.094)              
##                                                                                                  
## -------------------------------------------------------------------------------------------------
## Observations                         2,454          2,454                    2,454               
## R2                                   0.402          0.473                    0.540               
## Adjusted R2                          0.402          0.472                    0.539               
## Residual Std. Error (df = 2452)      6.286          5.905                    0.246               
## F Statistic (df = 1; 2452)       1,649.904***    2,196.480***             2,872.825***           
## =================================================================================================
## Note:                                                                 *p<0.1; **p<0.05; ***p<0.01
  1. A partir del estadístico de prueba F se puede identificar que los 3 modelos son estadísticamente significativos.
    A partir del valor del coeficiente de determinación (R cuadrado), se identifica que el modelo 3 muestra mayor capacidad explicativa o mejor bondad de ajuste.

  2. A partir de los valores de p-values asociados a cada coeficiente de regresión (representados por las estrellas), se identifica que la variable independiente es significativa estadísticamente en cada uno de los 3 modelos.

Interpretación de los coeficientes de regresión.

El coeficiente \(\alpha\) se corresponde con el intercepto de la recta o el valor de la ordenada al origen cuando la recta cruza al eje de la variable Y.  Es el valor esperado o promedio de \(Y\) cuando la variable \(X\) adquiere el valor de \(X=0\).

El coeficiente \(\beta\) consiste en la pendiente de la recta o “el cambio promedio en Y por el incremento de X en una unidad. (…), tasa de cambio de Y ante cambio de X” (Agresti y Finaly, 1986: 247, 255).  Y asume que dicha tasa es constante en la ecuación de la recta.

Por ejemplo, en el caso del modelo 1:

Evaluación de los supuestos del modelo de regresión.

Con el fin de poder generalizar el análisis inferencial del modelo, éste debe cumplir algunos supuestos básicos.

Los supuestos se evalúan en 2 dimensiones:

  1. Análisis de la parte estocástica del modelo (\(u_i\)).
  2. Supuestos sobre la especificación del modelo.

Análisis de la parte estocástica del modelo: distribución los residuos.

Se evalúan algunos aspectos sobre la forma de la distribución de los residuos (\(u_i\)).

1. Distribución normal de los residuos.

Revisión gráfica de la distribución y prueba de distribución normal.

hist(modelo_3 $residuals)

shapiro.test(modelo_3 $ residuals) # H0: la distribución es normal, Ha: la distribución no es normal
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_3$residuals
## W = 0.99354, p-value = 0.000000006156

La gráfica de histograma muestra una distribución parecida a una curva “normal”, pero esto no se confirma en la prueba de normalidad de Shapiro Wilkinson.

2. Sesgo en la distribución de los residuos.

Aquí se espera que la media de los residuos se ubique sobre el valor de 0.

summary(modelo_3 $residuals)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -1.009717 -0.160760 -0.001883  0.000000  0.151487  1.042532

Se observa que la media de los residuos es de 0.

3. Homoscedasticidad o varianza constante en los residuos.

plot(modelo_3, 1)

plot(modelo_3, 3)

Para confirmar el supuesto de homoscedasticidad se requiere que las curvas de tendencia (rojas) sean planas.

# prueba de Breush-Pagan
library(lmtest)
bptest(modelo_3) #se rechaza la H0
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_3
## BP = 61.266, df = 1, p-value = 0.000000000000004985

A partir del “p-value” se rechaza H0, de manera que los errores no tienen varianza constante.

4. No autocorrelación entre los residuos de cada caso.

### 4.1. Gráficamente
plot(residuals(modelo_3))

Se espera no encontrar ningún patrón entre los residuos asociados a cada caso. Pero aparentemente sí existe en los extremos de la distribución.

dwtest(modelo_3) #Se rechaza H0
## 
##  Durbin-Watson test
## 
## data:  modelo_3
## DW = 1.6827, p-value = 0.000000000000001639
## alternative hypothesis: true autocorrelation is greater than 0

Aquí se rechaza H0, por lo que los errores no son independientes.

Revisión visual de los residuos.

Una manera alternativa para revisar los residuos es mediante algunas gráficas.

Estas se solicitan de la siguiente manera:

plot(modelo_3)

Evaluación general del modelo.

El modelo tiene problemas al momento de cumplir los supuestos de normalidad, por lo que valdría la pena re diseñarlo removiendo los casos que alteran la distribución de los residuos.

Comentarios finales.