9.2 Modelos lineales generalizados
Los modelos lineales generalizados (GLM) extienden el modelo lineal a resultados no gaussianos añadiendo una función de enlace. La función de enlace transforma el predictor lineal a la escala natural del resultado.
9.2.1 El marco GLM
Un GLM tiene tres componentes:
- Verosimilitud: La distribución del resultado de la familia exponencial (gaussiana, binomial, Poisson, etc.).
- Predictor lineal: (igual que antes).
- Función de enlace: , donde .
La función de enlace mapea de la escala natural del parámetro a la recta real:
| Resultado | Verosimilitud | Enlace | Nombre | | ----------------- | ------------- | ------------- | ------------------- | | Continuo | Gaussiana | Identidad | Regresión lineal | | Binario | Binomial | Logit | Regresión logística | | Conteo | Poisson | Log | Regresión Poisson | | Continuo positivo | Gamma | Log o inverso | Regresión Gamma |
# Demonstrate different GLM link functions
set.seed(42)
n <- 200
x <- runif(n, 0, 10)
# 1. Gaussian (identity link)
y_gauss <- 2 + 1.5 * x + rnorm(n, sd = 2)
m_gauss <- lm(y_gauss ~ x)
# 2. Binomial (logit link)
p_true <- 1 / (1 + exp(-(0 + 0.5 * x)))
y_bin <- rbinom(n, 1, p_true)
m_logistic <- glm(y_bin ~ x, family = binomial)
# 3. Poisson (log link)
lambda_true <- exp(0.2 + 0.15 * x)
y_pois <- rpois(n, lambda_true)
m_pois <- glm(y_pois ~ x, family = poisson)
cat("Gaussian (identity link):\n")
cat(" Intercept:", round(coef(m_gauss)[1], 3), " Slope:", round(coef(m_gauss)[2], 3), "\n")
cat("\nBinomial (logit link):\n")
cat(" Intercept:", round(coef(m_logistic)[1], 3), " Slope:", round(coef(m_logistic)[2], 3), "\n")
cat(" (on logit scale; use plogis() for probabilities)\n")
cat("\nPoisson (log link):\n")
cat(" Intercept:", round(coef(m_pois)[1], 3), " Slope:", round(coef(m_pois)[2], 3), "\n")
cat(" (on log scale; use exp() for counts)\n")9.2.2 El enlace logit (regresión logística)
Para resultados binarios, el enlace logit mapea probabilidades a la recta real:
La inversa es la función logística:
# Demonstrate logistic regression
set.seed(42)
n <- 200
x <- runif(n, 0, 10)
# True relationship
p_true <- 1 / (1 + exp(-(-2 + 0.5 * x)))
y <- rbinom(n, 1, p_true)
# Fit logistic regression
m <- glm(y ~ x, family = binomial)
cat("Logistic regression:\n")
cat(" Intercept:", round(coef(m)[1], 3), "\n")
cat(" Slope:", round(coef(m)[2], 3), "\n")
# Convert to probability scale
cat("\nPredicted probabilities at x = 0, 5, 10:\n")
for (x_val in c(0, 5, 10)) {
logit_p <- coef(m)[1] + coef(m)[2] * x_val
p_val <- 1 / (1 + exp(-logit_p))
cat(sprintf(" x = %2d: p = %.3f\n", x_val, p_val))
}
# Plot
x_seq <- seq(0, 10, length.out = 200)
logit_pred <- coef(m)[1] + coef(m)[2] * x_seq
p_pred <- 1 / (1 + exp(-logit_pred))
plot(x, y, pch = 16, col = "steelblue",
main = "Logistic regression: binary outcome",
xlab = "x", ylab = "p(y = 1)")
lines(x_seq, p_pred, lwd = 2, col = "firebrick")
abline(h = 0.5, lty = 2, col = "gray50")9.2.3 El enlace log (regresión Poisson)
Para resultados de conteo, el enlace log asegura que el conteo esperado siempre sea positivo:
# Demonstrate Poisson regression
set.seed(42)
n <- 200
x <- runif(n, 0, 10)
# True relationship: lambda = exp(0.5 + 0.2 * x)
lambda_true <- exp(0.5 + 0.2 * x)
y <- rpois(n, lambda_true)
# Fit Poisson regression
m <- glm(y ~ x, family = poisson)
cat("Poisson regression:\n")
cat(" Intercept:", round(coef(m)[1], 3), "\n")
cat(" Slope:", round(coef(m)[2], 3), "\n")
# Convert to count scale
cat("\nPredicted counts at x = 0, 5, 10:\n")
for (x_val in c(0, 5, 10)) {
log_lambda <- coef(m)[1] + coef(m)[2] * x_val
cat(sprintf(" x = %2d: lambda = %.3f\n", x_val, exp(log_lambda)))
}
# Plot
x_seq <- seq(0, 10, length.out = 200)
log_pred <- coef(m)[1] + coef(m)[2] * x_seq
lambda_pred <- exp(log_pred)
plot(x, y, pch = 16, col = "steelblue",
main = "Poisson regression: count outcome",
xlab = "x", ylab = "y (count)")
lines(x_seq, lambda_pred, lwd = 2, col = "firebrick")La función de enlace es el puente. El modelo lineal vive en la recta real — puede producir cualquier valor de a . Pero los resultados viven en escalas diferentes: las probabilidades están en , los conteos están en . La función de enlace une estas escalas. Transforma el predictor lineal a la escala natural del resultado. Esto no es un truco — es la consecuencia natural de elegir la verosimilitud de entropía máxima y luego conectarla al modelo lineal. La función de enlace es lo que hace que los GLM sean generales.
Resumen de la Sección 9.2
- Los GLM extienden los modelos lineales con una función de enlace: .
- Enlace logit para resultados binarios: .
- Enlace log para resultados de conteo: .
- Enlace identidad para resultados continuos: (regresión lineal ordinaria).
- La función de enlace une el predictor lineal con la escala natural del resultado.