Visualización de datos longitudinales
Gráficos de perfiles, perfiles promedio y detección de patrones de anidamiento con ggplot2.
Datasets: SPRUCE1 (abetos de Sitka — Control vs Ozono)
Objetivos de aprendizaje
- Construir gráficos de perfiles individuales (spaghetti plots) y leer heterogeneidad en ellos.
- Superponer perfiles individuales con la tendencia promedio y bandas de variabilidad.
- Comparar grupos experimentales mediante rejillas temporales, boxplots y densidades.
- Calcular estadísticos descriptivos por grupo y tiempo, e interpretarlos en contexto.
- Identificar qué preguntas puede responder la exploración gráfica antes de modelar.
Por qué empezar por la exploración gráfica
Antes de ajustar cualquier modelo, la exploración visual de los datos longitudinales tiene tres objetivos concretos:
- Confirmar o descartar supuestos antes de especificar la estructura aleatoria: ¿las trayectorias son aproximadamente paralelas (solo intercepto aleatorio) o divergen (pendiente aleatoria necesaria)?
- Detectar anomalías: sujetos con trayectorias atípicas, mediciones faltantes, valores imposibles.
- Formular hipótesis sobre la estructura del modelo: ¿hay diferencias entre grupos? ¿el efecto del tiempo es lineal o no lineal? ¿la variabilidad cambia con el tiempo?
Un buen EDA longitudinal no reemplaza al modelo, pero evita especificaciones incorrectas que ningún criterio de ajuste posterior puede corregir.
Datos: crecimiento de abetos de Sitka bajo ozono (SPRUCE1)
El dataset SPRUCE1 proviene de un experimento clásico de contaminación atmosférica: árboles de Sitka (Picea
sitchensis) fueron sometidos a dos condiciones, Control (cámara sin contaminante) y Ozone (cámara con
ozono elevado), y medidos repetidamente a lo largo del tiempo. La respuesta es el logaritmo del tamaño
(log_growth), que linealiza el crecimiento inherentemente exponencial de la madera.
Este diseño es el escenario de referencia del Módulo 3 (Clases 3 y 5) del curso: dos grupos, medidas repetidas, heterogeneidad entre árboles dentro de cada grupo.
Por qué log(tamaño) y no tamaño
El crecimiento de los árboles es multiplicativo: un árbol no crece sumando centímetros fijos sino multiplicando su tamaño por un factor. Aplicar logaritmo convierte esa relación en aditiva, lo que hace plausible asumir errores normales aditivos. Es una transformación de Box-Cox estándar para datos de crecimiento biológico.
Cargar y auditar la estructura del dataset
Qué verificar antes de graficar:
- ¿Cuántos árboles hay en cada grupo? Si el diseño está desbalanceado, los perfiles promedio pueden ser engañosos.
- ¿Los tiempos de medición son los mismos para todos los árboles o hay mediciones faltantes?
- ¿
log_growthtiene valores negativos (plausibles para logaritmo) o hay ceros/NA que indican errores de carga?
Balance por grupo y tiempo
Qué leer en esta tabla:
- Comparar la columna
mediaentre Control y Ozone en cada tiempo: ¿en qué momento empiezan a divergir? - Observar si la
sdde Ozone supera sistemáticamente a la de Control: indicaría que el ozono no solo reduce el crecimiento sino que también aumenta la variabilidad entre árboles. - Si los grupos tienen el mismo
n_arbolesen todos los tiempos, el diseño es balanceado y el análisis es más sencillo.
Gráficos de perfiles
1 · Perfiles individuales por grupo (spaghetti)
Qué observar:
- ¿Las líneas de los dos grupos se separan claramente o se superponen? Una separación creciente con el tiempo indica una interacción grupo × tiempo.
- ¿Dentro de cada grupo las líneas son aproximadamente paralelas (solo intercepto aleatorio necesario) o divergen (pendiente aleatoria necesaria)?
- ¿Hay árboles con trayectorias anómalas (caída brusca, salto sin sentido)? Pueden indicar error de medición.
2 · Rejilla por grupo: cada árbol en su panel
Ver cada árbol individualmente, organizados en una rejilla y separados por grupo, revela la heterogeneidad intra-grupo de forma mucho más clara que el spaghetti plot.
Qué buscar:
- Paneles donde la línea gris (tendencia lineal) es una mala representación de los puntos: indicios de no-linealidad que el modelo puede necesitar capturar con splines o polinomios.
- Árboles con pocos puntos (mediciones faltantes): si son muchos, considerar si el dato faltante es aleatorio o sistemático (un árbol que murió no es faltante aleatorio).
3 · Perfil promedio por grupo con banda de variabilidad
El perfil promedio resume la tendencia poblacional de cada grupo. Agregarle una banda de ±1 SD o el intervalo de error estándar comunica cuánta variabilidad hay alrededor de esa tendencia.
Cómo leer este gráfico:
- La separación vertical entre las dos líneas en cada tiempo es la estimación descriptiva del efecto del ozono en ese momento. Si las bandas de SE no se solapan, hay evidencia exploratoria de diferencia.
- El tamaño de la banda de SD refleja la heterogeneidad entre árboles dentro de cada grupo: si la banda de Ozone es más ancha, el tratamiento introduce más variabilidad individual.
- Una divergencia progresiva entre las curvas indica interacción grupo × tiempo, lo que en el modelo se representa como un coeficiente de interacción.
4 · Perfiles individuales + promedio superpuestos
Combinar ambas capas en un mismo gráfico permite juzgar qué tan bien representa el promedio la distribución de trayectorias reales.
Qué leer:
- Si las líneas individuales están muy dispersas alrededor del promedio, la varianza del intercepto aleatorio será grande en el modelo.
- Si las trayectorias de Ozone convergen hacia el promedio más que las de Control (o viceversa), puede indicar que el tratamiento reduce la heterogeneidad.
5 · Distribución en cada tiempo: boxplot temporal por grupo
Este gráfico organiza la información por tiempo de medición (eje X), mostrando la distribución completa
de log_growth en cada ocasión, separada por grupo.
Cómo leer el boxplot temporal:
- Separación entre cajas en cada tiempo: diferencia descriptiva entre grupos. Si la separación crece con el tiempo, la interacción grupo × tiempo es evidente.
- Tamaño de las cajas (IQR): variabilidad entre árboles en ese tiempo. Un IQR creciente con el tiempo indica heterocedasticidad o divergencia de trayectorias.
- Outliers (puntos fuera del bigote): árboles con crecimiento inusualmente alto o bajo en ese momento. Si el mismo árbol aparece como outlier en múltiples tiempos, puede tener un intercepto aleatorio extremo.
6 · Comparación global: densidades por grupo
Este gráfico ignora el tiempo (colapsa todas las mediciones) y sirve únicamente como resumen marginal. Es útil para comunicar la diferencia entre grupos de forma simple, pero no debe usarse como única evidencia.
Limitación de la comparación marginal
Esta densidad colapsa todas las mediciones repetidas de un mismo árbol como si fueran independientes. Sobrestima el tamaño de muestra efectivo y no captura la correlación intra-árbol. Es útil como presentación visual preliminar, no como base para un test estadístico.
Guía de lectura: qué buscar en cada gráfico
- 1
Spaghetti plot
¿Las líneas son aproximadamente paralelas? → solo intercepto aleatorio. ¿Divergen o se cruzan? → considerar pendiente aleatoria. ¿Hay líneas que van en dirección opuesta a la mayoría? → posible outlier o error de datos.
- 2
Rejilla individual (facet por ID)
Permite ver la forma de la trayectoria de cada unidad. Confirma si la tendencia es lineal o requiere términos cuadráticos/splines. Revela mediciones faltantes (huecos en la línea).
- 3
Perfil promedio con banda
La banda de SE informa sobre la incertidumbre de la media; la de SD, sobre la variabilidad real entre sujetos. Si las bandas de SD de los dos grupos no se solapan en un tiempo, hay evidencia exploratoria fuerte de diferencia.
- 4
Boxplot temporal
Organiza la variabilidad dentro de cada tiempo de medición. Permite detectar si la varianza es constante (cajas del mismo tamaño en todos los tiempos) o crece/decrece. También revela asimetría local.
- 5
Densidad / boxplot global
Resumen rápido de la distribución marginal. Útil para detectar asimetría grave o bimodalidad. No reemplaza a los gráficos temporales; úsalo solo como contexto adicional.
Preguntas que debería responder el EDA antes de modelar
Una exploración bien hecha lleva a respuestas tentativas para estas preguntas:
- ¿El efecto del tiempo es lineal o necesita una función más flexible?
- ¿Hay una diferencia entre grupos que crece con el tiempo (interacción) o es constante (efecto principal)?
- ¿La variabilidad entre árboles parece mayor en un grupo que en otro (¿varianzas heterogéneas entre grupos)?
- ¿El modelo de partida razonable es un LMM con intercepto aleatorio solamente, o necesitamos también pendiente aleatoria?
- ¿Hay árboles que deberían examinarse con más cuidado antes de incluirlos en el análisis?
Llevar estas respuestas tentativas a la especificación del modelo es lo que se trabaja en los módulos 3 y 4.