Regresión Lineal y Mínimos Cuadrados en R

Guía de Estudio Completa y Progresiva para Principiantes e Intermedios

PARTE 1. Introducción Conceptual

1. Explicación Teórica: Fundamentos de la Regresión Lineal

¿Qué es la regresión lineal?
La regresión lineal es una técnica estadística fundamental que busca modelar y analizar la relación entre dos o más variables. Su objetivo principal es trazar una línea recta (en el caso de una sola variable predictora) que mejor represente la tendencia general de los datos. Es como intentar encontrar el “camino principal” a través de un bosque de puntos dispersos.

¿Para qué sirve?
Sirve para dos propósitos principales: 1) Explicar cómo cambia una variable cuando otra se modifica (por ejemplo, entender cómo el aumento de precios afecta las ventas). 2) Predecir valores futuros o desconocidos basándose en datos históricos.

Variables Dependientes e Independientes:
En un modelo de regresión simple, trabajamos con dos tipos de variables:

  • Variable Dependiente (Y): Es la variable que queremos predecir o explicar. Se llama “dependiente” porque asumimos que su valor depende de otra variable. También se le conoce como variable de respuesta.
  • Variable Independiente (X): Es la variable que utilizamos para hacer la predicción. Se asume que es independiente y que ejerce una influencia sobre Y. También se le llama variable predictora o explicativa.

Ejemplo Práctico: Horas de estudio y calificación
Imagina que queremos saber si estudiar más horas mejora la calificación en un examen. Aquí, las Horas de estudio son nuestra variable independiente (X), porque es la acción que controlamos o medimos inicialmente. La Calificación es la variable dependiente (Y), porque asumimos que el resultado del examen depende de cuánto se estudió.

¿Qué significa ajustar una recta a los datos?
Si graficamos las horas de estudio en el eje horizontal y las calificaciones en el vertical, obtendremos una nube de puntos. Ajustar una recta significa dibujar una línea matemática a través de esa nube de puntos de manera que pase lo más cerca posible de todos ellos al mismo tiempo. Esta recta resume la relación: nos dice, en promedio, cuánto sube la calificación por cada hora extra de estudio.

¿Qué es un residuo y qué papel juegan los mínimos cuadrados?
Ninguna línea recta pasará perfectamente por todos los puntos (a menos que la relación sea matemáticamente perfecta, lo cual no ocurre en la vida real). La distancia vertical entre un punto real (la calificación que un alumno realmente sacó) y la línea recta (la calificación que la línea predice que sacaría) se llama residuo o error observado.

El método de Mínimos Cuadrados Ordinarios (MCO) es la técnica matemática que usamos para encontrar la “mejor” recta. ¿Cómo decide cuál es la mejor? Calcula los residuos de todos los puntos, los eleva al cuadrado y los suma. La recta ganadora es aquella que hace que esta suma sea lo más pequeña (mínima) posible.

¿Por qué se elevan los residuos al cuadrado?
Por dos razones fundamentales: 1) Los puntos por encima de la recta tienen residuos positivos y los que están por debajo tienen residuos negativos. Si solo los sumáramos, se cancelarían entre sí, dando cero, incluso si la recta es pésima. Al elevarlos al cuadrado, todos los valores se vuelven positivos. 2) Elevar al cuadrado penaliza mucho más a los errores grandes que a los pequeños. Esto obliga a la recta a acomodarse de manera que evite dejar puntos demasiado lejos de ella.

PARTE 2. Crear un Ejemplo en R

1. Explicación Teórica: Preparación de Datos

Antes de calcular cualquier modelo, necesitamos datos. En R, la estructura fundamental para almacenar datos tabulares es el data.frame. Vamos a simular el ejemplo de las horas de estudio y las calificaciones. Crearemos dos vectores numéricos y los uniremos. Luego, la mejor práctica estadística es siempre visualizar los datos antes de modelarlos usando un gráfico de dispersión (scatter plot).

2. Código en R

# Crear el vector de la variable independiente (X): Horas de estudio
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

# Crear el vector de la variable dependiente (Y): Calificaciones obtenidas
y <- c(50, 55, 60, 65, 70, 68, 75, 80, 85, 90)

# Unir ambos vectores en un data.frame (tabla de datos)
datos <- data.frame(Horas = x, Calificacion = y)

# Mostrar los datos en la consola para verificar
print(datos)

