Es la advertencia más repetida de la estadística y, aun así, la trampa en la que más análisis caen: encontrar que dos variables se mueven juntas y concluir que una causa la otra. Esta entrada muestra con Python por qué la correlación puede aparecer sin que exista relación causal alguna, cuáles son los tres mecanismos que la producen y qué preguntas hacerse antes de pasar de un coeficiente a una conclusión.
Una correlación perfecta y absurda
El siguiente ejemplo genera dos variables que no tienen nada que ver entre sí, salvo que ambas crecen con el tiempo:
import numpy as np
import pandas as pd
rng = np.random.default_rng(42)
anios = np.arange(2000, 2024)
ventas_helado = 100 + 5 * (anios - 2000) + rng.normal(0, 3, 24)
usuarios_internet = 300 + 40 * (anios - 2000) + rng.normal(0, 20, 24)
print(np.corrcoef(ventas_helado, usuarios_internet)[0, 1])
# 0.987
Un coeficiente de 0.987 parece contundente, pero nadie sostendría que vender helado hace crecer internet. Ambas series comparten una tendencia temporal, y cualquier par de series con tendencia correlaciona alto aunque sean independientes. Este fenómeno, llamado correlación espuria, es la razón de que correlacionar series de tiempo sin tratarlas sea el error más común del análisis aplicado.
Los tres mecanismos que producen correlación sin causalidad
- Causa común (confusor). El consumo de helado y los ahogamientos correlacionan porque el calor causa ambos. La tercera variable, temperatura, crea la asociación entre las otras dos.
- Causalidad inversa. Los países con más bomberos tienen más incendios. La lectura causal correcta va en sentido contrario al intuitivo: los incendios traen bomberos.
- Azar y búsqueda selectiva. Con suficientes pares de variables, algunos correlacionarán alto por pura suerte. Quien examina cien pares al 5 % de significancia debe esperar unos cinco hallazgos falsos.
Cómo se ve un confusor en los datos
El siguiente código simula el ejemplo del helado con el confusor explícito y muestra cómo la correlación desaparece al controlarlo:
n = 500
temperatura = rng.normal(25, 5, n)
helado = 2 * temperatura + rng.normal(0, 4, n)
ahogamientos = 0.5 * temperatura + rng.normal(0, 2, n)
df = pd.DataFrame({"helado": helado, "ahog": ahogamientos, "temp": temperatura})
print(df.corr().round(2))
# correlacion parcial: residuos tras quitar el efecto de la temperatura
res_h = helado - np.polyval(np.polyfit(temperatura, helado, 1), temperatura)
res_a = ahogamientos - np.polyval(np.polyfit(temperatura, ahogamientos, 1), temperatura)
print(np.corrcoef(res_h, res_a)[0, 1].round(3))
# aproximadamente 0: la asociacion era prestada
La correlación bruta entre helado y ahogamientos ronda 0.5, pero la correlación entre los residuos, es decir, lo que queda de cada variable después de descontar el efecto de la temperatura, es prácticamente cero. La asociación entera venía del confusor.
Qué hace falta para hablar de causalidad
Establecer causalidad exige algo más que un coeficiente. Las herramientas estándar, de más a menos concluyentes, son el experimento aleatorizado (los grupos solo difieren en el tratamiento, de modo que la diferencia de resultados es atribuible a él), los cuasi experimentos que aprovechan variación casi aleatoria (diferencias en diferencias, variables instrumentales, regresión discontinua) y el control estadístico de confusores observables, que es el más frágil porque nunca garantiza que no falte un confusor sin medir.
Cuando nada de eso está disponible, la respuesta honesta del analista es reportar la asociación como asociación, con sus posibles explicaciones alternativas, y resistir la tentación del titular causal.
Lista de preguntas antes de concluir
- ¿Existe una tercera variable plausible que cause ambas?
- ¿Podría la causalidad ir en sentido contrario?
- ¿Cuántas correlaciones se examinaron antes de encontrar esta?
- ¿Las series tienen tendencia temporal sin tratar?
- ¿El efecto sobrevive al controlar los confusores conocidos?
La correlación es una pista, no un veredicto: señala dónde vale la pena excavar, pero no dicta qué hay debajo. En una próxima entrada se verá cómo los diagramas causales (DAG) ayudan a decidir qué variables controlar y, sobre todo, cuáles no, porque controlar de más también fabrica sesgos.