Introducción Problema de investigación El dengue es un problema de salud pública global, pero la carga más crítica se concentra en los casos que progresan a dengue grave, por su mayor necesidad de hospitalización y mayor riesgo de desenlaces adversos. En Colombia, SIVIGILA registra notificaciones de dengue (evento 210) y dengue grave (evento 220) y permite analizar factores demográficos, sociales, territoriales y temporales asociados con mayor severidad.

Pregunta de investigación

¿Qué factores demográficos, sociales, territoriales y temporales se asocian con la probabilidad de dengue grave en Colombia (SIVIGILA 2018–2024) y qué tan bien un modelo estadístico puede clasificar dengue grave?

Objetivo general

Describir las notificaciones 2018–2024 de dengue (210) y dengue grave (220), estandarizar variables clave y explorar patrones temporales y territoriales relevantes para vigilancia.

Objetivos específicos

1.Realizar EDA (tipo de variables, faltantes, frecuencias y estadística descriptiva).

2.Estandarizar edad a años y depurar registros según calidad (AJUSTE 6 y D).

3.Describir comportamiento temporal (año/semana) y territorial (departamento) diferenciando 210 vs 220.

4.Identificar semanas con mayor notificación por año y explorar patrones útiles para vigilancia.

2. Carga y limpieza de datos

## Archivos cargados: 14
##  [1] "Datos_2018_210.xls"  "Datos_2018_220.xls"  "Datos_2019_210.xlsx"
##  [4] "Datos_2019_220.xls"  "Datos_2020_210.xlsx" "Datos_2020_220.xls" 
##  [7] "Datos_2021_210.xls"  "Datos_2021_220.xls"  "Datos_2022_210.xlsx"
## [10] "Datos_2022_220.xls"  "Datos_2023_210.xlsx" "Datos_2023_220.xlsx"
## [13] "Datos_2024_210.xlsx" "Datos_2024_220.xlsx"
## 
## Conteo por año (archivo) y evento (post-filtro AJUSTE):
## # A tibble: 14 × 3
##    year_file event_file      n
##        <int>      <int>  <int>
##  1      2018        210  43652
##  2      2018        220    519
##  3      2019        210 123641
##  4      2019        220   1348
##  5      2020        210  76419
##  6      2020        220    862
##  7      2021        210  49325
##  8      2021        220    940
##  9      2022        210  65691
## 10      2022        220   1340
## 11      2023        210 126411
## 12      2023        220   1721
## 13      2024        210 309627
## 14      2024        220   3016

4. Estandarización y Derivación de Variables

## Filas df_std: 804512  | Columnas: 86
## Conteo por año y evento:
## # A tibble: 14 × 3
##    ano_std event_file      n
##      <int>      <int>  <int>
##  1    2018        210  43652
##  2    2018        220    519
##  3    2019        210 123641
##  4    2019        220   1348
##  5    2020        210  76419
##  6    2020        220    862
##  7    2021        210  49325
##  8    2021        220    940
##  9    2022        210  65691
## 10    2022        220   1340
## 11    2023        210 126411
## 12    2023        220   1721
## 13    2024        210 309627
## 14    2024        220   3016
## 
## Rangos año y semana:
## # A tibble: 1 × 4
##   min_ano max_ano min_sem max_sem
##     <int>   <int>   <int>   <int>
## 1    2018    2024       1      53
## 
## Top 15 edades (control):
## # A tibble: 15 × 8
##    edad  uni_med edad_anios ano_std semana_std sexo_std event_file source_file  
##    <chr> <chr>        <dbl>   <int>      <int> <fct>         <int> <chr>        
##  1 130   1              130    2018         43 M               210 Datos_2018_2…
##  2 124   1              124    2020         26 F               210 Datos_2020_2…
##  3 122   1              122    2020         43 M               210 Datos_2020_2…
##  4 122   1              122    2022         46 M               210 Datos_2022_2…
##  5 120   1              120    2018         10 M               210 Datos_2018_2…
##  6 120   1              120    2019         21 F               210 Datos_2019_2…
##  7 112   1              112    2018         14 F               210 Datos_2018_2…
##  8 110   1              110    2024          5 M               210 Datos_2024_2…
##  9 109   1              109    2018         37 F               210 Datos_2018_2…
## 10 108   1              108    2024         17 M               210 Datos_2024_2…
## 11 107   1              107    2020         12 M               210 Datos_2020_2…
## 12 107   1              107    2020          8 M               210 Datos_2020_2…
## 13 106   1              106    2023          3 F               210 Datos_2023_2…
## 14 106   1              106    2023          6 M               210 Datos_2023_2…
## 15 106   1              106    2024         13 F               210 Datos_2024_2…
## 
## Proporción de NA en variables clave (%):
## # A tibble: 1 × 3
##   na_edad_anios na_sexo na_depto
##           <dbl>   <dbl>    <dbl>
## 1             0       0        0

