La Intuición Detrás del Método de Mínimos Cuadrados

Más allá de las fórmulas matemáticas, la idea central de los Mínimos Cuadrados es muy intuitiva. Su objetivo es encontrar la única línea recta que mejor se ajusta a un conjunto de puntos de datos. Pero, ¿qué significa “mejor”?

Paso 1: Visualizar los Datos (El Problema)

Imagina que tenemos un conjunto de datos que relaciona las horas de estudio (\(X\)) con la calificación en un examen (\(Y\)). Al graficarlos en un diagrama de dispersión, vemos una nube de puntos. Nuestro objetivo es trazar una línea a través de esta nube que represente la tendencia general.

# Cargamos la librería para graficar
library(ggplot2)

# Creamos datos de ejemplo para que el gráfico sea reproducible
set.seed(42) # para que siempre salgan los mismos números "aleatorios"
datos <- data.frame(
  horas_estudio = runif(30, 1, 10)
)
datos$calificacion <- 20 + 7 * datos$horas_estudio + rnorm(30, mean = 0, sd = 8)

# Graficamos el diagrama de dispersión
ggplot(datos, aes(x = horas_estudio, y = calificacion)) +
  geom_point(color = "blue", size = 3, alpha = 0.7) +
  labs(
    title = "Diagrama de Dispersión: Calificación vs. Horas de Estudio",
    x = "Horas de Estudio (X)",
    y = "Calificación Obtenida (Y)"
  ) +
  theme_minimal()

Podríamos trazar infinitas líneas a través de esos puntos. ¿Cuál es la mejor?

Paso 2: El Concepto de “Error” o “Residuo”

La “mejor” línea será aquella que esté lo más cerca posible de todos los puntos a la vez. Para medir qué tan “lejos” está nuestra línea de un punto de dato real, usamos el residuo.

Un residuo (\(e_i\)) no es más que la distancia vertical entre un punto observado (\(Y_i\)) y el punto correspondiente en nuestra línea de regresión (\(\hat{Y}_i\)).

  • Si el punto real está por encima de la línea, el residuo es positivo.
  • Si el punto real está por debajo de la línea, el residuo es negativo.

El siguiente gráfico muestra la línea de regresión óptima (en rojo) y los residuos (líneas verticales discontinuas) para cada punto.

# Calculamos el modelo de regresión lineal con R
modelo_lm <- lm(calificacion ~ horas_estudio, data = datos)

# Añadimos los valores predichos al dataframe
datos$predicho <- predict(modelo_lm)

# Graficamos la línea y los residuos
ggplot(datos, aes(x = horas_estudio, y = calificacion)) +
  # La línea de regresión (la mejor línea)
  geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "solid", size=1) +
  # Los segmentos que representan los residuos
  geom_segment(aes(xend = horas_estudio, yend = predicho), color = "gray", linetype = "dashed") +
  # Los puntos observados
  geom_point(color = "blue", size = 3, alpha = 0.7) +
  labs(
    title = "Visualización de los Residuos",
    subtitle = "La distancia vertical de cada punto a la línea roja es un residuo",
    x = "Horas de Estudio (X)",
    y = "Calificación Obtenida (Y)"
  ) +
  annotate("text", x = 2, y = 95, label = "Valor Observado (Y)", color="blue") +
  annotate("text", x = 3.5, y = 55, label = "Valor Predicho (Ŷ)", color="red") +
  annotate("text", x = 8, y = 50, label = "Residuo (e)", color="black") +
  theme_minimal()

Paso 3: ¿Por Qué “Mínimos Cuadrados”?

Ahora necesitamos una medida del “error total” de nuestra línea.

  • ¿Por qué no simplemente sumar los residuos? No funcionaría, porque los residuos positivos se cancelarían con los negativos. Una línea muy mala podría tener una suma de residuos igual a cero.

  • La solución: ¡Elevarlos al cuadrado! Al elevar cada residuo al cuadrado, logramos dos cosas muy importantes:

    1. Todos los valores se vuelven positivos, evitando que se cancelen.
    2. Se penalizan más los errores grandes. Un residuo de 4 se convierte en 16, mientras que un residuo de 2 solo se convierte en 4. Esto fuerza a la línea a no alejarse demasiado de ningún punto.

