← Todas las publicaciones

El error de ajuste que arruina tu estimación

Causal inference

Quieres estimar el efecto de la actividad física sobre el riesgo cardiovascular. Tienes una cohorte, tienes covariables y tienes el índice de masa corporal medido en todos los participantes.

Y entonces, “por si acaso”, metes el IMC al modelo.

Es el reflejo más común que veo en análisis observacionales, y es el más caro.

El IMC no es un confusor. Es un mediador.

La actividad física reduce el riesgo cardiovascular a través de cambios en la composición corporal, entre otras rutas. El IMC no está antes de la exposición: está en medio del camino.

Cuando ajustas por una variable que está en la ruta causal, bloqueas esa ruta. Tu estimación deja de medir el efecto total y pasa a medir algo que casi nadie quiso preguntar: el efecto directo, condicionado a un valor fijo del mediador.

El resultado práctico: tu estimación se atenúa hacia el nulo. Publicas que “la actividad física no muestra un efecto significativo”. No fue la actividad física la que falló — fue tu modelo el que la saboteó.

No toda variable medida es una variable de ajuste. Medirla no te obliga a usarla.

Tres roles, tres consecuencias distintas

La palabra “covariable” esconde tres cosas que se comportan de manera opuesta:

Rol Posición Qué pasa si ajustas
Confusor Causa común de exposición y desenlace Corriges el sesgo. Debes ajustar.
Mediador Está en la ruta causal exposición → desenlace Bloqueas parte del efecto. No ajustes, salvo que tu pregunta sea el efecto directo.
Colisionador Efecto común de dos variables Creas una asociación espuria donde no había ninguna.

El caso del colisionador es el más traicionero, porque el ajuste no atenúa: inventa. Condicionar sobre un efecto común de dos causas independientes las vuelve dependientes dentro de los estratos. Es el mecanismo detrás de una buena parte de las “paradojas” epidemiológicas que resultan no ser paradojas, sino artefactos de selección.

El p-valor no puede decidir esto

Aquí está el punto incómodo: ninguna de estas tres situaciones se distingue mirando los datos.

Un confusor, un mediador y un colisionador pueden producir exactamente el mismo patrón de asociaciones marginales. Pueden tener el mismo p-valor, el mismo cambio en el estimador al entrar al modelo, el mismo AIC. Los criterios de selección automática de variables —stepwise, cambio del 10% en el estimador, “todo lo que salga significativo”— son ciegos a la diferencia, porque la diferencia no está en los datos.

Está en la estructura causal que asumes. Y esa estructura hay que declararla.

Por eso se dibuja el DAG antes de correr el primer modelo

Un grafo acíclico dirigido obliga a escribir lo que ya creías. No añade información mágica: hace explícitos los supuestos que de todos modos estabas usando, y los pone donde un revisor puede discutirlos.

Con el grafo escrito, la elección del conjunto de ajuste deja de ser una opinión y pasa a ser un problema resoluble: el criterio de puerta trasera identifica qué rutas no causales hay que cerrar, y la d-separación verifica formalmente si un conjunto candidato las cierra todas sin abrir ninguna nueva.

Eso es verificable. Es determinístico. Dos personas con el mismo DAG llegan al mismo conjunto de ajuste, o una de las dos cometió un error demostrable.

La parte que falta en la práctica

El problema no es que los epidemiólogos no sepan esto. Se enseña en cualquier programa serio.

El problema es la fricción: dibujar el DAG en una herramienta, trasladarlo mentalmente al código, escribir el lm() o el glm() con las covariables correctas, y después redactar el párrafo de métodos que justifique la decisión ante el revisor. Son cuatro traducciones manuales, y cada una es una oportunidad de equivocarse en silencio.

Por eso construí IAM-CausalKit: dibujas el DAG, el motor formal verifica el conjunto de ajuste por d-separación, y sale el código en R o Python junto con el párrafo redactado para la sección de métodos. Importa y exporta sintaxis DAGitty, así que no tienes que abandonar lo que ya usas.

Un principio que no se negocia en esa herramienta: el modelo de lenguaje propone, el motor formal dispone, el experto confirma. Ningún resultado causal se emite desde un LLM. La sugerencia puede venir de una máquina estadística; la verificación tiene que venir de un algoritmo que o demuestra la d-separación o no la demuestra.

Lo que conviene revisar hoy

Si tienes un análisis observacional en curso, tres preguntas rápidas:

  1. ¿Alguna de tus covariables de ajuste ocurre después de la exposición? Si sí, probablemente sea un mediador.
  2. ¿Alguna es un efecto compartido de la exposición y del desenlace —o de sus causas? Si sí, ajustar por ella puede estar creando la asociación que estás reportando.
  3. ¿Puedes escribir, en una frase, por qué cada covariable está en el modelo? Si la respuesta para alguna es “porque estaba en la base de datos”, esa variable necesita una decisión, no una inercia.

La diferencia entre un análisis defendible y uno que se cae en revisión rara vez está en el software. Está en si alguien dibujó el diagrama antes de escribir la primera línea de código.