# Graficar los datos para observar la relación visualmente
plot(datos$Horas, datos$Calificacion, 
     main = "Relación entre Horas de Estudio y Calificación",
     xlab = "Horas de Estudio (X)", 
     ylab = "Calificación (Y)",
     pch = 19, # Tipo de punto (círculo relleno)
     col = "blue") # Color del punto

3. Explicación línea por línea del código

  • x <- c(1, 2, ...): Usamos la función c() (combinar) para crear un vector numérico del 1 al 10 que representa las horas estudiadas. La flecha <- es el operador de asignación en R.
  • y <- c(50, 55, ...): Creamos el vector de calificaciones correspondientes. El primer alumno estudió 1 hora y sacó 50; el sexto estudió 6 horas y sacó 68.
  • datos <- data.frame(Horas = x, Calificacion = y): Creamos una tabla donde la primera columna se llama “Horas” (conteniendo x) y la segunda “Calificacion” (conteniendo y).
  • print(datos): Imprime la tabla en la pantalla.
  • plot(...): Llama a la función base de gráficos de R. datos$Horas extrae la columna X, datos$Calificacion extrae la Y. main pone el título, xlab y ylab nombran los ejes, pch=19 hace que los puntos sean sólidos y col="blue" los pinta de azul.

4. Salida esperada

   Horas Calificacion
1      1           50
2      2           55
3      3           60
4      4           65
5      5           70
6      6           68
7      7           75
8      8           80
9      9           85
10    10           90

\[Se genera una ventana gráfica con puntos azules ascendentes de izquierda a derecha\]

5. Interpretación detallada

Al imprimir los datos, confirmamos que tenemos 10 observaciones (filas) y 2 variables (columnas). Cada fila representa a un estudiante distinto.

Explicación de la gráfica y el patrón observado: Al observar el gráfico de dispersión generado, notamos un patrón claro: a medida que nos movemos hacia la derecha en el eje X (más horas de estudio), los puntos tienden a subir en el eje Y (mayor calificación). Esto indica una relación lineal positiva. No es una línea perfectamente recta (por ejemplo, el estudiante de 6 horas sacó 68, un poco menos que el de 5 horas que sacó 70), lo cual es normal en datos reales debido a la variabilidad natural. Sin embargo, la tendencia general es innegablemente ascendente, lo que justifica el uso de un modelo de regresión lineal.

PARTE 3. Cálculo Manual de la Regresión en R

1. Explicación Teórica: Las Matemáticas detrás de la Recta

La ecuación de una línea recta es: Y = b0 + b1*X

Donde:

  • b1 (Pendiente o Coeficiente de regresión): Nos dice cuánto cambia Y por cada unidad que aumenta X. Se calcula dividiendo la covarianza entre X e Y por la varianza de X. La covarianza mide cómo varían juntas ambas variables, y al dividirla por la varianza de X, estandarizamos esa medida para obtener la pendiente.
  • b0 (Intercepto o Constante): Es el valor de Y cuando X es exactamente cero. Es el punto donde la recta cruza el eje vertical. Se calcula asegurando que la recta pase por el “centro de gravedad” de los datos, es decir, por el punto formado por la media de X y la media de Y.

Vamos a calcular esto paso a paso en R para desmitificar el proceso.

2. Código en R

# 1. Calcular la media de X e Y
media_x <- mean(datos$Horas)
media_y <- mean(datos$Calificacion)

# 2. Calcular la varianza de X y la covarianza entre X e Y
varianza_x <- var(datos$Horas)
covarianza_xy <- cov(datos$Horas, datos$Calificacion)

# 3. Calcular la pendiente (b1)
b1 <- covarianza_xy / varianza_x

# 4. Calcular el intercepto (b0)
b0 <- media_y - (b1 * media_x)

# Mostrar los resultados
cat("Media de X:", media_x, "\n")
cat("Media de Y:", media_y, "\n")
cat("Varianza de X:", varianza_x, "\n")
cat("Covarianza XY:", covarianza_xy, "\n")
cat("Pendiente (b1):", b1, "\n")
cat("Intercepto (b0):", b0, "\n")