5. Análisis Descriptivo Inicial y Búsqueda de Outliers

## Filas: 804512  | Columnas: 86
## Distribución por evento (210/220):
## # A tibble: 2 × 3
##   event_file      n   pct
##        <int>  <int> <dbl>
## 1        210 794766 98.8 
## 2        220   9746  1.21
## 
## Distribución por sexo:
## # A tibble: 2 × 3
##   sexo_std      n   pct
##   <fct>     <int> <dbl>
## 1 M        412627  51.3
## 2 F        391885  48.7
## 
## Distribución sexo x gravedad:
## # A tibble: 4 × 4
##   sexo_std y_grave      n   pct
##   <fct>      <int>  <int> <dbl>
## 1 M              0 407730 98.8 
## 2 M              1   4897  1.19
## 3 F              0 387036 98.8 
## 4 F              1   4849  1.24
## 
## Descriptiva edad (años):
## # A tibble: 1 × 8
##        n media mediana    q1    q3   iqr        min   max
##    <int> <dbl>   <dbl> <dbl> <dbl> <dbl>      <dbl> <dbl>
## 1 804512  22.0      16     9    30    21 0.00000380   130
## 
## Outliers edad (IQR): 42918
## # A tibble: 42,918 × 8
##    edad  uni_med edad_anios ano_std semana_std sexo_std event_file source_file  
##    <chr> <chr>        <dbl>   <int>      <int> <fct>         <int> <chr>        
##  1 130   1              130    2018         43 M               210 Datos_2018_2…
##  2 124   1              124    2020         26 F               210 Datos_2020_2…
##  3 122   1              122    2020         43 M               210 Datos_2020_2…
##  4 122   1              122    2022         46 M               210 Datos_2022_2…
##  5 120   1              120    2018         10 M               210 Datos_2018_2…
##  6 120   1              120    2019         21 F               210 Datos_2019_2…
##  7 112   1              112    2018         14 F               210 Datos_2018_2…
##  8 110   1              110    2024          5 M               210 Datos_2024_2…
##  9 109   1              109    2018         37 F               210 Datos_2018_2…
## 10 108   1              108    2024         17 M               210 Datos_2024_2…
## # ℹ 42,908 more rows

6. Visualización de la Distribución de Edad

7. Distribución de Edad por Sexo

8. Diagrama de Caja (Boxplot) de Edad

📊 Interpretación del Diagrama de Caja de Edad

El Diagrama de Caja (Boxplot) muestra la distribución, dispersión y detección de valores atípicos (outliers) de la variable Edad (Años).


1. Resumen de Cinco Números (Valores Clave)

Medida Valor (Años) Interpretación
Mínimo (Min) 0 Es el valor más bajo de la muestra.
Primer Cuartil (Q1) 9.00 El 25% de los datos son iguales o inferiores a esta edad.
Mediana (Q2) 16.00 El 50% de los datos son inferiores a esta edad (valor central).
Tercer Cuartil (Q3) 30.00 El 75% de los datos son iguales o inferiores a esta edad.
Máximo (Max) 130.00 El valor de edad más alto registrado en el conjunto de datos.