El método de Mínimos Cuadrados consiste en encontrar la única línea (es decir, el único par de \(\hat{\beta}_0\) y \(\hat{\beta}_1\)) para la cual la suma del área de todos estos cuadrados sea lo más pequeña posible.

Podemos visualizar estos cuadrados:

# Creamos un rectángulo para cada residuo
# La esquina inferior-izquierda del rectangulo es (horas_estudio, predicho)
# La esquina superior-derecha es (horas_estudio + residuo, calificacion)
datos$residuo <- datos$calificacion - datos$predicho

ggplot(datos, aes(x = horas_estudio, y = calificacion)) +
  # Dibujamos los "cuadrados" de los residuos
  geom_rect(
    aes(xmin = horas_estudio, 
        xmax = horas_estudio + residuo, 
        ymin = predicho, 
        ymax = calificacion),
    fill = "orange", alpha = 0.4
  ) +
  geom_smooth(method = "lm", se = FALSE, color = "red", size=1) +
  geom_segment(aes(xend = horas_estudio, yend = predicho), color = "gray", linetype = "dashed") +
  geom_point(color = "blue", size = 3, alpha = 0.7) +
  labs(
    title = "Visualización de los Residuos al Cuadrado",
    subtitle = "MCO minimiza la suma del área de todos los cuadrados naranjas",
    x = "Horas de Estudio (X)",
    y = "Calificación Obtenida (Y)"
  ) +
  theme_minimal()

En resumen, la intuición es esta: Imagina que cada residuo es el lado de un cuadrado. El método de mínimos cuadrados prueba todas las líneas posibles y elige aquella que hace que la suma total del área de todos esos cuadrados sea mínima. Esa es, por definición, la “mejor” línea de ajuste.

Método de Mínimos Cuadrados Ordinarios (MCO) para Regresión Lineal Simple

El objetivo de la regresión lineal simple es modelar la relación entre una variable predictora (independiente), \(X\), y una variable de respuesta (dependiente), \(Y\), a través de una línea recta.

Paso 1: El Modelo de Regresión Lineal Simple

El modelo postula que la relación entre \(X\) y \(Y\) es lineal y se puede describir como:

\[ Y_i = \beta_0 + \beta_1 X_i + \varepsilon_i \]

Donde: - \(Y_i\) es el valor observado de la variable dependiente para la i-ésima observación. - \(X_i\) es el valor observado de la variable independiente para la i-ésima observación. - \(\beta_0\) es el intercepto de la población (el valor de \(Y\) cuando \(X=0\)). - \(\beta_1\) es la pendiente de la población (el cambio en \(Y\) por cada unidad de cambio en \(X\)). - \(\varepsilon_i\) es el término de error aleatorio para la i-ésima observación. Este término captura toda la variabilidad en \(Y\) que no es explicada por \(X\).

Como no conocemos los verdaderos valores de \(\beta_0\) y \(\beta_1\), nuestro objetivo es estimarlos a partir de los datos de nuestra muestra. Llamaremos a estos estimadores \(\hat{\beta}_0\) y \(\hat{\beta}_1\). La línea de regresión ajustada será:

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

Donde \(\hat{Y}_i\) es el valor predicho para \(Y_i\).

Paso 2: El Principio de Mínimos Cuadrados

El método de mínimos cuadrados busca encontrar los valores de \(\hat{\beta}_0\) y \(\hat{\beta}_1\) que minimizan la suma de los cuadrados de los residuos (o errores). El residuo (\(e_i\)) es la diferencia entre el valor observado \(Y_i\) y el valor predicho \(\hat{Y}_i\).

\[ e_i = Y_i - \hat{Y}_i = Y_i - (\hat{\beta}_0 + \hat{\beta}_1 X_i) \]

Queremos minimizar la Suma de los Cuadrados de los Errores (SCE), que es una función de \(\hat{\beta}_0\) y \(\hat{\beta}_1\):