3. Explicación línea por línea del código

  • mean(datos$Horas) y mean(datos$Calificacion): Calculan el promedio aritmético sumando todos los valores y dividiendo por el total de datos (10).
  • var(datos$Horas): Calcula la varianza muestral de X, que mide qué tan dispersas están las horas de estudio respecto a su propia media.
  • cov(datos$Horas, datos$Calificacion): Calcula la covarianza muestral. Si es positiva, indica que cuando X sube, Y tiende a subir.
  • b1 <- covarianza_xy / varianza_x: Aplica la fórmula matemática de mínimos cuadrados para la pendiente.
  • b0 <- media_y - (b1 * media_x): Aplica la fórmula del intercepto, despejada de la ecuación de la recta evaluada en las medias.
  • cat(...): Es una función para concatenar e imprimir texto y variables en la misma línea. "\n" significa salto de línea.

4. Salida esperada

Media de X: 5.5 
Media de Y: 69.8 
Varianza de X: 9.166667 
Covarianza XY: 38.66667 
Pendiente (b1): 4.218182 
Intercepto (b0): 46.6

5. Interpretación detallada

Valores intermedios: El estudiante promedio estudia 5.5 horas y obtiene una calificación de 69.8. La covarianza es positiva (38.66), confirmando matemáticamente lo que vimos en la gráfica: la relación es directa.

Interpretación de la Pendiente (b1 = 4.218): ¿Qué significa que la pendiente sea positiva, negativa o cero? Una pendiente positiva significa que al aumentar X, Y aumenta. Una negativa significaría que al aumentar X, Y disminuye. Una pendiente cercana a cero indicaría que X no tiene efecto sobre Y. En nuestro caso, b1 es 4.218. En lenguaje natural: “Por cada hora adicional de estudio, se estima que la calificación del estudiante aumenta en promedio 4.218 puntos.”

Interpretación del Intercepto (b0 = 46.6): El intercepto es el valor esperado de Y cuando X es 0. En el contexto de nuestro ejemplo: “Si un estudiante estudia exactamente 0 horas, el modelo predice que su calificación base será de 46.6 puntos.” (Quizás por conocimientos previos o suerte en un examen de opción múltiple). Es el punto de partida de nuestra recta.

PARTE 4. Ajuste del Modelo con lm()

1. Explicación Teórica: La función lm() en R

Aunque es vital entender el cálculo manual, en la práctica profesional nadie calcula regresiones a mano. R proporciona la función lm() (Linear Model) que hace todos estos cálculos (y muchos más relacionados con la estadística inferencial) en una fracción de segundo. Además, la función summary() nos proporciona un reporte estadístico completo que nos permite evaluar no solo la ecuación de la recta, sino la calidad y confiabilidad de nuestro modelo.

2. Código en R

# Ajustar el modelo lineal usando la función lm()
# La sintaxis es: lm(Variable_Dependiente ~ Variable_Independiente, data = datos)
modelo <- lm(Calificacion ~ Horas, data = datos)

# Mostrar el resumen estadístico completo del modelo
summary(modelo)

3. Explicación línea por línea del código

  • lm(Calificacion ~ Horas, data = datos): La tilde ~ se lee como “explicado por” o “en función de”. Le estamos diciendo a R: “Crea un modelo lineal donde la Calificación es explicada por las Horas, usando el data.frame llamado ‘datos’”. El resultado se guarda en el objeto modelo.
  • summary(modelo): Toma el objeto modelo (que internamente tiene listas de cálculos complejos) y extrae un resumen formateado y fácil de leer con las métricas estadísticas más importantes.

4. Salida esperada

Call:
lm(formula = Calificacion ~ Horas, data = datos)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.9091 -1.1364  0.0909  1.6364  3.8727 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  46.6000     1.8761   24.84 4.54e-09 \*\*\*
Horas         4.2182     0.2995   14.08 6.46e-07 \*\*\*
---
Signif. codes:  0 ‘\*\*\*’ 0.001 ‘\*\*’ 0.01 ‘\*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.721 on 8 degrees of freedom
Multiple R-squared:  0.9612,    Adjusted R-squared:  0.9564 
F-statistic: 198.3 on 1 and 8 DF,  p-value: 6.463e-07

5. Interpretación detallada de la salida

Esta salida es el corazón de la regresión en R. Vamos a desglosarla rigurosamente:

Coefficients (Coeficientes):

  • Estimate (Estimación): Son los valores de b0 y b1. Vemos que el Intercepto es 46.6000 y la pendiente de Horas es 4.2182. ¡Exactamente los mismos que calculamos a mano!
  • Std. Error (Error Estándar): Mide la precisión de nuestra estimación. Un error estándar pequeño (comparado con el Estimate) indica que nuestro cálculo del coeficiente es muy preciso.
  • t value (Valor t): Es el resultado de dividir el Estimate entre el Std. Error. Mide a cuántas desviaciones estándar está nuestro coeficiente del valor cero. Valores t grandes (positivos o negativos) son buenos.
  • Pr(>|t|) (P-valor): Es la probabilidad de obtener este coeficiente por pura casualidad si en realidad no hubiera relación (si la pendiente real fuera cero). Como el p-valor para Horas es 6.46e-07 (0.000000646), es muchísimo menor que 0.05. Interpretación práctica: Existe una relación estadísticamente significativa entre las horas de estudio y la calificación. No es producto del azar.

Métricas de calidad del modelo:

  • Residual standard error (Error estándar de los residuos): Es 2.721. Significa que, en promedio, las predicciones de nuestro modelo se equivocan por aproximadamente 2.72 puntos de calificación. Es una medida absoluta de ajuste.
  • Multiple R-squared (R-cuadrado): Es 0.9612. Esta es una de las métricas más importantes. Se interpreta como un porcentaje: “El 96.12% de la variación en las calificaciones es explicada por la cantidad de horas de estudio.” Es un modelo excelente, ya que está muy cerca de 1 (100%).
  • Adjusted R-squared (R-cuadrado ajustado): Es 0.9564. Es una versión del R-cuadrado que penaliza la inclusión de variables innecesarias. En regresión simple es muy similar al R-cuadrado normal, pero es vital en regresión múltiple.
  • F-statistic y su p-value: Evalúa si el modelo en su conjunto es útil. Un p-valor de 6.463e-07 (menor a 0.05) indica que nuestro modelo es globalmente significativo y es mucho mejor que simplemente adivinar usando el promedio de las calificaciones.

PARTE 5. Relación entre Teoría y Salida de R

1. Explicación Teórica: Conectando los Puntos

Es fundamental entender que la “magia” que hace la función lm() no es más que la aplicación eficiente de las fórmulas matemáticas que usamos en la Parte 3. El cálculo manual y el cálculo automático deben coincidir exactamente porque ambos buscan resolver el mismo problema de optimización: minimizar la suma de los errores al cuadrado.

¿Qué representa matemáticamente cada coeficiente?
La pendiente (b1) es matemáticamente la proporción de la variabilidad conjunta (covarianza) respecto a la variabilidad de la variable predictora (varianza de X). Si X e Y se mueven juntas fuertemente, la covarianza es alta, y la pendiente será pronunciada. El intercepto (b0) es simplemente un factor de ajuste de nivel; asegura que la recta esté a la altura correcta en el plano cartesiano, anclándola en el punto medio de los datos (media de X, media de Y).

2. Código en R

# Extraer los coeficientes del modelo automático
coeficientes_lm <- coef(modelo)

# Comparar visualmente en consola
cat("Cálculo Manual - Intercepto:", b0, " Pendiente:", b1, "\n")
cat("Cálculo lm()   - Intercepto:", coeficientes_lm[1], " Pendiente:", coeficientes_lm[2], "\n")

# Verificar si son matemáticamente idénticos (redondeando por precisión de máquina)
son_iguales_b1 <- round(b1, 5) == round(coeficientes_lm[2], 5)
cat("¿Las pendientes son iguales?:", son_iguales_b1, "\n")

3. Explicación línea por línea del código

  • coef(modelo): Es una función extractora en R que saca únicamente los números de los coeficientes (Estimate) del objeto modelo complejo.
  • coeficientes_lm[1] y [2]: Accedemos al primer elemento (Intercepto) y al segundo (Pendiente) del vector extraído.
  • round(..., 5) == round(..., 5): Comparamos ambos valores redondeados a 5 decimales. Esto se hace porque las computadoras manejan los decimales flotantes con ligerísimas variaciones microscópicas, y una comparación directa a veces falla por el decimal número 16.

4. Salida esperada

Cálculo Manual - Intercepto: 46.6  Pendiente: 4.218182 
Cálculo lm()   - Intercepto: 46.6  Pendiente: 4.218182 
¿Las pendientes son iguales?: TRUE 

5. Interpretación detallada

Como era de esperar, el resultado es TRUE. Esto demuestra que la función lm() utiliza internamente las propiedades de la media, varianza y covarianza de las muestras para encontrar la recta óptima. Comprender esto te da poder: sabes que la regresión lineal no es una “caja negra” de inteligencia artificial, sino una relación algebraica directa y transparente basada en cómo varían los datos.

PARTE 6. Valores Ajustados y Residuos

