5.1 Asociación espuria
Una asociación bivariada fuerte puede desaparecer o incluso invertirse cuando se consideran otras variables. Este es el problema de la asociación espuria. La regresión múltiple nos ayuda a estimar la asociación directa entre dos variables mientras se controla por confusores.
5.1.1 Los datos de divorcio
El ejemplo clásico usa datos a nivel de estado de EE.UU. sobre tasa de divorcio, tasa de matrimonio y edad mediana al matrimonio. La pregunta: ¿la tasa de matrimonio causa la tasa de divorcio, o la asociación es espuria?
# Simulate the divorce data (WaffleDivorce-style)
set.seed(42)
n_states <- 50
# Median age at marriage influences both marriage rate and divorce rate
median_age <- rnorm(n_states, mean = 26, sd = 1.5)
# Marriage rate is influenced by median age
marriage_rate <- 20 - 0.5 * median_age + rnorm(n_states, sd = 3)
# Divorce rate is influenced by median age (not directly by marriage rate)
divorce_rate <- 12 - 0.4 * median_age + rnorm(n_states, sd = 1.5)
# Standardize
divorce_s <- (divorce_rate - mean(divorce_rate)) / sd(divorce_rate)
marriage_s <- (marriage_rate - mean(marriage_rate)) / sd(marriage_rate)
median_age_s <- (median_age - mean(median_age)) / sd(median_age)
# Bivariate correlations
cat("Correlation matrix:\n")
print(round(cor(cbind(divorce_s, marriage_s, median_age_s)), 3))
# Plot
par(mfrow = c(1, 3))
plot(marriage_s, divorce_s, pch = 16, col = "steelblue",
xlab = "Marriage rate (standardized)", ylab = "Divorce rate (standardized)",
main = "Bivariate: marriage vs divorce")
abline(lm(divorce_s ~ marriage_s), lwd = 2, col = "firebrick")
plot(median_age_s, divorce_s, pch = 16, col = "steelblue",
xlab = "Median age (standardized)", ylab = "Divorce rate (standardized)",
main = "Bivariate: age vs divorce")
abline(lm(divorce_s ~ median_age_s), lwd = 2, col = "firebrick")
plot(median_age_s, marriage_s, pch = 16, col = "steelblue",
xlab = "Median age (standardized)", ylab = "Marriage rate (standardized)",
main = "Bivariate: age vs marriage")
abline(lm(marriage_s ~ median_age_s), lwd = 2, col = "firebrick")
par(mfrow = c(1, 1))La correlación bivariada entre la tasa de matrimonio y la tasa de divorcio es positiva y fuerte. Pero la edad mediana al matrimonio también está correlacionada con ambas. ¿Es la asociación matrimonio-divorcio real, o es espuria?
5.1.2 El modelo de regresión múltiple
El modelo de regresión múltiple incluye ambos predictores:
donde es la tasa de divorcio, es la tasa de matrimonio y es la edad mediana al matrimonio (todas estandarizadas).
# Multiple regression: divorce ~ marriage + age
# Using simulated data from the previous block
# Bivariate model: divorce ~ marriage only
m_biv <- lm(divorce_s ~ marriage_s)
cat("Bivariate model (divorce ~ marriage):\n")
cat(" beta_M:", round(coef(m_biv)[2], 3), "\n")
# Multiple regression: divorce ~ marriage + age
m_multi <- lm(divorce_s ~ marriage_s + median_age_s)
cat("\nMultiple regression (divorce ~ marriage + age):\n")
cat(" beta_M:", round(coef(m_multi)[2], 3), "\n")
cat(" beta_A:", round(coef(m_multi)[3], 3), "\n")
cat("\nAfter controlling for median age,\n")
cat("the marriage rate coefficient shrinks toward zero.\n")
cat("This suggests the marriage-divorce association is spurious.\n")5.1.3 Interpretación de los coeficientes
El coeficiente en la regresión múltiple nos dice la asociación parcial entre la tasa de matrimonio y la tasa de divorcio, manteniendo la edad mediana constante. Si se reduce casi a cero después de añadir la edad, la asociación bivariada era espuria — la edad era la causa común.
# Visualize the spurious association
# Plot the coefficients from bivariate vs multivariate models
# Bivariate coefficients
biv_M <- coef(m_biv)[2]
# Multivariate coefficients
multi_M <- coef(m_multi)[2]
multi_A <- coef(m_multi)[3]
# Plot
par(mfrow = c(1, 2))
# Coefficient comparison
barplot(c(biv_M, multi_M), names.arg = c("Bivariate", "Multivariate"),
col = c("steelblue", "firebrick"), border = "white",
main = "beta_M: marriage rate effect",
ylab = "Coefficient")
abline(h = 0, lty = 2)
# Predictor effects
barplot(c(multi_M, multi_A), names.arg = c("beta_M", "beta_A"),
col = c("steelblue", "firebrick"), border = "white",
main = "Multivariate coefficients",
ylab = "Coefficient")
abline(h = 0, lty = 2)
par(mfrow = c(1, 1))
cat("The marriage effect (beta_M) nearly disappears\n")
cat("after controlling for median age.\n")
cat("The age effect (beta_A) remains strong.\n")
cat("This is the signature of a spurious association.\n")5.1.4 La historia causal
La asociación espuria surge porque la edad mediana al matrimonio es una causa común tanto de la tasa de matrimonio como de la tasa de divorcio. El grafo causal es:
No hay una flecha directa de a . La asociación bivariada entre y se debe enteramente a la causa común . La regresión múltiple estima el efecto directo de sobre al condicionar sobre , lo que elimina el camino espurio.
Regresión no es causalidad. La regresión múltiple puede estimar efectos directos, pero solo si el grafo causal es correcto. Si condicionamos sobre las variables equivocadas, podemos crear o amplificar el sesgo. La clave es dibujar el grafo causal (un DAG) y usarlo para decidir qué variables incluir. Este es el enfoque de los modelos causales estructurales, que estudiamos con más detalle en capítulos posteriores. La regresión es una herramienta; el grafo causal es la estrategia.
Overthinking
La fórmula del coeficiente parcial. En una regresión múltiple , el coeficiente es el efecto de sobre después de eliminar el efecto lineal de tanto de como de . Matemáticamente:
Este es el teorema de Frisch-Waugh-Lovell: el coeficiente parcial se puede obtener (1) regresando sobre y tomando los residuales, (2) regresando sobre y tomando los residuales, (3) regresando los residuales de sobre los residuales de . Esto muestra que el coeficiente parcial mide la asociación entre y que no es explicada por .
Resumen de la Sección 5.1
- Las asociaciones espurias surgen cuando una causa común crea una asociación bivariada que desaparece después de controlar por el confusor.
- La regresión múltiple estima la asociación parcial (directa) entre cada predictor y el resultado.
- El ejemplo de divorcio muestra que la asociación matrimonio-divorcio es espuria — la edad mediana es la causa común.
- Regresión no es causalidad: el grafo causal determina qué variables incluir.
- El teorema de Frisch-Waugh-Lovell explica cómo funcionan los coeficientes parciales.