\[ S(\hat{\beta}_0, \hat{\beta}_1) = \sum_{i=1}^{n} e_i^2 = \sum_{i=1}^{n} (Y_i - \hat{Y}_i)^2 = \sum_{i=1}^{n} (Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i)^2 \]

Paso 3: Minimización de la SCE (Derivación)

Para encontrar los valores de \(\hat{\beta}_0\) y \(\hat{\beta}_1\) que minimizan la función \(S\), utilizamos cálculo diferencial. Tomamos las derivadas parciales de \(S\) con respecto a \(\hat{\beta}_0\) y \(\hat{\beta}_1\) y las igualamos a cero.

a) Derivada parcial con respecto a \(\hat{\beta}_0\):

\[ \frac{\partial S}{\partial \hat{\beta}_0} = \frac{\partial}{\partial \hat{\beta}_0} \sum_{i=1}^{n} (Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i)^2 \]

Aplicando la regla de la cadena:

\[ \frac{\partial S}{\partial \hat{\beta}_0} = \sum_{i=1}^{n} 2(Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i)(-1) = -2 \sum_{i=1}^{n} (Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i) \]

b) Derivada parcial con respecto a \(\hat{\beta}_1\):

\[ \frac{\partial S}{\partial \hat{\beta}_1} = \frac{\partial}{\partial \hat{\beta}_1} \sum_{i=1}^{n} (Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i)^2 \]

Aplicando la regla de la cadena:

\[ \frac{\partial S}{\partial \hat{\beta}_1} = \sum_{i=1}^{n} 2(Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i)(-X_i) = -2 \sum_{i=1}^{n} X_i(Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i) \]

Paso 4: Las Ecuaciones Normales

Ahora, igualamos ambas derivadas parciales a cero para encontrar el mínimo. Esto nos da un sistema de dos ecuaciones lineales con dos incógnitas (\(\hat{\beta}_0\) y \(\hat{\beta}_1\)), conocidas como las ecuaciones normales.

  1. A partir de \(\frac{\partial S}{\partial \hat{\beta}_0} = 0\): \[ -2 \sum (Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i) = 0 \implies \sum Y_i - \sum \hat{\beta}_0 - \sum \hat{\beta}_1 X_i = 0 \] \[ \sum Y_i - n\hat{\beta}_0 - \hat{\beta}_1 \sum X_i = 0 \implies n\hat{\beta}_0 + \hat{\beta}_1 \sum X_i = \sum Y_i \]

  2. A partir de \(\frac{\partial S}{\partial \hat{\beta}_1} = 0\): \[ -2 \sum X_i(Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i) = 0 \implies \sum (X_i Y_i - \hat{\beta}_0 X_i - \hat{\beta}_1 X_i^2) = 0 \] \[ \sum X_i Y_i - \hat{\beta}_0 \sum X_i - \hat{\beta}_1 \sum X_i^2 = 0 \implies \hat{\beta}_0 \sum X_i + \hat{\beta}_1 \sum X_i^2 = \sum X_i Y_i \]

Paso 5: Solución para los Estimadores \(\hat{\beta}_0\) y \(\hat{\beta}_1\)

Resolvemos el sistema de ecuaciones normales. Primero, despejamos \(\hat{\beta}_0\) de la primera ecuación normal. Sabiendo que \(\bar{Y} = \frac{\sum Y_i}{n}\) y \(\bar{X} = \frac{\sum X_i}{n}\):

\[ \hat{\beta}_0 = \frac{\sum Y_i}{n} - \hat{\beta}_1 \frac{\sum X_i}{n} \implies \hat{\beta}_0 = \bar{Y} - \hat{\beta}_1 \bar{X} \]

Ahora, sustituimos esta expresión para \(\hat{\beta}_0\) en la segunda ecuación normal para resolver para \(\hat{\beta}_1\):