1. Explicación Teórica: Predicciones y Errores

Una vez que tenemos la ecuación de la recta (Y = 46.6 + 4.218*X), podemos usarla para calcular qué calificación debería haber sacado cada alumno según el modelo. A estos valores teóricos se les llama Valores Ajustados (Fitted values).

Sin embargo, la realidad rara vez coincide perfectamente con la teoría. La diferencia entre la calificación real que sacó el alumno y la calificación ajustada que predijo el modelo se llama Residuo.
Fórmula: Residuo = Valor Real - Valor Ajustado

La teoría de Mínimos Cuadrados dice que la recta elegida es aquella que hace que la Suma de los Residuos al Cuadrado (SCE) sea la menor posible. Además, una propiedad matemática fascinante de este método es que la suma simple de todos los residuos siempre será exactamente cero (o un número microscópicamente cercano a cero por el redondeo de la computadora).

2. Código en R

# 1. Calcular los valores ajustados (predicciones del modelo para los datos originales)
y_ajustados <- fitted(modelo)

# 2. Calcular los residuos (diferencia entre lo real y lo predicho)
residuos <- residuals(modelo)

# 3. Calcular la suma simple de los residuos
suma_residuos <- sum(residuos)

# 4. Calcular la suma de los residuos al cuadrado (SCE)
suma_residuos_cuadrado <- sum(residuos^2)

# Mostrar un resumen de los primeros 3 alumnos
head(data.frame(Real = datos$Calificacion, Ajustado = y_ajustados, Residuo = residuos), 3)

# Mostrar las sumas
cat("\nSuma de residuos:", suma_residuos, "\n")
cat("Suma de residuos al cuadrado (SCE):", suma_residuos_cuadrado, "\n")

3. Explicación línea por línea del código

  • fitted(modelo): Extrae las predicciones (Y calculadas) que el modelo hace para cada valor de X original.
  • residuals(modelo): Extrae los errores de predicción para cada punto.
  • sum(residuos): Suma todos los valores del vector de residuos.
  • sum(residuos^2): Primero eleva cada residuo al cuadrado (para quitar signos negativos) y luego los suma todos.
  • head(..., 3): Crea una pequeña tabla temporal para ver lado a lado el valor real, el ajustado y el residuo, mostrando solo las primeras 3 filas.

4. Salida esperada

  Real Ajustado   Residuo
1   50 50.81818 -0.8181818
2   55 55.03636 -0.0363636
3   60 59.25455  0.7454545

Suma de residuos: -1.421085e-14 
Suma de residuos al cuadrado (SCE): 59.23636 

5. Interpretación detallada

Análisis de los alumnos: Para el alumno 1 (1 hora de estudio), el modelo predijo una calificación de 50.81. En la realidad sacó 50. Su residuo es -0.81 (sacó un poco menos de lo esperado). Para el alumno 3 (3 horas), el modelo predijo 59.25, pero sacó 60. Su residuo es positivo (0.74), superó las expectativas del modelo.

Significado estadístico de las sumas: La suma de los residuos es -1.42e-14. Esto es notación científica para -0.0000000000000142. A efectos prácticos, es CERO. Esto confirma la propiedad matemática de que la recta de mínimos cuadrados equilibra perfectamente los errores por encima y por debajo de ella.

La Suma de residuos al cuadrado (59.23) es el valor que el algoritmo de R minimizó. Cualquier otra línea recta que intentes dibujar a través de estos datos (cambiando un poco la pendiente o el intercepto) dará como resultado una suma de cuadrados mayor a 59.23. Esta es la prueba de que tenemos el mejor ajuste posible.

PARTE 7. Visualización del Modelo

1. Explicación Teórica: Viendo la Recta y los Errores

La estadística se comprende mucho mejor de forma visual. Vamos a graficar tres elementos fundamentales: 1) Los puntos reales (nuestros datos observados). 2) La línea de regresión (nuestro modelo teórico). 3) Los residuos (la distancia vertical entre los puntos y la línea). Una buena recta de ajuste pasará por el medio de la nube de puntos. Los puntos que estén muy alejados de la recta representan observaciones donde el modelo falla en su predicción (valores atípicos o varianza no explicada).

2. Código en R

# 1. Graficar los puntos observados originales
plot(datos$Horas, datos$Calificacion, 
     main = "Modelo de Regresión y Residuos",
     xlab = "Horas de Estudio", ylab = "Calificación",
     pch = 16, col = "black", cex = 1.2)