2. Análisis de Dispersión y Asimetría

  • Rango Intercuartil (RIC):
    • Cálculo: \(Q3 - Q1 = 30.00 - 9.00 = 21.00\) años.
    • Significado: El 50% central de las edades de la población se encuentra en un rango de 21 años (entre 9 y 30 años).
  • Asimetría (Sesgo):
    • La distribución es Asimétrica Positiva (Sesgada a la Derecha).
    • Esto se debe a que el bigote superior (hacia las edades mayores) es mucho más largo que el inferior, y la mediana (16.00) está más cerca del Q1 (9.00) que del Q3 (30.00). Hay una concentración de personas jóvenes y una cola larga hacia las edades avanzadas.

3. Detección de Valores Atípicos (Outliers)

  • Cerca Superior (Upper Fence): 61.00 años.
  • Conclusión: Todas las edades por encima de los 61 años son consideradas valores atípicos u outliers.
  • El valor Máximo (130.00 años) es un outlier significativo que demuestra la existencia de individuos con edades extremadamente altas en la muestra, muy por encima de la población central.

9. Análisis Temporal: Top 5 Semanas con Mayor Notificación por Año

## Top 5 Semanas Epidemiológicas (SE) con Mayor Número de Notificaciones por Año:
## # A tibble: 35 × 3
##    ano_std semana_std notificaciones
##      <int>      <int>          <int>
##  1    2018         50           1774
##  2    2018         51           1616
##  3    2018         49           1612
##  4    2018         52           1611
##  5    2018         47           1505
##  6    2019         27           3596
##  7    2019         28           3219
##  8    2019         29           3093
##  9    2019         24           3092
## 10    2019         25           3065
## # ℹ 25 more rows

3. Conclusión General

El año 2024 no solo presenta sus picos de notificación a mitad de año, sino que también registra un volumen de notificaciones casi el doble del máximo observado en cualquier otro año del periodo analizado, marcando un aumento significativo en la actividad durante ese período, recordemos que en el 2020 y el 2021 se presento la pandoa por covid por cual causo una vigilancia baja para todo los EISP

10. Visualización de las Top 5 Semanas de Notificación por Año

11. Análisis Geográfico: Casos Totales por Departamento

## Casos Totales por Departamento (Ordenados de Mayor a Menor):
## # A tibble: 34 × 2
##    departamento_ocurrencia  total
##    <chr>                    <int>
##  1 VALLE                   164029
##  2 TOLIMA                   67529
##  3 SANTANDER                66147
##  4 META                     51886
##  5 BOLIVAR                  46649
##  6 HUILA                    46196
##  7 ATLANTICO                42052
##  8 ANTIOQUIA                37232
##  9 NORTE SANTANDER          30853
## 10 CORDOBA                  28780
## # ℹ 24 more rows

12. Visualización: Top 15 Departamentos por Tipo de Evento (Dengue vs. Grave)

####5. Modelo (Regresión logística)

## 
## Resumen del modelo (m1):
## 
## Call:
## glm(formula = y_grave ~ edad_anios + sexo_std + ano_std, family = binomial(), 
##     data = train)
## 
## Coefficients:
##                 Estimate   Std. Error z value             Pr(>|z|)    
## (Intercept) -161.1386772   14.2102130 -11.340 < 0.0000000000000002 ***
## edad_anios    -0.0054265    0.0007384  -7.349      0.0000000000002 ***
## sexo_stdF      0.0637518    0.0245561   2.596              0.00943 ** 
## ano_std        0.0776586    0.0070318  11.044 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 71133  on 491868  degrees of freedom
## Residual deviance: 70954  on 491865  degrees of freedom
## AIC: 70962
## 
## Number of Fisher Scoring iterations: 7
## 
## Odds Ratios (OR) con IC95% (Wald):
##          term
## 1 (Intercept)
## 2  edad_anios
## 3   sexo_stdF
## 4     ano_std
##                                                                               OR
## 1 0.0000000000000000000000000000000000000000000000000000000000000000000001043186
## 2 0.9945881890498513566711835665046237409114837646484375000000000000000000000000
## 3 1.0658277870045238522322961216559633612632751464843750000000000000000000000000
## 4 1.0807536196959002250395087685319595038890838623046875000000000000000000000000
##                                                                                        CI_low
## 1 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000008363424
## 2 0.99314981216929543172966532438294962048530578613281250000000000000000000000000000000000000
## 3 1.01574441541664572952186063048429787158966064453125000000000000000000000000000000000000000
## 4 1.06596049774803058873828831565333530306816101074218750000000000000000000000000000000000000
##                                                              CI_high
## 1 0.0000000000000000000000000000000000000000000000000000000001301186
## 2 0.9960286491287577703701572318095713853836059570312500000000000000
## 3 1.1183806224373797899573901304393075406551361083984375000000000000
## 4 1.0957520367343729361664372845552861690521240234375000000000000000

