IN2039: Visualización de Datos
Departamento de Ingeniería Industrial
Introducción
Relación entre dos variables numéricas
Regresión lineal simple
Regresión local
Carguemos las librerías ggplot2
, ggformula
, readxl
, y dplyr
en Google Colab y R antes de comenzar.
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”.
# 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>
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?
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).
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:
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, \]
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.
Para ajustar un modelo de regresión lineal usamos el comando pipe %>%
junto con la función gf_lm()
.
Podemos afectar el color, grosor, y tipo de linea usando los argumentos color
, linewidth
, y lty
, respectivamente, en la función gf_lm()
.
\(\hat{Y}_i = 46.32 -0.0076 X_i\)
\(\text{mpg}_i = 46.32 - 0.0076 \times \text{peso}_i\)
¿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.
Por cada libra extra en el peso de un auto, el auto tiene una reducción promedio de 0.0076 millas por galón.
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\).
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}\]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:
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).
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
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
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.
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()
.
Podemos cambiar el color, grosor, y tipo de linea usando los argumentos color
, linewidth
, y lty
, respectivamente, en la función gf_smooth()
.
Consideremos la relación entre la aceleración de los autos (acceleration
) y el volumen total de todos los cilindros del motor (displacement
).
\[ \hat{Y}_i = \hat{\beta}_0 + \hat{\beta}_1 X_i. \]
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\).
Tecnológico de Monterrey