Regresión lineal: el modelo más útil que existe

r
estadistica
lm() en R: fórmulas, interpretación de coeficientes, intervalos de confianza con confint(), predicción con predict() y por qué R² no es todo.

Por qué la regresión lineal es central

La regresión lineal no es un modelo más, es el modelo de referencia sobre el que se entiende todo lo demás. Es:

  • Suficiente para una enorme cantidad de problemas reales (predecir un precio, estimar un efecto controlado por covariables, hacer un baseline para modelos más complejos).
  • Interpretable: los coeficientes tienen significado directo en las unidades del problema.
  • El cimiento de ANOVA (que ya viste), GLM, modelos mixtos y muchas extensiones.

En R, la regresión lineal se ajusta con lm(). Dominarlo bien rinde más que aprender diez algoritmos sofisticados a medias.

La fórmula: y ~ x

R usa una sintaxis de fórmula heredada de S. La notación básica:

modelo <- lm(y ~ x, data = mi_data)

Lee: “modela Y en función de X usando los datos de mi_data”. La tilde (~) separa la variable dependiente de los predictores.

Ejemplo concreto:

modelo <- lm(mpg ~ wt, data = mtcars)
modelo
#>
#> Call:
#> lm(formula = mpg ~ wt, data = mtcars)
#>
#> Coefficients:
#> (Intercept)           wt
#>      37.285       -5.344

Dos coeficientes:

  • Intercept (37.285): valor esperado de mpg cuando wt = 0. Aquí no tiene sentido físico (un coche no pesa 0), pero es el ancla de la recta.
  • wt (−5.344): por cada incremento de 1 unidad en wt (1000 libras), mpg baja 5.34 unidades en media.

La recta es: mpg = 37.285 − 5.344 × wt.

summary() del modelo: lo que importa

summary(modelo)
#>
#> 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 ***
#>
#> 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

Las partes que importan:

  • Residuals: distribución de errores. Idealmente simétrica y sin extremos. Si hay asimetría grande, el modelo lineal no es adecuado.
  • Coefficients · Estimate: los coeficientes (lo que interpretas).
  • Coefficients · Std. Error: incertidumbre del coeficiente.
  • Coefficients · t value y Pr(>|t|): test de “¿es significativamente distinto de cero?”. El p-value pequeño rechaza H₀ de que el coeficiente sea cero.
  • R² (Multiple R-squared): proporción de la varianza de Y explicada por el modelo. Aquí 0.75 = el modelo explica el 75 %.
  • Adjusted R²: R² penalizado por el número de predictores. Más justo para comparar modelos con distinto número de variables.
  • F-statistic: test global del modelo (¿es algún coeficiente distinto de cero?). Equivalente al summary() de ANOVA del modelo.

Interpretar coeficientes

La regla mental:

“Un incremento de una unidad en X se asocia, en media, con un cambio de β unidades en Y”.

Para mpg ~ wt:

  • “Cada 1000 libras adicionales de peso se asocian, en media, con una reducción de 5.34 millas por galón en consumo”.

Detalles importantes:

  1. “En media” no es decoración, la regresión modela la media condicional E[Y|X], no valores individuales.
  2. “Se asocia con”, no “causa”. La regresión por sí sola no establece causalidad (ver tutorial de correlación).
  3. Las unidades importan. Si wt está en toneladas, el coeficiente sería distinto numéricamente. La unidad del coeficiente es unidad(Y) / unidad(X).

Intervalos de confianza con confint()

El summary() muestra el error estándar pero no el IC directamente. Para obtenerlo:

confint(modelo)
#>                 2.5 %    97.5 %
#> (Intercept) 33.450500 41.119715
#> wt          -6.486308 -4.202635

Lee: “con 95 % de confianza, el coeficiente real de wt está entre −6.49 y −4.20”. Si el IC no contiene cero, el coeficiente es significativamente distinto de cero al 5 %.

Reportar el IC es más informativo que reportar el p-value. Comunica magnitud E incertidumbre a la vez.

Predicción con predict()

Una vez tienes un modelo, puedes predecir Y para nuevos valores de X:

nuevos <- data.frame(wt = c(2.5, 3.0, 4.0))
predict(modelo, newdata = nuevos)
#>        1        2        3
#> 23.9237 21.2515 15.9070

Para añadir intervalos:

# IC para la media condicional (¿dónde está la recta?)
predict(modelo, newdata = nuevos, interval = "confidence")
#>        fit      lwr      upr
#> 1 23.9237  22.59311 25.25425
#> 2 21.2515  20.12266 22.38040
#> 3 15.9070  14.43984 17.37414

# IC para predicciones individuales (¿dónde estaría un coche nuevo?)
predict(modelo, newdata = nuevos, interval = "prediction")
#>        fit       lwr      upr
#> 1 23.9237  17.55411 30.29328
#> 2 21.2515  14.92993 27.57311
#> 3 15.9070   9.45557 22.35840

Diferencia crítica:

  • "confidence" es el IC para la media de Y dado X, ¿dónde pasaría la recta verdadera? Estrecho.
  • "prediction" es el IC para una observación individual futura, incluye la variabilidad alrededor de la recta. Mucho más ancho.

Confundirlos al reportar es un error frecuente. Si predices el precio de UN coche, quieres prediction. Si quieres caracterizar “el precio medio de coches con estas características”, confidence.

R²: por qué no es todo

R² es tentador porque resume el modelo en un único número entre 0 y 1. Pero:

  1. R² depende del rango de X. El mismo modelo aplicado a un subconjunto restringido da R² menor. Comparar R² entre estudios con rangos distintos es engañoso.
  2. R² alto no significa “el modelo es correcto”: solo “explica mucha variabilidad”. Un modelo lineal en relación curva puede tener R² alto y residuos sistemáticamente sesgados.
  3. R² no penaliza el sobreajuste: añadir cualquier predictor (incluso ruido aleatorio) lo sube. Para comparar modelos, usa R² ajustado o AIC/BIC.

Regla práctica: R² es un indicador, no un veredicto. Acompáñalo con inspección de residuos y, en modelos múltiples, comparación con baseline.

Trampas habituales

  • Interpretar el intercept fuera del rango de los datos. Si wt = 0 no es físicamente posible, no le des sentido al intercept. Es un parámetro técnico, no un valor reportable.
  • Reportar R² sin diagnóstico. R² = 0.95 con residuos en forma de U significa que el modelo lineal es incorrecto pero captura la tendencia general. El diagnóstico (siguiente tutorial) revela el problema.
  • Predecir fuera del rango de los datos (extrapolación). El modelo solo es válido dentro del rango en que se entrenó. Predecir mpg para wt = 10 cuando los datos van de 1.5 a 5.4 es invento.
  • Confundir IC de confianza con IC de predicción. Si vas a comunicar incertidumbre sobre una predicción individual, usa interval = "prediction". El de confidence subestima la incertidumbre real.

En la siguiente entrega

Has aprendido a ajustar y leer una regresión simple. En el mundo real, una sola variable explicativa rara vez basta. La siguiente entrega añade múltiples predictores: cómo interpretar coeficientes “controlando por otras variables”, qué pasa con la colinealidad, e interacciones. Es lo siguiente.