📈 Conclusión y Odds Ratios del Modelo Base (m1)

El Modelo Logístico Base (\(oldsymbol{m1}\)) demostró que las variables sociodemográficas y temporales son predictores estadísticamente significativos de la gravedad del caso. El análisis de Odds Ratios (OR) se detalla a continuación:

Odds Ratios e IC95% (Método Wald)
Término OR (Odds Ratio) IC95% Inferior IC95% Superior
(Intercept) 0.0000 0.0000 0.0000
edad_anios 0.9946 0.9931 0.9960
sexo_stdF 1.0658 1.0157 1.1184
ano_std 1.0808 1.0660 1.0958

Interpretación Clave:

  • Edad: La probabilidad de un caso grave disminuye marginalmente con el aumento de la edad, con un $ = 0.9946 $. Esto representa una reducción de aproximadamente 0.54 % en el riesgo por cada año de edad adicional.
  • Sexo: Los casos en personas de sexo Femenino tienen un riesgo 6.6 % mayor de ser graves ($ = 1.0658 $), comparado con el sexo Masculino.
  • Tiempo: El riesgo de gravedad ha mostrado un aumento constante de 8.1 % anualmente ($ = 1.0808 $), indicando una tendencia ascendente en la serie 2018-2023.

Todos los Intervalos de Confianza del 95% para los predictores (IC95%) excluyen la unidad (1), validando la significancia estadística de estos hallazgos. ### 📈 Conclusión Integrada: Riesgos y Odds Ratios del Modelo Base (m1)

El Modelo Logístico Base (\(oldsymbol{m1}\)) demostró que las variables sociodemográficas y temporales son predictores estadísticamente significativos de la gravedad del caso. El análisis de los Odds Ratios (OR), que miden el cambio en el riesgo (o ‘chance’) de gravedad, se presenta a continuación :

Odds Ratios e IC95% (Método Wald) para la Gravedad del Caso
Término OR (Odds Ratio) IC95% Inferior IC95% Superior
(Intercept) 0.0000 0.0000 0.0000
edad_anios 0.9946 0.9931 0.9960
sexo_stdF 1.0658 1.0157 1.1184
ano_std 1.0808 1.0660 1.0958

Interpretación Clave:

La evaluación del riesgo revela tres hallazgos principales, confirmados por el hecho de que todos los IC95% excluyen el valor 1:

  • Edad: La edad actúa como un factor ligeramente protector. Por cada año adicional, el riesgo de gravedad disminuye en aproximadamente 0.54 % ($ = 0.9946 $).
  • Sexo: Los casos en personas de sexo Femenino tienen un riesgo 6.6 % mayor de ser graves ($ = 1.0658 $) en comparación con la referencia (Masculino).
  • Tendencia Temporal: Existe una tendencia preocupante: el riesgo de gravedad ha aumentado anualmente en 8.1 % ($ = 1.0808 $) durante el periodo 2018-2023, señalando un posible cambio en la severidad o la notificación de casos graves con el tiempo.

Estos resultados fundamentan la evaluación de riesgos, que será validada con las métricas de rendimiento en el conjunto de prueba (2024).