\[ (\bar{Y} - \hat{\beta}_1 \bar{X}) \sum X_i + \hat{\beta}_1 \sum X_i^2 = \sum X_i Y_i \] \[ \bar{Y} \sum X_i - \hat{\beta}_1 \bar{X} \sum X_i + \hat{\beta}_1 \sum X_i^2 = \sum X_i Y_i \] \[ \hat{\beta}_1 (\sum X_i^2 - \bar{X} \sum X_i) = \sum X_i Y_i - \bar{Y} \sum X_i \] \[ \hat{\beta}_1 = \frac{\sum X_i Y_i - \bar{Y} \sum X_i}{\sum X_i^2 - \bar{X} \sum X_i} \]

Esta fórmula se puede simplificar a una forma más conocida usando las sumas de cuadrados y productos cruzados:

\[ \hat{\beta}_1 = \frac{\sum (X_i - \bar{X})(Y_i - \bar{Y})}{\sum (X_i - \bar{X})^2} \]

Resumen de las Fórmulas Finales

Los estimadores de mínimos cuadrados para la pendiente (\(\hat{\beta}_1\)) y el intercepto (\(\hat{\beta}_0\)) de una regresión lineal simple son:

Estimador de la Pendiente: \[ \hat{\beta}_1 = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{\sum_{i=1}^{n} (X_i - \bar{X})^2} = \frac{S_{xy}}{S_{xx}} \]

Estimador del Intercepto: \[ \hat{\beta}_0 = \bar{Y} - \hat{\beta}_1 \bar{X} \]

Donde \(\bar{X}\) y \(\bar{Y}\) son las medias muestrales de \(X\) y \(Y\), respectivamente.

Práctica de Regresión Lineal: mpg vs wt

En este ejercicio, investigaremos la relación entre el peso de un automóvil (wt, en miles de libras) y su eficiencia de combustible (mpg, millas por galón), utilizando el conjunto de datos mtcars. Nuestra hipótesis es que a mayor peso, menor será la eficiencia de combustible.

Paso 1: Carga y Exploración de Datos

Primero, cargamos y exploramos el dataset para entender nuestras variables.

# Cargamos el dataset
data(mtcars)

# Vemos la estructura del dataset
# wt está en 1000 lbs, mpg es Millas/Galón
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

El paso más importante en la exploración es visualizar la relación entre las dos variables mediante un diagrama de dispersión. Esto nos ayuda a confirmar si una relación lineal es una suposición razonable.

ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "navy", size = 3, alpha = 0.8) +
  labs(
    title = "Relación entre Peso y Eficiencia de Combustible",
    subtitle = "Dataset mtcars",
    x = "Peso del Automóvil (en 1000 lbs)",
    y = "Millas por Galón (mpg)"
  ) +
  theme_bw()

Como podemos observar, existe una clara tendencia lineal negativa: a medida que el peso (wt) aumenta, las millas por galón (mpg) tienden a disminuir. Esto confirma que un modelo de regresión lineal simple es apropiado.

Paso 2: Ajuste del Modelo de Regresión Lineal

Ahora, usaremos la función lm() (linear model) para ajustar nuestro modelo. La fórmula mpg ~ wt se lee como “mpg explicado por wt”.

# Ajustamos el modelo de regresión lineal
modelo_mtcars <- lm(mpg ~ wt, data = mtcars)

Para ver los resultados, usamos la función summary(). Esta nos proporciona los coeficientes, el R-cuadrado, los p-valores y más.

# Mostramos el resumen del modelo
summary(modelo_mtcars)
## 
## Call:
## lm(formula = mpg ~ wt, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.5432 -2.3647 -0.1252  1.4096  6.8727 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
## wt           -5.3445     0.5591  -9.559 1.29e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.046 on 30 degrees of freedom
## Multiple R-squared:  0.7528, Adjusted R-squared:  0.7446 
## F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10

Paso 3: Interpretación de los Resultados

El summary() nos da toda la información que necesitamos. Vamos a desglosarla:

1. Coeficientes (Estimates):

  • Intercepto (\(\hat{\beta}_0\)): 37.285. Este es el valor predicho de mpg cuando el peso (wt) es cero. En este contexto, no tiene una interpretación práctica (un coche no puede pesar 0 lbs), pero es matemáticamente necesario para definir la línea.

  • Pendiente (\(\hat{\beta}_1\)): -5.344. ¡Este es el coeficiente más importante! Se interpreta de la siguiente manera: > Por cada aumento de 1000 lbs en el peso del coche (wt), se espera que el consumo de combustible (mpg) disminuya en promedio 5.344 millas por galón.

