Introducción a la Regresión Lineal Simple

IN2039: Visualización de Datos

Alan R. Vázquez

Departamento de Ingeniería Industrial

Agenda

  1. Introducción

  2. Relación entre dos variables numéricas

  3. Regresión lineal simple

  4. Regresión local

Carguemos las librerías

Carguemos las librerías ggplot2, ggformula, readxl, y dplyr en Google Colab y R antes de comenzar.

# Nos se te olvide instalar la librería "ggformula" en Google Colab.
# install.packages("ggformula")
library(readxl)
library(ggplot2)
library(ggformula)
library(dplyr)

Ejemplo

Usemos datos de 392 autos sobre sus millas por galón, número de cilindros, caballos de fuerza, peso, aceleración, año, origen, entre otras variables.

Los datos están en el archivo “auto_dataset.xlsx”.

auto_data = read_excel("auto_dataset.xlsx") 
auto_data %>% head() 
# A tibble: 6 × 9
    mpg cylinders displacement horsepower weight acceleration  year origin  
  <dbl>     <dbl>        <dbl> <chr>       <dbl>        <dbl> <dbl> <chr>   
1    18         8          307 130          3504         12      70 American
2    15         8          350 165          3693         11.5    70 American
3    18         8          318 150          3436         11      70 American
4    16         8          304 150          3433         12      70 American
5    17         8          302 140          3449         10.5    70 American
6    15         8          429 198          4341         10      70 American
# ℹ 1 more variable: `car name` <chr>

Relación entre dos variables numéricas

Principio 1: Formula el mensaje

Preguntas que podemos contestar con la regresión lineal simple:

  • ¿Existe una relación entre una variable de respuesta y los predictores?

  • ¿Qué tan fuerte es la relación?

  • ¿Cuál es la incertidumbre?

  • ¿Con qué precisión podemos predecir un resultado futuro?

¿Hay una relación entre el peso de un auto y sus millas por galón?

Problema de regresión

Objetivo: encontrar la mejor función \(f(X)\) del predictor \(X\) que describa la respuesta \(Y\).

En términos matemáticos, queremos establecer la siguiente relación

\[ Y = f(X) + \epsilon, \]

donde \(\epsilon\) es un error natural (aleatorio).

  • En la práctica es muy difícil saber la verdadera estructura de la función \(f(X)\).
  • Lo mejor que podemos hacer es construir una aproximación (función) \(\hat{f}(X)\).

  • Hay varias estrategias para construir \(\hat{f}(X)\), una de las más utilizadas es:

    1. Definir una “estructura” o “fórmula” simple.
    2. Estimar los elementos de la “fórmula” usando los datos.

Regresión lineal simple

Modelo de regresión lineal

Una función \(f(X)\) muy común para predecir una respuesta \(Y\) es el modelo de regresión lineal.

Tiene la forma matemática:

\[ \hat{Y}_i = \hat{\beta}_0 + \hat{\beta}_1 X_i, \]

  • Donde \(i\) es el indice de las \(n\) observaciones, y
  • \(\hat{Y}_i\) es la predicción del valor real de la respuesta \(Y_i\) asociada a un valor del predictor igual a \(X_i\).
  • Los valores \(\hat{\beta}_0\) y \(\hat{\beta}_1\) se llaman coeficientes del modelo.

Principio 2: Convierte los datos en información

Los valores de \(\hat{\beta}_0\) y \(\hat{\beta}_1\) se obtienen usando los datos. Específicamente, las formulas para los coefficientes son:

\[\hat{\beta}_1 = \frac{ \sum_{i=1}^{n} (Y_i - \bar{Y}) (X_i - \bar{X}) }{\sum_{i=1}^{n} (X_i - \bar{X})^2} \text{ y } \hat{\beta}_0 = \bar{Y} - \hat{\beta}_1 \bar{X},\]

donde \(\bar{X} = \sum_{i=1}^n X_i/n\) y \(\bar{Y} = \sum_{i=1}^n Y_i/n\).

Estas fórmulas se obtienen del método de mínimos cuadrados.

Ajustando modelos de regresión en R

Para ajustar un modelo de regresión lineal usamos el comando pipe %>% junto con la función gf_lm().

gf_point(mpg ~ weight, data = auto_data) %>% gf_lm(mpg ~ weight)

Podemos afectar el color, grosor, y tipo de linea usando los argumentos color, linewidth, y lty, respectivamente, en la función gf_lm().

gf_point(mpg ~ weight, data = auto_data) %>% 
  gf_lm(mpg ~ weight, color = "red", lty = 1, linewidth = 3)

Para nuestro ejemplo

\(\hat{Y}_i = 46.32 -0.0076 X_i\)

La fórmula

\(\text{mpg}_i = 46.32 - 0.0076 \times \text{peso}_i\)

Interpretación de los coefficientes

¿Qué significa \(\hat{\beta}_0 = 46.32\)?

\(\hat{\beta}_0\) es el valor promedio de la respuesta cuando \(X_i = 0\).

¿Tiene sentido \(\hat{\beta}_0 = 46.32\)?

No! Porque no hay autos con un peso igual a 0.

¿Qué significa \(\hat{\beta}_1 = - 0.0076\)?

\(\hat{\beta}_1\) es el cambio promedio en la respuesta al aumentar \(X_i\) en una unidad.

Interpretación de \(\hat{\beta}_1\)



Por cada libra extra en el peso de un auto, el auto tiene una reducción promedio de 0.0076 millas por galón.

¿Caen todos los puntos exactamente sobre la linea?