## ### 1. Diagnóstico y Evaluación Rápida del Modelo (m1)
## 
## Pseudo-R2 (McFadden): 0.0025
## 
## VIF (colinealidad):
## edad_anios   sexo_std    ano_std 
##   1.002527   1.000010   1.002517
## 
## --- Predicción y Métricas en Test (2024) ---
## 
## AUC en 2024:
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 roc_auc binary         0.482
## 
## Umbral óptimo (Youden) en test 2024: 0.01353698
## 
## Matriz de confusión (test 2024) con umbral óptimo:
##           Truth
## Prediction      0      1
##          0  14080    261
##          1 295547   2755
## 
## Métricas (test 2024) con umbral óptimo:
## # A tibble: 6 × 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary       0.0538 
## 2 sens     binary       0.0455 
## 3 spec     binary       0.913  
## 4 ppv      binary       0.982  
## 5 npv      binary       0.00924
## 6 f_meas   binary       0.0869
## 
## --- Visualización Rápida de Rendimiento ---

🛑 Interpretación Detallada del Modelo (m1)

El modelo (m1), que utiliza ‘edad_anios’, ‘sexo_std’ y ‘ano_std’, muestra un rendimiento predictivo extremadamente deficiente en la identificación del dengue grave (Clase 1).


1. Diagnóstico de Ajuste y Estabilidad

  • Ajuste del Modelo (Pseudo-R2 McFadden): 0.0025
    • Interpretación: El valor es insignificante. El modelo no explica la variabilidad de la respuesta (dengue grave) y su ajuste a los datos es muy pobre.
  • Colinealidad (VIF):
    • Valores de VIF (~1.002) para todas las variables.
    • Interpretación: No hay problemas de colinealidad entre las variables predictoras. La pobre performance no se debe a la redundancia de las variables.

2. Evaluación de Capacidad Predictiva (Test 2024)

La capacidad del modelo para discriminar entre clases es prácticamente nula.

Métrica Valor Interpretación
AUC (Area Bajo Curva ROC) 0.482 Peor que el azar. El modelo tiene una capacidad de discriminación nula, clasificando peor que una selección aleatoria (0.50).
Sensibilidad (Sens) 0.0455 (4.55%) Rendimiento catastrófico en la detección de la clase positiva (dengue grave). Solo acierta 4.55% de los casos reales de dengue grave.
Especificidad (Spec) 0.913 (91.3%) Alto rendimiento en la identificación de la clase negativa (no dengue grave).
Accuracy (Precisión) 0.0538 (5.38%) Precisión global baja, fuertemente influenciada por la baja Sensibilidad.

3. Análisis Visual (Gráficos)

  • Curva ROC - Test 2024 :
    • Observación: La curva del modelo (línea sólida) se encuentra casi superpuesta a la línea diagonal de la clasificación aleatoria (azar).
    • Conclusión: Confirma visualmente que el modelo no tiene poder discriminatorio.
  • Probabilidades predichas (test 2024) :
    • Observación: Las distribuciones de probabilidad predicha para la clase 0 (rojo) y la clase 1 (azul) están masivamente superpuestas y concentradas en un rango muy estrecho (entre 0.0100 y 0.0200).
    • Conclusión: El modelo no logra asignar probabilidades significativamente diferentes a los casos positivos y negativos, lo que resulta en la baja AUC.

4. Matriz de Confusión (Umbral Óptimo: 0.0135)

Predicción/Verdadera Clase Real 0 (No Grave) Clase Real 1 (Grave)
Predicción 0 14,080 261 (Falsos Negativos)
Predicción 1 295,547 (Falsos Positivos) 2,755 (Verdaderos Positivos)

Análisis de la Matriz: El modelo está prediciendo una cantidad abrumadora de positivos (295,547 + 2,755), lo cual es un resultado de un umbral extremadamente bajo que clasifica a casi todos como “1” para intentar capturar la minoría de casos reales. A pesar de esto, la tasa de Falsos Negativos (261) sigue siendo alta en proporción a los Verdaderos Positivos, lo que se refleja en la baja sensibilidad.

💡 Recomendación

El modelo m1 es inaceptable para la predicción de dengue grave. Se requiere:

  1. Añadir Variables Predictoras con mayor poder explicativo (síntomas, comorbilidades).
  2. Implementar Técnicas de Balanceo de Clases (e.g., SMOTE, undersampling) para manejar la disparidad entre la clase 0 y 1.
  3. Explorar Modelos Más Robustos (e.g., Random Forest, Gradient Boosting).