# 2. Dibujar la línea de regresión ajustada
# abline() entiende automáticamente objetos de tipo 'lm'
abline(modelo, col = "red", lwd = 2)

# 3. Identificar visualmente los residuos dibujando líneas verticales
# segments(x0, y0, x1, y1) dibuja líneas desde el punto real hasta el punto ajustado
segments(x0 = datos$Horas, 
         y0 = datos$Calificacion, 
         x1 = datos$Horas, 
         y1 = y_ajustados, 
         col = "blue", lty = 2) # lty=2 hace la línea punteada

3. Explicación línea por línea del código

  • plot(...): Crea el gráfico base con puntos negros (col="black") un poco más grandes de lo normal (cex=1.2).
  • abline(modelo, ...): Es una función mágica en R. Al pasarle el objeto modelo, extrae automáticamente el intercepto y la pendiente y dibuja la recta. La hacemos roja (col="red") y gruesa (lwd=2).
  • segments(...): Dibuja segmentos de línea. Empiezan en las coordenadas reales (x0, y0) y terminan en la misma posición X pero en la altura predicha por la recta (x1, y1). Las pintamos azules y punteadas.

4. Salida esperada

\[Se genera un gráfico que muestra:
- Puntos negros (datos reales).
- Una línea roja diagonal ascendente (la recta de regresión).
- Pequeñas líneas verticales azules punteadas que conectan cada punto negro con la línea roja.\]

5. Interpretación detallada

Interpretación visual: La línea roja representa nuestra ecuación Y = 46.6 + 4.218*X. Es la “tendencia pura”. Las líneas azules punteadas son la representación visual de los residuos. La longitud de cada línea azul es exactamente el valor del residuo que calculamos en la Parte 6.

¿Qué significa que algunos puntos estén más alejados? Si observas el gráfico, verás que algunos puntos casi tocan la línea roja (las líneas azules son cortas). Esto significa que para esos alumnos, las horas de estudio explican casi perfectamente su calificación. Sin embargo, si hay un punto muy alejado (una línea azul larga), significa que ese alumno sacó una calificación muy diferente a la esperada. ¿Por qué? Porque en la vida real, la calificación no depende solo de las horas de estudio. Quizás ese alumno durmió mal, estaba enfermo, o ya conocía el tema. Esa distancia azul representa todo lo que nuestro modelo no sabe.

PARTE 8. Interpretación de los Términos de Error

1. Explicación Teórica: El Error (ε) vs El Residuo (e)

En la teoría estadística, el modelo de regresión poblacional verdadero se escribe como: Y = β0 + β1*X + ε

Ese símbolo ε (épsilon) es el Término de Error Teórico. Representa la diferencia entre el valor real de Y y el valor que predeciría una recta perfecta si tuviéramos los datos de toda la población del universo. Como solo tenemos una muestra (10 alumnos), calculamos una recta estimada, y a la diferencia observable le llamamos residuo (e).

¿Qué factores reales contiene el error?
El término de error es el “cajón de sastre” del modelo. Contiene:

  • Variables omitidas: Factores que afectan a Y pero que no medimos (ej. calidad del sueño, coeficiente intelectual, estrés).
  • Errores de medición: Quizás el alumno dijo que estudió 5 horas, pero en realidad estuvo 2 horas mirando el celular.
  • Aleatoriedad inherente: El comportamiento humano y la naturaleza tienen un componente de azar impredecible.

Por esto, no todo se explica con X. El error es vital en la inferencia estadística porque nos permite calcular intervalos de confianza y p-valores. Asumimos que estos errores se comportan de manera aleatoria y normal.

2. Código en R

# Inspeccionar la distribución de los residuos
# Un buen modelo debe tener residuos que parezcan aleatorios y centrados en cero

# Resumen estadístico de los residuos
summary(residuos)

# Histograma de los residuos para ver su forma
hist(residuos, 
     main = "Distribución de los Residuos", 
     xlab = "Valor del Residuo", 
     col = "lightgreen", 
     border = "black",
     breaks = 5)

3. Explicación línea por línea del código

  • summary(residuos): Nos da el mínimo, máximo, mediana y cuartiles de los errores de nuestro modelo.
  • hist(...): Crea un histograma. Agrupa los residuos en “cubetas” (breaks) para ver si la mayoría de los errores son pequeños (cerca de cero) y si hay simetría.

4. Salida esperada

    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-3.90909 -1.13636  0.09091  0.00000  1.63636  3.87273 