No! El modelo tiene errores.

Técnicamente, el error de la i-ésima observación es \(e_i = Y_i - \hat{Y}_i = Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i\).

De hecho …

Las fórmulas para \(\hat{\beta}_0\) y \(\hat{\beta}_1\) se obtienen al minimizar la suma de cuadrados de los errores.

Específicamente, el método de mínimos cuadrados obtiene \(\hat{\beta}_0\) y \(\hat{\beta}_1\) al minimizar la función:

\[\begin{align} g(\hat{\beta}_0, \hat{\beta}_1) & = \sum_{i=1}^{n} (e_{i})^2 = \sum_{i=1}^{n} (Y_i - (\hat{\beta}_0 + \hat{\beta}_1 X_i ))^2. \end{align}\]

Inspeccionar los errores

El comportamiento de los errores (\(e_i\)’s) indica si el modelo es correcto o no. Si el modelo es correcto, los errores se deben de comportar como sigue:

  1. En promedio, deben de estar alrededor de 0 para cada valor predecido \(\hat{Y}_i\).
  2. Tener una dispersión constante alrededor de cada valor predecido \(\hat{Y}_i\).
  3. Ser independientes los unos de los otros. Es decir, no estar relacionados.

Análisis gráfico de errores

Para evaluar estos comportamientos, usamos dos gráficas de dispersión de los errores:

  • Eje Horizontal = Errores y Eje Vertical = Predicciones. Está gráfica permite validar los primeros dos supuestos (errores alrededor de 0 y con dispersión constante).

  • Eje Horizontal = Errores y Eje Vertical = Tiempo en que se tomó la observación. Está gráfica permite validar el tercer supuesto (independencia).

Dispersión constante

Code
mi_modelo = lm(mpg ~ weight, data = auto_data)
datos_modelo = tibble("Predicciones" = mi_modelo$fitted, 
                           "Errores" = mi_modelo$residuals)

mi_diagrama_residuos = gf_point(Errores ~ Predicciones, data = datos_modelo, color = "darkblue", size = 2) 
mi_diagrama_residuos = mi_diagrama_residuos + theme(axis.text=element_text(size=20), axis.title=element_text(size=20))
mi_diagrama_residuos = mi_diagrama_residuos %>% gf_hline(yintercept = 0, lty = 2)
mi_diagrama_residuos

Errores independientes

Code
mi_modelo = lm(mpg ~ weight, data = auto_data)
datos_modelo = tibble("Tiempo" = 1:nrow(auto_data), 
                           "Errores" = mi_modelo$residuals)

mi_diagrama_residuos = gf_point(Errores ~ Tiempo, data = datos_modelo, color = "darkblue", size = 2) 
mi_diagrama_residuos = mi_diagrama_residuos + theme(axis.text=element_text(size=20), axis.title=element_text(size=20))
mi_diagrama_residuos = mi_diagrama_residuos %>% gf_hline(yintercept = 0, lty = 2)
mi_diagrama_residuos

Comentarios

  • Las dos gráficas no validan los supuestos del modelo de regresión lineal.

  • Existen métodos para corregir esto pero no los veremos aquí.

  • Si ambos supuestos no son validados, entonces el modelo de regresión lineal se usa sólo como una linea de tendencia o referencia de los datos.

  • Si se validan ambos supuestos, entonces el modelo se puede usar para predecir la respuesta en nuevas observaciones y para verificar si existe una relación significativa entre \(Y\) y \(X\).

  • Veremos más sobre regresión lineal en IN1002B e IN1001B.

Regresión Local

Regresión local

Es una alternativa moderna al modelo de regresión lineal simple para capturar relaciones complejas entre dos variables.

Idea básica: Ajusta modelos de regresión lineal a pequeños subconjuntos de los datos. Los subconjuntos están formados por observaciones cercanas entre sí.

El método más común para ajustar una regresión local a los datos es loess. Aquí omitiremos los detalles del método porque requieren de conceptos avanzados de estadística.

En R, ajustamos una regresión local usando la función gf_smooth().

gf_point(mpg ~ weight, data = auto_data) %>% 
  gf_smooth(mpg ~ weight, method = "loess")

Podemos cambiar el color, grosor, y tipo de linea usando los argumentos color, linewidth, y lty, respectivamente, en la función gf_smooth().

gf_point(mpg ~ weight, data = auto_data) %>% 
  gf_smooth(mpg ~ weight, method = "loess",
            color = "red", linewidth = 2, lty = 2)

Otro ejemplo

Consideremos la relación entre la aceleración de los autos (acceleration) y el volumen total de todos los cilindros del motor (displacement).

gf_point(acceleration ~ displacement, data = auto_data)

Regresión lineal

gf_point(acceleration ~ displacement, data = auto_data) %>% 
  gf_lm(acceleration ~ displacement)

Regresión local

gf_point(acceleration ~ displacement, data = auto_data) %>% 
  gf_smooth(acceleration ~ displacement, method = "loess")

Discusión

  • El modelo de regresión lineal simple es fácil de interpretar debido a su estructura:

\[ \hat{Y}_i = \hat{\beta}_0 + \hat{\beta}_1 X_i. \]

  • Sin embargo, puede ser inflexible para capturar relaciones complejas entre dos variables.


  • La regresión local es flexible y permite capturar relaciones complejas entre dos variables.

  • Sin embargo, tiene un bajo nivel de interpretabilidad porque no provee una equación explícita para relacionar el predictor \(X\) con la respuesta \(Y\).

Regresar a página principal