La ecuación de nuestra línea de regresión es: \[ \text{mpg} = 37.285 - 5.344 \times \text{wt} \]

2. Significancia Estadística (p-valor):

El p-valor para el coeficiente wt es 1.29e-10 (un número extremadamente pequeño). Como este valor es mucho menor que el nivel de significancia estándar (\(\alpha = 0.05\)), concluimos que existe una relación estadísticamente significativa entre el peso y el consumo de combustible. El peso es un predictor útil para mpg.

3. Bondad de Ajuste (R-cuadrado):

  • Multiple R-squared: 0.7528. Esto significa que el 75.28% de la variabilidad en el consumo de combustible (mpg) es explicada por el peso del automóvil (wt). Este es un valor alto, lo que indica que nuestro modelo tiene un buen poder explicativo.

Paso 4: Visualización del Modelo Ajustado

Una excelente práctica es graficar la línea de regresión sobre los datos originales para ver visualmente qué tan bien se ajusta.

# Obtenemos la ecuación como texto para añadirla al gráfico
eq <- sprintf("mpg = %.2f %.2f * wt\nR² = %.2f", 
              coef(modelo_mtcars)[1], # Intercepto
              coef(modelo_mtcars)[2], # Pendiente
              summary(modelo_mtcars)$r.squared) # R-cuadrado

ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "navy", size = 3, alpha = 0.8) +
  # Añadimos la línea de regresión con geom_smooth()
  geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dashed") +
  labs(
    title = "Modelo de Regresión Ajustado",
    x = "Peso del Automóvil (en 1000 lbs)",
    y = "Millas por Galón (mpg)"
  ) +
  # Anotamos la ecuación en el gráfico
  annotate("text", x = 4.5, y = 30, label = eq, hjust = "left", size = 4) +
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'

Paso 5: Diagnóstico del Modelo (Verificación de Supuestos)

Un buen análisis no termina con la interpretación. Debemos verificar si los supuestos del modelo de Mínimos Cuadrados se cumplen. R tiene una función plot() fantástica para esto.

par(mfrow = c(2, 2)) # Para mostrar 4 gráficos en una cuadrícula
plot(modelo_mtcars)

par(mfrow = c(1, 1)) # Restablecemos la configuración de gráficos

¿Qué buscamos en estos gráficos?

  1. Residuals vs Fitted (Arriba a la izquierda): Buscamos que los puntos se distribuyan aleatoriamente alrededor de la línea horizontal en 0, sin patrones evidentes. La línea roja debe ser aproximadamente plana. En nuestro caso, se ve bastante bien, aunque hay una ligera curva, lo que podría sugerir que una relación no lineal (quizás un término cuadrático) podría mejorar el modelo.

  2. Normal Q-Q (Arriba a la derecha): Buscamos que los puntos caigan lo más cerca posible de la línea diagonal. Esto verifica el supuesto de normalidad de los residuos. En nuestro caso, los puntos siguen la línea razonablemente bien, por lo que podemos asumir normalidad.

  3. Scale-Location (Abajo a la izquierda): Similar al primer gráfico, busca verificar la homocedasticidad (varianza constante de los residuos). La línea roja debe ser plana, y la dispersión de los puntos debe ser uniforme. Aquí también se ve aceptable.

  4. Residuals vs Leverage (Abajo a la derecha): Ayuda a identificar puntos influyentes (outliers) que podrían tener un gran impacto en el modelo. Puntos fuera de la línea de Cook (líneas discontinuas rojas) son potencialmente problemáticos. En nuestro caso, no hay puntos que excedan estas líneas.

Conclusión

Nuestro modelo de regresión lineal simple fue exitoso. Encontramos una relación negativa, fuerte y estadísticamente significativa entre el peso de un coche y su eficiencia de combustible. El modelo explica aproximadamente el 75% de la variabilidad en mpg y, según los diagnósticos, los supuestos del modelo de MCO se cumplen de manera razonable.