\[Se genera un histograma de barras verdes. La barra más alta debería estar cerca del 0 en el eje X\]

5. Interpretación detallada

Al observar el summary, vemos que la Media (Mean) es exactamente 0.00000, lo cual confirma la teoría de mínimos cuadrados. La Mediana está muy cerca de cero (0.09), lo que sugiere que los errores están distribuidos simétricamente.

El histograma nos dice visualmente cómo se equivocó el modelo. Si la mayoría de las barras están agrupadas alrededor del cero, significa que la mayoría de las veces el modelo se equivoca por muy poco. Si viéramos una barra gigante muy lejos a la derecha, indicaría que hay un caso donde el modelo predijo una calificación bajísima pero el alumno sacó una nota altísima (un valor atípico extremo). En nuestro caso, los errores van desde -3.9 hasta +3.8, lo cual es un rango de error muy aceptable para calificaciones sobre 100.

PARTE 9. Supuestos Básicos del Modelo Lineal

1. Explicación Teórica: Las Reglas del Juego (LINE)

Para que los p-valores y las conclusiones de nuestro modelo sean válidos científicamente, los datos deben cumplir 4 supuestos fundamentales sobre los errores (residuos). Se conocen por el acrónimo LINE (en inglés):

  • L - Linealidad: La relación entre X e Y debe ser realmente una línea recta, no una curva.
  • I - Independencia: Los errores de un punto no deben afectar a los errores de otro. (Ej. que los alumnos no se hayan copiado en el examen).
  • N - Normalidad: Los residuos deben seguir una distribución de campana de Gauss (distribución normal). La mayoría de los errores deben ser pequeños, y los errores grandes deben ser raros.
  • E - Igualdad de Varianza (Homocedasticidad): El margen de error del modelo debe ser constante. No debería equivocarse por 2 puntos cuando estudian poco y por 20 puntos cuando estudian mucho.

Si se violan estos supuestos, la recta calculada podría seguir siendo la “mejor línea”, pero nuestras predicciones y niveles de confianza serán engañosos.

2. Código en R

# R tiene una función integrada para revisar estos supuestos visualmente
# par(mfrow=c(2,2)) divide la ventana gráfica en una cuadrícula de 2x2
par(mfrow = c(2, 2))

# Al hacer plot() directamente sobre el objeto modelo, R genera 4 gráficos diagnósticos
plot(modelo)

# Restaurar la ventana gráfica a 1x1 para futuros gráficos
par(mfrow = c(1, 1))

3. Explicación línea por línea del código

  • par(mfrow = c(2, 2)): Modifica los parámetros gráficos (par) para que los siguientes gráficos se dibujen en una matriz de 2 filas y 2 columnas.
  • plot(modelo): Es una función genérica. Cuando detecta que le pasas un modelo lineal, no dibuja los datos, sino que genera automáticamente 4 gráficos estadísticos para evaluar los supuestos.
  • par(mfrow = c(1, 1)): Es una buena práctica devolver la configuración a la normalidad.

4. Salida esperada

\[Se genera una ventana con 4 gráficos:
1. Residuals vs Fitted (Residuos vs Valores Ajustados)
2. Normal Q-Q (Gráfico de Cuantiles Normales)
3. Scale-Location (Escala-Ubicación)
4. Residuals vs Leverage (Residuos vs Apalancamiento)\]

5. Interpretación detallada de los gráficos diagnósticos

1. Residuals vs Fitted (Evalúa Linealidad): Muestra los residuos en el eje Y y las predicciones en el eje X. La línea roja debe ser aproximadamente horizontal y recta. Si ves una forma de “U” o curva, significa que la relación real no es lineal y deberías usar otro modelo (ej. regresión cuadrática).

2. Normal Q-Q (Evalúa Normalidad): Los puntos representan los residuos ordenados. Deben caer lo más cerca posible de la línea diagonal punteada. Si se desvían mucho en los extremos, los errores no son normales, lo que afecta la validez de los p-valores.

3. Scale-Location (Evalúa Homocedasticidad): Similar al primero, pero usa la raíz cuadrada de los residuos estandarizados. Buscamos que los puntos estén dispersos aleatoriamente formando una banda horizontal de ancho constante. Si forman un “embudo” (se abren o se cierran), hay heterocedasticidad (la varianza del error cambia).

