En epidemiología muchas veces observamos que dos cosas ocurren juntas.
Por ejemplo:
Pero eso NO significa necesariamente que:
Entonces surge una pregunta importante:
¿Cómo podemos distinguir una verdadera causa de una simple asociación?
Los Diagramas Acíclicos Dirigidos (DAGs) nos ayudan a responder esa pregunta.
Un DAG es simplemente un dibujo con flechas que representa cómo creemos que las variables se relacionan entre sí.
En este tutorial aprenderemos a:
Imagine un mapa de carreteras.
Cada ciudad representa una variable:
Las carreteras con flechas muestran hacia dónde viaja la influencia.
Por ejemplo:
\[ Tabaquismo \rightarrow Cáncer \]
significa:
“Fumar puede causar cáncer”.
Las flechas siempre avanzan hacia adelante.
No pueden regresar al mismo punto.
Por eso se llaman:
Los nodos son las variables.
Ejemplos:
Las flechas representan relaciones causales.
\[ Ejercicio \rightarrow Pérdida\ de\ peso \]
Esto significa que el ejercicio puede producir pérdida de peso.
Existen tres estructuras fundamentales.
\[ A \rightarrow B \rightarrow C \]
Ejemplo:
\[ Obesidad \rightarrow Hipertensión \rightarrow Infarto \]
Aquí:
La variable del centro se llama:
mediador.
\[ A \leftarrow B \rightarrow C \]
Supongamos que observamos:
¿La chaqueta produce gripe?
No.
La verdadera explicación es el frío:
\[ Chaqueta \leftarrow Frío \rightarrow Gripe \]
El frío:
Entonces el frío es un:
confusor.
\[ A \rightarrow B \leftarrow C \]
Los colisionadores son una de las ideas más difíciles en epidemiología.
Pero podemos entenderlos con un ejemplo sencillo.
Imagine que un hospital recibe pacientes por dos razones:
Entonces:
\[ Accidente \rightarrow Hospitalización \leftarrow Diabetes \]
Ahora imagine que estudiamos SOLO personas hospitalizadas.
Dentro del hospital parecerá que:
Pero esa relación es artificial.
Fue creada porque seleccionamos únicamente personas hospitalizadas.
A esto se le llama:
Estos paquetes permiten crear DAGs en R.
Supongamos que queremos estudiar:
¿Fumar aumenta el riesgo de cáncer?
Pero sabemos que la edad influye en ambas variables.
dag_conf <- dagify(
Cancer ~ Smoking + Age,
Smoking ~ Age,
exposure = "Smoking",
outcome = "Cancer",
labels = c(
Smoking = "Tabaquismo",
Cancer = "Cáncer",
Age = "Edad"
)
)
ggdag(
dag_conf,
text = FALSE,
use_labels = "label"
) +
theme_dag() +
labs(
title = "Confusión por Edad"
)La edad:
Entonces existe un camino alternativo:
\[ Tabaquismo \leftarrow Edad \rightarrow Cáncer \]
Ese camino puede engañarnos.
Por eso necesitamos ajustar por edad.
Un DAG puede verse como un sistema de caminos.
Algunos caminos representan:
Queremos bloquear únicamente los caminos incorrectos.
Imagine que quiere viajar desde “Tabaquismo” hasta “Cáncer”.
Existe:
Por ejemplo:
\[ Tabaquismo \leftarrow Edad \rightarrow Cáncer \]
La edad crea un camino alternativo.
Ese es un:
camino de puerta trasera (backdoor path).
Nuestro objetivo es bloquearlo.
Muchos estudiantes creen que:
“entre más variables ajuste, mejor”.
Pero eso NO siempre es cierto.
A veces ajustar una variable empeora el análisis.
Es parecido a arreglar cables eléctricos:
En epidemiología:
dag_coll <- dagify(
Hospital ~ Diabetes + Accident,
exposure = "Diabetes",
outcome = "Hospital",
labels = c(
Diabetes = "Diabetes",
Accident = "Accidente",
Hospital = "Hospitalización"
),
coords = list(
x = c(Diabetes = 1,
Accident = 3,
Hospital = 2),
y = c(Diabetes = 1,
Accident = 1,
Hospital = 2)
)
)
ggdag_collider(
dag_coll,
text = FALSE,
use_labels = "label"
) +
theme_dag() +
labs(
title = "Ejemplo de Colisionador"
)Si analizamos únicamente personas hospitalizadas:
La asociación fue creada artificialmente.
⚠️ Idea clave:
Ajustar una variable incorrecta puede producir sesgo.
En epidemiología queremos hacer el menor ajuste necesario.
¿Por qué?
Porque:
Entonces buscamos:
el conjunto más pequeño de variables que elimina la confusión.
Supongamos que queremos estudiar:
¿El consumo de alcohol aumenta el riesgo cardiovascular?
Pero sabemos que:
dag_adjust <- dagify(
Disease ~ Alcohol + Hypertension,
Hypertension ~ Age,
Alcohol ~ Age,
exposure = "Alcohol",
outcome = "Disease",
labels = c(
Alcohol = "Alcohol",
Disease = "Enfermedad Cardiovascular",
Hypertension = "Hipertensión",
Age = "Edad"
)
)
ggdag(
dag_adjust,
text = FALSE,
use_labels = "label"
) +
theme_dag()R identifica qué variables debemos ajustar para bloquear los caminos de confusión.
En este caso:
El siguiente gráfico muestra qué variable debemos controlar para evitar confusión.
La gráfica resalta las variables necesarias para bloquear los caminos de confusión.
En este ejemplo:
La idea principal es: > no necesitamos ajustar todas las variables, solamente las necesarias. —
\[ Ejercicio \rightarrow Peso \rightarrow Diabetes \]
Si queremos estudiar el efecto TOTAL del ejercicio:
Porque el peso forma parte del mecanismo causal.
\[ Accidente \rightarrow Hospitalización \leftarrow Diabetes \]
No debemos ajustar hospitalización.
Supongamos:
\[ Exposición \rightarrow Enfermedad \rightarrow Hospitalización \]
La hospitalización ocurre DESPUÉS de la enfermedad.
En muchos estudios, seleccionar únicamente pacientes hospitalizados puede producir sesgo, porque la hospitalización también puede depender de otras causas:
\[ Exposición \rightarrow Enfermedad \rightarrow Hospitalización \leftarrow Accidente \]
Aquí la hospitalización se convierte en un colisionador. Al analizar solamente hospitalizados podemos crear asociaciones artificiales entre variables que originalmente no estaban relacionadas. —
Queremos estudiar:
¿Las bebidas azucaradas aumentan obesidad?
Sabemos además que:
dag_soda <- dagify(
Obesity ~ Soda + Exercise + Age,
Soda ~ Age,
exposure = "Soda",
outcome = "Obesity",
labels = c(
Soda = "Bebidas Azucaradas",
Obesity = "Obesidad",
Exercise = "Actividad Física",
Age = "Edad"
)
)
ggdag(
dag_soda,
text = FALSE,
use_labels = "label"
) +
theme_dag()La edad es un confusor porque:
Por eso debemos ajustar por edad.
Observe el DAG anterior e identifique:
Construya un DAG para estudiar:
\[ Alcohol \rightarrow Enfermedad\ cardiovascular \]
Considere:
Explique:
¿Por qué ajustar demasiadas variables puede ser peligroso?
Creer que asociación significa causalidad.
Ajustar automáticamente todas las variables.
Confundir mediadores con confusores.
Ignorar el tiempo.
La causa debe ocurrir antes del efecto.
Los DAGs NO reemplazan:
Un DAG es una herramienta para organizar nuestras ideas.
Greenland, Pearl y Robins mostraron que:
antes de hacer estadística, debemos pensar causalmente.
Los DAGs nos ayudan a:
Cada nodo en un DAG representa personas reales:
La epidemiología no trata únicamente de modelos matemáticos.
Su objetivo principal es:
comprender mejor los problemas de salud para ayudar a las personas.
| Función | Utilidad |
|---|---|
dagify() |
Crear DAG |
ggdag() |
Dibujar DAG |
adjustmentSets() |
Encontrar ajuste mínimo |
ggdag_adjustment_set() |
Visualizar ajuste |
ggdag_collider() |
Mostrar colisionadores |