4. Residuals vs Leverage (Evalúa Valores Atípicos Influyentes): Identifica si hay algún punto extremo que esté “jalando” la recta de regresión hacia él de manera desproporcionada. Si un punto cruza las líneas punteadas rojas (Distancia de Cook), significa que eliminar ese único punto cambiaría drásticamente toda la ecuación de la recta.

PARTE 10. Ejemplo Completo Integrado

1. Explicación Teórica: Flujo de Trabajo en Ciencia de Datos

Para consolidar todo lo aprendido, vamos a ejecutar un flujo de trabajo completo y realista. Imagina que te entregan un nuevo conjunto de datos sobre la edad de pacientes y su presión arterial sistólica. Tu objetivo es determinar si la edad predice la presión arterial, ajustar el modelo, evaluarlo y finalmente usarlo para predecir la presión de un paciente nuevo que no está en los datos.

2. Código en R

### PASO 1: Creación y Exploración de Datos ###
edad <- c(35, 45, 50, 55, 60, 65, 70, 75, 80, 85)
presion <- c(114, 120, 125, 130, 138, 145, 150, 155, 160, 165)
datos_medicos <- data.frame(Edad = edad, Presion = presion)

### PASO 2: Ajuste del Modelo ###
modelo_medico <- lm(Presion ~ Edad, data = datos_medicos)

### PASO 3: Resumen y Evaluación ###
resumen <- summary(modelo_medico)
print(resumen$coefficients) # Imprimir solo los coeficientes para simplificar
cat("R-cuadrado del modelo:", resumen$r.squared, "\n")

### PASO 4: Gráfica del Modelo ###
plot(datos_medicos$Edad, datos_medicos$Presion, 
     main = "Regresión: Edad vs Presión Arterial",
     xlab = "Edad (Años)", ylab = "Presión Sistólica",
     pch = 16, col = "darkred")
abline(modelo_medico, col = "blue", lwd = 2)

### PASO 5: Predicción para un nuevo paciente ###
# Creamos un data.frame con el nuevo valor de X
paciente_nuevo <- data.frame(Edad = 62)
# Usamos la función predict()
prediccion <- predict(modelo_medico, newdata = paciente_nuevo)

cat("\nPredicción:\nUn paciente de 62 años tendrá una presión estimada de:", round(prediccion, 2), "\n")

3. Explicación línea por línea del código

  • Paso 1: Creamos vectores de edad y presión y los unimos en datos_medicos.
  • Paso 2: Ajustamos el modelo con lm() indicando que Presion depende de Edad.
  • Paso 3: Guardamos el summary() en una variable. Extraemos específicamente la tabla de coeficientes y el valor de R-cuadrado usando el operador $.
  • Paso 4: Graficamos los puntos en rojo oscuro y superponemos la recta de regresión en azul.
  • Paso 5: Para predecir, R exige que los nuevos datos estén en un data.frame con el mismo nombre de columna (Edad). La función predict() toma el modelo ajustado y calcula el valor de Y para esa nueva X.

4. Salida esperada

             Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 76.818182 2.45866184 31.243900 1.155858e-09
Edad         1.024242 0.03956381 25.888365 3.864003e-09
R-cuadrado del modelo: 0.988201 

\[Se genera el gráfico con puntos rojos y línea azul\]

Predicción:
Un paciente de 62 años tendrá una presión estimada de: 140.32 

5. Interpretación final integrada

Conclusión del Modelo: El modelo nos indica que la ecuación es Presión = 76.81 + 1.024 * Edad. La pendiente (1.024) significa que, en promedio, por cada año que envejece una persona, su presión arterial sistólica aumenta en aproximadamente 1 unidad. El p-valor de la edad (3.86e-09) es minúsculo, lo que confirma que la edad es un predictor estadísticamente muy significativo de la presión arterial.

Calidad del Modelo: El R-cuadrado es 0.988 (98.8%). Esto es un ajuste extraordinariamente alto (típico de ejemplos de libros de texto, en medicina real suele ser más bajo). Significa que casi toda la variación en la presión arterial de esta muestra se explica simplemente conociendo la edad del paciente.

Aplicación Práctica (Predicción): La verdadera utilidad de la regresión en ciencia de datos es la predicción. Al ingresar a un paciente de 62 años (una edad que no existía en nuestros datos originales), el modelo interpola la información y predice una presión de 140.32. El médico ahora tiene una línea base matemática para evaluar si la presión real de ese paciente de 62 años está dentro de lo esperado o si presenta una anomalía que requiera tratamiento.