Brechas de Género en la Salud Migrante: Patrones de Acceso, Servicios y Costos (2014-2022)

Equipo: Andrea Bernal, Karina Alfonso, Leyson Celis

Delegación de responsabilidades:
Limpieza y preparación de los datos (Karina Alfonso)  |  Análisis exploratorio y estadístico (Andrea Bernal)  |  Visualización y Conclusiones (Leyson Celis)

1 Introducción

El acceso a servicios de salud para la población migrante es un tema de creciente relevancia social y política. En particular, las desigualdades de género en el acceso, uso y costo de los servicios de salud entre la población migrante pueden tener un impacto significativo en la equidad y eficiencia del sistema sanitario.

1.1 Planteamiento del problema

La población migrante enfrenta barreras únicas en el acceso a servicios de salud, las cuales pueden variar significativamente según el género. Estudios previos sugieren que las mujeres migrantes utilizan más los servicios de salud que los hombres, pero existen pocos análisis que comparen específicamente qué tipos de servicios son más demandados por cada grupo y a qué costo.

1.2 ¿Por qué debería interesarme esto?

Esta información es crucial para: - Identificar desigualdades en el acceso a la salud entre hombres y mujeres migrantes. - Optimizar recursos en políticas públicas, asegurando que las necesidades específicas de cada grupo sean cubiertas. - Reducir costos innecesarios en el sistema de salud, asignando presupuestos de manera más eficiente.

1.3 Antecedentes y datos

La población migrante enfrenta barreras únicas en el acceso a servicios de salud, las cuales pueden variar significativamente según el género. Para responder a estas preguntas, se analizará el dataset “17. Atenciones en Salud a Población Migrante” del Ministerio de Salud y Protección Social, que describe el número de usuarios migrantes atendidos en el primer nivel de complejidad del municipio y los principales motivos de consulta, desagregado por mes, año, diagnóstico y costos, para el periodo comprendido entre octubre de 2014 y diciembre de 2022.

El dataset contiene aproximadamente 234,000 registros y variables clave como:

  • Sexo
  • Servicio y especialidad
  • Valor del servicio

1.4 Técnica analítica propuesta

Para abordar el problema se emplearán las siguientes técnicas:

  • Estadística descriptiva:
    • Frecuencias y porcentajes para identificar los servicios más utilizados por cada género.
    • Medidas de tendencia central (media) para comparar el costo promedio por servicio y género.
  • Visualización de datos:
    • Gráficos de barras comparativos para mostrar los 3 servicios más frecuentes por sexo.
    • Diagramas de caja (boxplots) para comparar la distribución del costo de los servicios entre hombres y mujeres migrantes.

1.5 Preguntas de investigación

  1. ¿Cuáles son los 3 servicios de salud más utilizados por mujeres migrantes vs. hombres migrantes, y cómo se compara su costo promedio?
  2. ¿Existen diferencias significativas en el tipo de especialidad médica demandada según el sexo?
  3. ¿Cómo varía la distribución del costo de los servicios de salud entre hombres y mujeres migrantes?

1.6 Importancia

Este análisis permitirá:

  • Identificar prioridades asistenciales y brechas entre oferta y demanda real.
  • Ajustar la capacidad instalada del sistema de salud (por ejemplo, aumentar personal en especialidades críticas).
  • Detectar necesidades de campañas para condiciones prevenibles que generan alta demanda.
  • Priorizar inversiones y redistribuir presupuestos según necesidades detectadas.
  • Encontrar oportunidades para reducir costos innecesarios y mejorar la eficiencia del sistema de salud.

2 Metodología

2.1 Paquetes de R utilizados

  • tidyverse: Colección de paquetes para manipulación y visualización de datos. Incluye:
    • ggplot2: Sistema para crear visualizaciones por capas
    • dplyr: Funciones para manipulación de datos (filter, select, mutate, etc.)
    • tidyr: Herramientas para ordenar datos (pivot_wider, pivot_longer)
    • readr: Lectura eficiente de archivos CSV y otros formatos
  • lubridate: Manejo y conversión de fechas, facilitando operaciones cronológicas.
  • janitor: Limpieza y estandarización de nombres de columnas y datos.
  • stringr: Manipulación de texto y trabajo con expresiones regulares.
  • knitr: Generación de documentos dinámicos y tablas formateadas.
  • scales: Formateo de escalas en visualizaciones (moneda, porcentajes, números).

2.2 Preparación de los datos

Fuente:
Los datos fueron obtenidos de Atenciones en Salud a Población Migrante del Ministerio de Salud y Protección Social.

  • Fecha de creación: 7 de marzo de 2022
  • Última actualización de los datos: 18 de marzo de 2025
  • Última actualización de metadatos: 7 de abril de 2025

Propósito original de los datos:
El conjunto de datos fue creado con el objetivo de registrar y hacer seguimiento a las atenciones en salud prestadas a población migrante, especialmente en el contexto de la migración proveniente de Venezuela. El propósito principal es monitorear el acceso a los servicios de salud por parte de esta población en Colombia y apoyar la toma de decisiones en política pública y gestión en el sector salud.

Período de recopilación:
Los datos abarcan el período comprendido entre octubre de 2014 y marzo de 2022, permitiendo un análisis temporal de la evolución de las atenciones médicas brindadas a la población migrante durante esos años.

Cantidad y tipo de variables originales:
El conjunto incluye 9 variables principales:

  • Mes
  • Año
  • Fecha de cargo
  • Tipo de servicio (Consulta, Vacunas, Laboratorio)
  • Servicio
  • Especialidad (Medicina General, Imagenología, Anestesiología)
  • Valor
  • Lugar donde se prestó el servicio
  • Curso de vida
  • Sexo

Peculiaridades sobre los datos:

  • Ausencia de identificación individual: Los datos son agregados, es decir, no contienen información personal o identificadores únicos de los pacientes, cumpliendo con la Ley 1581 de 2012 (Ley de Protección de Datos Personales en Colombia).
  • Algunas variables presentan valores faltantes o inconsistentes (por ejemplo, la columna de mes incluye tanto el número como el nombre del mes, y pueden existir valores negativos en “valor_servicio”).

Importación y limpieza de datos:

A continuación, se describen los pasos de importación y limpieza realizados para garantizar la calidad y utilidad del análisis:

  • Importación de datos:
    Se importa el archivo CSV original utilizando la función read_csv(), lo que permite cargar el dataset completo en R para su posterior procesamiento.
  datos <- read_csv("datos_salud_migrantes.csv")
## Rows: 234924 Columns: 11
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (7): MES, tipo_de_servicio, SERVICIO, ESPECIALIDAD, LUGAR, Curso de vid...
## dbl  (3): AÑO, CANTIDAD, VALOR_SERVICIO
## dttm (1): FECHA_CARGO
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
  head(datos)
## # A tibble: 6 × 11
##   MES             AÑO FECHA_CARGO         tipo_de_servicio SERVICIO ESPECIALIDAD
##   <chr>         <dbl> <dttm>              <chr>            <chr>    <chr>       
## 1 12. Diciembre  2017 2017-04-12 00:00:00 Laboratorio      37105 M… IMAGENOLOGI…
## 2 12. Diciembre  2017 2017-04-12 00:00:00 Laboratorio      37105 M… IMAGENOLOGI…
## 3 07. Julio      2017 2017-07-20 00:00:00 Laboratorio      37105 M… IMAGENOLOGI…
## 4 07. Julio      2017 2017-07-20 00:00:00 Laboratorio      37105 M… IMAGENOLOGI…
## 5 08. Agosto     2017 2017-10-08 00:00:00 Laboratorio      37105 M… IMAGENOLOGI…
## 6 08. Agosto     2017 2017-10-08 00:00:00 Laboratorio      37105 M… IMAGENOLOGI…
## # ℹ 5 more variables: CANTIDAD <dbl>, VALOR_SERVICIO <dbl>, LUGAR <chr>,
## #   `Curso de vida` <chr>, Sexo <chr>
  • Estandarización de nombres de columnas:
    Se utiliza la función clean_names() del paquete janitor para convertir todos los nombres de las columnas a minúsculas y formato snake_case. Esto facilita la manipulación y evita errores por diferencias de mayúsculas/minúsculas o espacios.
  datos <- datos %>% clean_names()
  colnames(datos)
##  [1] "mes"              "ano"              "fecha_cargo"      "tipo_de_servicio"
##  [5] "servicio"         "especialidad"     "cantidad"         "valor_servicio"  
##  [9] "lugar"            "curso_de_vida"    "sexo"
  • Limpieza y transformación de variables:
    • Mes: Se extrae y estandariza el nombre del mes, ya que originalmente viene acompañado de un número y puede tener tildes. Se convierte a factor ordenado para facilitar análisis temporales.
    • Fechas: Se transforma la columna de fecha a formato de fecha reconocible por R, permitiendo análisis cronológicos.
    • Variables numéricas: Se convierten las columnas de cantidad y valor del servicio a tipo numérico para asegurar cálculos correctos.
    • Año: Se crea una nueva columna a_o a partir de la columna original ano y luego se elimina la columna redundante.
    • Variables categóricas: Se convierten a factores las variables como sexo, curso de vida, tipo de servicio, servicio, especialidad y lugar, para facilitar análisis por categorías.
  datos <- datos %>%
      mutate(
        mes = str_trim(str_extract(mes, "(?<=\\.)\\s*\\w+")),
        mes = tolower(mes),
        mes = str_replace_all(mes, "é", "e"),
        mes = case_when(
          mes %in% c("enero", "febrero", "marzo", "abril", "mayo", "junio",
                    "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre") ~ mes,
          TRUE ~ NA_character_
        ),
        mes = factor(mes,
                    levels = c("enero", "febrero", "marzo", "abril", "mayo", "junio",
                                "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"),
                    ordered = TRUE),
        fecha_cargo = parse_date_time(fecha_cargo, orders = c("dmy", "ymd", "mdy")),
        cantidad = as.numeric(cantidad),
        valor_servicio = as.numeric(valor_servicio),
        a_o = as.integer(ano),
        sexo = as.factor(sexo),
        curso_de_vida = as.factor(curso_de_vida),
        tipo_de_servicio = as.factor(tipo_de_servicio),
        servicio = as.factor(servicio),
        especialidad = as.factor(especialidad),
        lugar = as.factor(lugar)
      )%>%
      select(-ano)
  • Filtrado de datos inválidos:
    Se eliminan todas las filas que presentan valores faltantes (NA), vacíos o negativos en las variables clave. Esto es fundamental para evitar sesgos y asegurar que los resultados sean representativos y confiables.
    datos <- datos %>%
      filter(
        !is.na(mes) & mes != "",
        !is.na(fecha_cargo),
        !is.na(cantidad) & cantidad != "" & cantidad >= 0,
        !is.na(valor_servicio) & valor_servicio != "" & valor_servicio >= 0,
        !is.na(a_o) & a_o != "",
        !is.na(sexo) & sexo != "",
        !is.na(curso_de_vida) & curso_de_vida != "",
        !is.na(tipo_de_servicio) & tipo_de_servicio != "",
        !is.na(servicio) & servicio != "",
        !is.na(especialidad) & especialidad != "",
        !is.na(lugar) & lugar != ""
      )
    cat("Filas restantes después de limpiar los datos:", nrow(datos), "\n")
## Filas restantes después de limpiar los datos: 234917

Cada uno de estos pasos es esencial para garantizar que el análisis posterior se realice sobre datos limpios, consistentes y listos para responder a las preguntas de investigación planteadas.

Vista del conjunto final:

knitr::kable(head(datos, 10))
mes fecha_cargo tipo_de_servicio servicio especialidad cantidad valor_servicio lugar curso_de_vida sexo a_o
diciembre 2017-04-12 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 29 a 59 años Femenino 2017
diciembre 2017-04-12 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 29 a 59 años Femenino 2017
julio 2017-07-20 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
julio 2017-07-20 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
agosto 2017-10-08 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
agosto 2017-10-08 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
agosto 2017-08-13 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
agosto 2017-08-13 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
septiembre 2017-01-09 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
septiembre 2017-01-09 Laboratorio 37105 MONITOREO FETAL IMAGENOLOGIA NIVEL 1 1 22100 UIMIST 18 a 28 años Femenino 2017
cat("Total de filas en el conjunto de datos limpio:", nrow(datos))
## Total de filas en el conjunto de datos limpio: 234917
# Resumen de valores únicos por variable clave
resumen_unicos <- datos %>%
  summarise(
    Meses = n_distinct(mes),
    An_os = n_distinct(a_o),
    Servicios = n_distinct(servicio),
    Especialidades = n_distinct(especialidad),
    Lugares = n_distinct(lugar),
    Cursos_de_vida = n_distinct(curso_de_vida),
    Sexos = n_distinct(sexo)
  )
knitr::kable(resumen_unicos, caption = "Cantidad de valores únicos por variable clave")
Cantidad de valores únicos por variable clave
Meses An_os Servicios Especialidades Lugares Cursos_de_vida Sexos
12 9 1268 106 28 6 2
# Tabla de frecuencias por sexo
tabla_sexo <- datos %>%
  count(sexo, name = "Frecuencia") %>%
  mutate(Porcentaje = round(100 * Frecuencia / sum(Frecuencia), 1))
knitr::kable(tabla_sexo, caption = "Distribución por sexo")
Distribución por sexo
sexo Frecuencia Porcentaje
Femenino 180990 77
Masculino 53927 23

Resumen de las variables clave del conjunto de datos limpio:

El conjunto de datos final contiene información detallada sobre las atenciones en salud a población migrante, permitiendo analizar diferencias por sexo, tipo de servicio, especialidad, lugar y valor económico de las atenciones. A continuación, se presenta una tabla resumen de las variables más relevantes para nuestro análisis:

Variable Descripción Tipo/Categorías principales Resumen estadístico o categorías
mes Mes de la atención (enero-diciembre) Factor (12 niveles) Enero-Diciembre
a_o Año de la atención Entero 2014 - 2022
sexo Sexo del paciente Femenino, Masculino Femenino, Masculino
tipo_de_servicio Tipo de servicio prestado Ej: Consulta, Vacunas, Laboratorio Laboratorio, CONSULTA, PROCEDIMIENTO, OTROS SERVICIOS, PROC QUIRURGICO, VACUNACION, Otros servicios, Consulta, Interconsulta, Vacunas, Otro procedimiento, Imagenologia, Derecho de Sala, Estancia, Honorario, Quirurgico
servicio Código y nombre del servicio >10 servicios distintos 1268 servicios
especialidad Especialidad médica Ej: Medicina General, Imagenología, Anestesiología IMAGENOLOGIA NIVEL 1, IMAGENOLOGIA NIVEL II, MEDICINA GENERAL, AUX DE ENFERMERIA, ENFERMERA PYP, LABORATORIO NIVEL I, ENFERMERA JEFE, MEDICO PYP, PEDIATRIA, TERAPIA FISICA Y REHABILITACION
cantidad Número de atenciones registradas Numérico Promedio: 1
Mín: 1
Máx: 120
valor_servicio Valor económico del servicio Numérico ($) Promedio: $3.52035^{4}
Mín: $0
Máx: $6.2505^{6}
lugar Lugar donde se prestó el servicio Ej: UIMIST, otros UIMIST, C.S ROSARIO, C.S REGADEROS, C.S GIRARDOT, C.S LA JOYA, C.S PABLO VI, C.S TOLEDO PLATA, C.S LIBERTAD, HOSPITAL LOCAL NORTE, C.S KENNEDY, C.S GAITAN, C.S CAMPO HERMOSO, C.S MUTIS, EQUIPO EXTRAMURAL, C.S IPC, C.S CAFE MADRID, C.S SAN RAFAEL, C.S COMUNEROS, C.S COLORADOS, C.S MORRORICO, C.S BUCARAMANGA, C.S SANTANDER, C.S CRISTAL, C.S CONCORDIA, C.S VILLA ROSA, SEDE UIMIST, SEDE HOSPITAL LOCAL NORTE, EXTRAMURAL
curso_de_vida Grupo etario del paciente Ej: 18 a 28 años, 29 a 59 años 29 a 59 años, 18 a 28 años, 12 a 17 años, 0 a 6 años, 7 a 11 años, >60 años

Esta tabla permite visualizar de forma condensada la estructura y diversidad de los datos, facilitando la interpretación y el análisis posterior.


3 Resultados

3.1 Análisis exploratorio, visualizaciones e interpretación

Análisis de servicios más utilizados por sexo

Primero, analicemos los 3 servicios más utilizados por cada sexo y comparemos sus costos:

# Encontrar los servicios más frecuentes por sexo y crear la tabla primero
servicios_tabla <- datos %>%
  group_by(sexo, servicio) %>%
  summarise(
    total_atenciones = sum(cantidad),
    costo_promedio = mean(valor_servicio)
  ) %>%
  arrange(sexo, desc(total_atenciones)) %>%
  group_by(sexo) %>%
  slice_head(n = 3) %>%  # Reducir a los 3 principales para mayor claridad
  ungroup() %>%
  # Crear etiquetas más cortas (asegura que no hay NA)
  mutate(servicio_corto = ifelse(is.na(servicio), "No especificado", 
                                substr(as.character(servicio), 1, 25)))

# Mostrar la tabla para verificar que los datos son correctos
knitr::kable(servicios_tabla %>% 
             mutate(costo_promedio = round(costo_promedio, 2)), 
             caption = "Comparación de los 3 servicios más utilizados por sexo y su costo promedio",
             col.names = c("Sexo", "Servicio", "Total Atenciones", "Costo Promedio ($)", "Servicio (abreviado)"))
Comparación de los 3 servicios más utilizados por sexo y su costo promedio
Sexo Servicio Total Atenciones Costo Promedio ($) Servicio (abreviado)
Femenino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 7110 21065.95 HEMOGRAMA IV [HEMOGLOBINA
Femenino UROANALISIS CON SEDIMENTO Y DENSIDAD URINARIA 4450 13300.24 UROANALISIS CON SEDIMENTO
Femenino 890701 CONSULTA DE URGENCIAS POR MEDICINA GENERAL 4076 53158.20 890701 CONSULTA DE URGENC
Masculino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 2466 52472.19 CONSULTA DE URGENCIAS POR
Masculino 939402 NEBULIZACION 2222 13599.83 939402 NEBULIZACION
Masculino CONSULTA DE PRIMERA VEZ POR MEDICINA GENERAL 1987 28898.40 CONSULTA DE PRIMERA VEZ P
# Gráfico de barras para total de atenciones (con etiquetas verificadas)
ggplot(servicios_tabla, aes(x = reorder(servicio_corto, total_atenciones), y = total_atenciones, fill = sexo)) +
  geom_col() +
  coord_flip() +
  labs(
    title = "3 Servicios de salud más utilizados por sexo",
    subtitle = "Comparación entre población migrante femenina y masculina",
    x = "Servicio",
    y = "Total de atenciones",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank(),
    axis.text.y = element_text(size = 11),
    plot.title = element_text(face = "bold")
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF"))

# Gráfico de barras para costo promedio (con etiquetas verificadas)
ggplot(servicios_tabla, aes(x = reorder(servicio_corto, costo_promedio), y = costo_promedio, fill = sexo)) +
  geom_col(position = "dodge") +
  coord_flip() +
  labs(
    title = "Costo promedio de los 3 servicios más utilizados por sexo",
    subtitle = "Comparación de costos entre población migrante femenina y masculina",
    x = "Servicio",
    y = "Costo promedio ($)",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank(),
    axis.text.y = element_text(size = 11),
    plot.title = element_text(face = "bold")
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF")) +
  scale_y_continuous(labels = scales::dollar_format())


Interpretación

De los gráficos se evidencia que:

Las mujeres migrantes utilizan significativamente más servicios de salud que los hombres, especialmente en áreas de prevención y diagnóstico, como:

  • Hemogramas (7,110 atenciones, $21,065 promedio)
  • Uroanálisis (4,450 atenciones, $13,300 promedio)
  • Urgencias generales (4,076 atenciones, $53,158 promedio)

Por el contrario, los hombres migrantes priorizan servicios más reactivos, como:

  • Urgencias generales (2,466 atenciones)
  • Nebulizaciones (2,222 atenciones)
  • Consultas de primera vez (1,987 atenciones)

A pesar de que los costos unitarios por servicio son similares entre ambos géneros, el volumen de atenciones femeninas genera un mayor gasto acumulado. Esto puede estar asociado a necesidades reproductivas, controles prenatales y una mayor adherencia al sistema de salud por parte de las mujeres.


Análisis por género y edad en servicios de urgencias

Vamos a analizar específicamente por qué las mujeres acuden más a los servicios de urgencias, enfocándonos en la distribución por edad y género:

# Filtrar datos de urgencias y crear un dataset específico
datos_urgencias <- datos %>%
  filter(str_detect(servicio, "URGENCIAS") | 
         str_detect(tipo_de_servicio, "CONSULTA") & 
         str_detect(servicio, "39145")) %>%
  mutate(
    # Corregir formato de grupos etarios
    curso_de_vida = str_replace_all(curso_de_vida, "años", "años")
  )

# Resumen de urgencias por sexo y grupo etario
resumen_urgencias <- datos_urgencias %>%
  group_by(sexo, curso_de_vida) %>%
  summarise(
    total = sum(cantidad),
    costo_total = sum(valor_servicio * cantidad),
    costo_promedio = mean(valor_servicio),
    .groups = "drop"
  ) %>%
  mutate(curso_de_vida = factor(
    curso_de_vida,
    levels = c("0 a 6 años", "7  a 11 años", "12 a 17 años", 
               "18 a 28 años", "29 a 59 años", ">60 años")
  )) %>%
  arrange(curso_de_vida)

# Tabla comparativa con razón de urgencias mujer:hombre por grupo de edad
tabla_comparativa <- resumen_urgencias %>%
  select(sexo, curso_de_vida, total) %>%
  pivot_wider(
    names_from = sexo,
    values_from = total
  ) %>%
  mutate(
    total = Femenino + Masculino,
    proporcion_femenino = Femenino / total * 100,
    proporcion_masculino = Masculino / total * 100,
    razon_f_m = round(Femenino / Masculino, 2)
  )

knitr::kable(tabla_comparativa,
             caption = "Comparación de atenciones de urgencias por sexo y grupo etario",
             col.names = c("Grupo etario", "Mujeres", "Hombres", "Total", 
                           "% Mujeres", "% Hombres", "Razón M:H"))
Comparación de atenciones de urgencias por sexo y grupo etario
Grupo etario Mujeres Hombres Total % Mujeres % Hombres Razón M:H
0 a 6 años 1445 1746 3191 45.28361 54.71639 0.83
7 a 11 años 445 511 956 46.54812 53.45188 0.87
12 a 17 años 762 293 1055 72.22749 27.77251 2.60
18 a 28 años 6328 1381 7709 82.08587 17.91413 4.58
29 a 59 años 3036 1376 4412 68.81233 31.18767 2.21
>60 años 208 150 358 58.10056 41.89944 1.39
# Gráfico 1: Barras comparativas de atenciones de urgencias por grupo etario y sexo
ggplot(resumen_urgencias, aes(x = curso_de_vida, y = total, fill = sexo)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Distribución de atenciones de urgencias por grupo etario y sexo",
    subtitle = "Análisis comparativo entre población migrante femenina y masculina",
    x = "Grupo etario",
    y = "Total de atenciones",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "bottom",
    plot.title = element_text(face = "bold")
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF"))

# Gráfico 2: Proporción de urgencias por sexo en cada grupo etario
proporciones <- datos_urgencias %>%
  group_by(curso_de_vida) %>%
  mutate(curso_de_vida = factor(
    curso_de_vida,
    levels = c("0 a 6 años", "7  a 11 años", "12 a 17 años", 
               "18 a 28 años", "29 a 59 años", ">60 años")
  )) %>%
  count(sexo, wt = cantidad) %>%
  mutate(porcentaje = n / sum(n) * 100)

ggplot(proporciones, aes(x = curso_de_vida, y = porcentaje, fill = sexo)) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Proporción de atenciones de urgencias por sexo en cada grupo etario",
    x = "Grupo etario",
    y = "Porcentaje de atenciones (%)",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank()
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF")) +
  scale_y_continuous(labels = scales::percent_format(scale = 1))

# Gráfico 3: Razones específicas de consulta de urgencias para mujeres
razones_mujeres <- datos_urgencias %>%
  filter(sexo == "Femenino") %>%
  group_by(especialidad) %>%
  summarise(total = sum(cantidad)) %>%
  arrange(desc(total)) %>%
  slice_head(n = 8) %>%
  mutate(especialidad = reorder(especialidad, total))

ggplot(razones_mujeres, aes(x = especialidad, y = total)) +
  geom_bar(stat = "identity", fill = "#FF9AA2") +
  coord_flip() +
  labs(
    title = "Principales especialidades en atenciones de urgencias para mujeres migrantes",
    x = "Especialidad médica",
    y = "Total de atenciones"
  ) +
  theme_minimal(base_size = 12)


Interpretación

Del análisis gráfico se identifican patrones claros en el uso del servicio de urgencias según sexo y edad:

  • En los grupos etarios más jóvenes (0 a 11 años), las atenciones están ligeramente dominadas por los hombres, aunque la diferencia no es extrema. En cambio, a partir de los 12 años, el comportamiento se invierte y las mujeres dominan claramente el uso del servicio de urgencias.
  • Los grupos de mayor uso femenino son:
    • 18 a 28 años, con una proporción del 82% mujeres.
    • 29 a 59 años, con un 69% mujeres.
    • Esto sugiere una fuerte relación con la salud sexual, reproductiva y materna en edades activas.
  • La razón mujer:hombre se incrementa notablemente con la edad hasta cierto punto, alcanzando 4.58 en el grupo de 18 a 28 años, lo que indica que por cada hombre, hay más de 4 mujeres atendidas.
  • Entre las principales especialidades para mujeres migrantes en urgencias se destacan aquellas relacionadas con medicina general, ginecología y atención integral. Esto refuerza el papel del sistema de salud como soporte frente a necesidades de salud reproductiva, consultas prenatales y atención de emergencias asociadas.

Mapa de calor de atenciones por lugar y sexo

Veamos cómo se distribuyen geográficamente las atenciones:

# Agrupar por lugar y sexo, sumar la cantidad de atenciones
resumen_lugar_sexo <- datos %>%
  group_by(lugar, sexo) %>%
  summarise(Atenciones = sum(cantidad, na.rm = TRUE)) %>%
  ungroup()

# Obtener los 10 lugares con más atenciones
lugares_top <- resumen_lugar_sexo %>%
  group_by(lugar) %>%
  summarise(total = sum(Atenciones)) %>%
  arrange(desc(total)) %>%
  slice_head(n = 10) %>%
  pull(lugar)

# Filtrar para mostrar solo los lugares top
resumen_lugar_filtrado <- resumen_lugar_sexo %>%
  filter(lugar %in% lugares_top)

# Convertir a formato ancho para calcular la proporción de género
prop_lugar <- resumen_lugar_filtrado %>%
  pivot_wider(names_from = sexo, values_from = Atenciones, values_fill = 0) %>%
  mutate(
    Total = Femenino + Masculino,
    Proporcion_F = Femenino / Total,
    Proporcion_M = Masculino / Total
  ) %>%
  arrange(desc(Total))

# Tabla con proporciones
knitr::kable(prop_lugar %>% 
               select(lugar, Femenino, Masculino, Total, Proporcion_F, Proporcion_M) %>%
               mutate(
                 Proporcion_F = scales::percent(Proporcion_F, accuracy = 0.1),
                 Proporcion_M = scales::percent(Proporcion_M, accuracy = 0.1)
               ),
             caption = "Distribución de atenciones por lugar y proporción de género",
             col.names = c("Lugar", "Mujeres", "Hombres", "Total", "% Mujeres", "% Hombres"))
Distribución de atenciones por lugar y proporción de género
Lugar Mujeres Hombres Total % Mujeres % Hombres
HOSPITAL LOCAL NORTE 55324 20671 75995 72.8% 27.2%
UIMIST 39478 10997 50475 78.2% 21.8%
C.S COMUNEROS 21015 1552 22567 93.1% 6.9%
C.S TOLEDO PLATA 10980 2556 13536 81.1% 18.9%
C.S MORRORICO 5458 3591 9049 60.3% 39.7%
C.S GIRARDOT 7237 1755 8992 80.5% 19.5%
C.S ROSARIO 6021 2547 8568 70.3% 29.7%
EQUIPO EXTRAMURAL 4127 3374 7501 55.0% 45.0%
C.S CAFE MADRID 4218 1356 5574 75.7% 24.3%
C.S MUTIS 3664 1677 5341 68.6% 31.4%
# Mapa de calor
ggplot(resumen_lugar_filtrado, aes(x = sexo, y = reorder(lugar, Atenciones), fill = Atenciones)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "#E3EAF7", high = "#337AB7") +
  labs(
    title = "Mapa de calor: Atenciones por lugar y sexo",
    subtitle = "Top 10 lugares con mayor número de atenciones",
    x = "Sexo",
    y = "Lugar de atención",
    fill = "Número de\natenciones"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.y = element_text(size = 10),
    panel.grid = element_blank(),
    legend.position = "right"
  )

# Gráfico de barras de proporciones por género en cada lugar
ggplot(prop_lugar, aes(x = reorder(lugar, Total), y = Total)) +
  geom_col(aes(fill = "Total")) +
  geom_col(aes(y = Femenino, fill = "Femenino")) +
  coord_flip() +
  scale_fill_manual(values = c("Total" = "#E3EAF7", "Femenino" = "#FF9AA2")) +
  labs(
    title = "Proporción de atenciones por género en cada lugar",
    x = "Lugar de atención",
    y = "Número de atenciones",
    fill = ""
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")


Interpretación

Los datos revelan patrones interesantes de uso del sistema según la ubicación geográfica de los centros de atención:

  • El Hospital Local Norte y el UIMIST concentran el mayor volumen de atenciones (más de 50 mil cada uno), siendo las mujeres el 73% y 78% respectivamente. Esto coincide con los hallazgos anteriores sobre la mayor demanda de servicios médicos por parte de las mujeres migrantes.
  • En centros como C.S Comuneros y C.S Toledo Plata, las mujeres representan más del 80% de las atenciones, lo cual sugiere que ciertas sedes podrían estar enfocadas en servicios más requeridos por mujeres, como consultas de control, salud reproductiva, exámenes de laboratorio, etc.
  • En contraste, sedes como C.S Morro Rico y Equipo Extramural presentan una mayor proporción relativa de hombres (hasta un 45%), lo cual podría estar relacionado con estrategias móviles o zonas donde las barreras de acceso para mujeres son mayores.

Este análisis espacial complementa la dimensión demográfica y de género, ayudando a visualizar dónde se concentran las brechas de uso del sistema de salud, y reforzando la idea de que el acceso a los servicios no solo depende del sexo o la edad, sino también del lugar de atención y su oferta específica.


Análisis de tendencias temporales

Veamos cómo ha evolucionado la atención a lo largo del tiempo:

# Definir vector de nombres de meses en español
meses_espanol <- c("enero", "febrero", "marzo", "abril", "mayo", "junio",
                   "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre")

# Agregar datos por mes, año y sexo
tendencias <- datos %>%
  mutate(mes_num = match(mes, meses_espanol),   # Convertir nombre del mes a número
         fecha = ymd(paste(a_o, mes_num, 15))) %>%  # Crear fecha con el número del mes
  group_by(fecha, sexo) %>%
  summarise(
    total_atenciones = sum(cantidad),
    costo_total = sum(valor_servicio * cantidad)
  ) %>%
  ungroup()

# Gráfico de tendencia temporal
ggplot(tendencias, aes(x = fecha, y = total_atenciones, color = sexo, group = sexo)) +
  geom_line(size = 1) +
  geom_point(alpha = 0.6) +
  scale_color_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF")) +
  labs(
    title = "Evolución temporal de atenciones por sexo",
    subtitle = "Período 2014-2022",
    x = "Fecha",
    y = "Número de atenciones",
    color = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank()
  ) +
  scale_x_date(date_breaks = "6 months", date_labels = "%b %Y") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Crear una variable nueva: costo por atención
costo_por_atencion <- tendencias %>%
  mutate(costo_por_atencion = costo_total / total_atenciones)

# Gráfico de evolución del costo promedio por atención
ggplot(costo_por_atencion, aes(x = fecha, y = costo_por_atencion, color = sexo, group = sexo)) +
  geom_line(size = 1) +
  geom_point(alpha = 0.6) +
  scale_color_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF")) +
  scale_y_continuous(labels = scales::dollar_format()) +
  labs(
    title = "Evolución del costo promedio por atención y sexo",
    subtitle = "Período 2014-2022",
    x = "Fecha",
    y = "Costo promedio por atención ($)",
    color = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank()
  ) +
  scale_x_date(date_breaks = "6 months", date_labels = "%b %Y") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Crear una vista mensual más detallada con desagregación por tipo de servicio
tendencias_detalladas <- datos %>%
  mutate(mes_num = match(mes, meses_espanol),   # Convertir nombre del mes a número
         fecha = ymd(paste(a_o, mes_num, 15)),  # Crear fecha con el día 15 del mes
         año_mes = format(fecha, "%Y-%m")) %>%  # Crear variable año-mes para agrupación
  group_by(año_mes, fecha, sexo, tipo_de_servicio) %>%
  summarise(
    total_atenciones = sum(cantidad),
    costo_total = sum(valor_servicio * cantidad),
    costo_promedio = costo_total / total_atenciones
  ) %>%
  ungroup()

# 2. Análisis de picos en atenciones con separación por tipo de servicio
ggplot(tendencias_detalladas, aes(x = fecha, y = total_atenciones, fill = tipo_de_servicio)) +
  geom_area(alpha = 0.7, position = "stack") +
  facet_wrap(~ sexo, ncol = 1) +
  labs(
    title = "Evolución de atenciones por tipo de servicio y sexo",
    subtitle = "Identificación de servicios que generaron picos de atención",
    x = "Fecha",
    y = "Número de atenciones",
    fill = "Tipo de servicio"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank()
  ) +
  scale_x_date(date_breaks = "6 months", date_labels = "%b %Y") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3") +
  # Resaltar período COVID (2020-2021)
  annotate("rect", xmin = as.Date("2020-03-15"), xmax = as.Date("2021-12-15"), 
           ymin = 0, ymax = Inf, alpha = 0.1, fill = "gray", data = . %>% filter(sexo == "Femenino"))

# 3. Análisis de especialidades médicas durante períodos de pico
# Primero para el pico de Marzo 2017 (hombres)
pico_marzo_2017 <- datos %>%
  mutate(mes_num = match(mes, meses_espanol),
         fecha = ymd(paste(a_o, mes_num, 15))) %>%
  filter(a_o == 2017, mes %in% c("marzo"),
         sexo == "Masculino") %>%
  group_by(especialidad) %>%
  summarise(
    total_atenciones = sum(cantidad),
    costo_total = sum(valor_servicio * cantidad),
    costo_promedio = costo_total / total_atenciones
  ) %>%
  arrange(desc(costo_total)) %>%
  slice_head(n = 10)

# Después para el pico de mediados de 2018 (ambos sexos)
pico_2018 <- datos %>%
  mutate(mes_num = match(mes, meses_espanol),
         fecha = ymd(paste(a_o, mes_num, 15))) %>%
  filter(a_o == 2018, mes %in% c("mayo", "junio", "julio")) %>%
  group_by(sexo, especialidad) %>%
  summarise(
    total_atenciones = sum(cantidad),
    costo_total = sum(valor_servicio * cantidad),
    costo_promedio = costo_total / total_atenciones
  ) %>%
  arrange(sexo, desc(costo_total)) %>%
  group_by(sexo) %>%
  slice_head(n = 10)

# 5. Tabla resumen de posibles explicaciones para los picos identificados
explicaciones <- data.frame(
  Periodo = c("Marzo 2017 (Hombres)", 
              "Junio 2018 (Hombres)", 
              "Junio-Dic 2018 (Mujeres)",
              "2020-2021 (General)"),
  Posible_Explicacion = c(
    "Inicio de ola migratoria venezolana y primeras medidas de regularización",
    "Implementación del Permiso Especial de Permanencia (PEP) en Colombia",
    "Mayor acceso de mujeres migrantes a servicios de salud reproductiva tras regularización",
    "Pandemia COVID-19 con aumento en servicios relacionados a enfermedades respiratorias"
  ),
  Servicios_Destacados = c(
    paste(pico_marzo_2017$especialidad[1:3], collapse=", "),
    paste(pico_2018 %>% filter(sexo == "Masculino") %>% pull(especialidad) %>% head(3), collapse=", "),
    paste(pico_2018 %>% filter(sexo == "Femenino") %>% pull(especialidad) %>% head(3), collapse=", "),
    "Servicios respiratorios, urgencias, hospitalización por COVID"
  )
)

knitr::kable(explicaciones, 
             caption = "Posibles explicaciones para los picos de atenciones y costos identificados",
             col.names = c("Período", "Posible explicación", "Servicios destacados"))
Posibles explicaciones para los picos de atenciones y costos identificados
Período Posible explicación Servicios destacados
Marzo 2017 (Hombres) Inicio de ola migratoria venezolana y primeras medidas de regularización IMAGENOLOGIA NIVEL II, LABORATORIO NIVEL I, MEDICINA GENERAL
Junio 2018 (Hombres) Implementación del Permiso Especial de Permanencia (PEP) en Colombia MEDICINA GENERAL, PEDIATRIA, MEDICINA INTERNA
Junio-Dic 2018 (Mujeres) Mayor acceso de mujeres migrantes a servicios de salud reproductiva tras regularización MEDICINA GENERAL, GINECOLOGIA Y OBSTETRICIA, LABORATORIOS NIVEL II
2020-2021 (General) Pandemia COVID-19 con aumento en servicios relacionados a enfermedades respiratorias Servicios respiratorios, urgencias, hospitalización por COVID

Interpretación general

Estas gráficas, analizadas en conjunto, revelan los siguientes hallazgos clave:

Tendencias de atención

  • Desde 2017, se evidencia un crecimiento sostenido en el número de atenciones, especialmente en mujeres migrantes.
  • En diciembre de 2021 se alcanza el máximo histórico de atenciones, con una caída posterior en 2022.
  • La pandemia de COVID-19 en 2020 generó un descenso pronunciado en atenciones para ambos sexos, probablemente por restricciones sanitarias, cierre de servicios ambulatorios o temor al contagio.

Costos promedio

  • El costo promedio por atención tuvo picos altos entre 2017 y 2018, especialmente en hombres. Esto puede explicarse por:
    • Atenciones menos frecuentes pero más costosas.
    • Uso de servicios urgentes o especializados.
  • A partir de 2020, los costos promedio para ambos sexos tienden a estabilizarse.

Tipos de servicio y picos

  • Los picos de atención entre 2018 y 2021 se deben principalmente al aumento de servicios de laboratorio y consulta externa.
    • Esto es consistente con el análisis previo sobre pruebas como hemogramas, VIH, y control prenatal.
  • En el pico de 2021, se observa un repunte fuerte en servicios de laboratorio y consultas médicas, especialmente en mujeres.
    • Es posible que esto corresponda a la reactivación del sistema de salud tras la pandemia, donde se retomaron controles y tamizajes atrasados.
  • La caída en 2020 no solo fue cuantitativa: ciertos tipos de servicios casi desaparecen (por ejemplo, vacunas o procedimientos quirúrgicos), confirmando el impacto estructural de la emergencia sanitaria.

Análisis de servicios específicos por grupo etario

Analicemos servicios específicos según grupos de edad:

# Reordenar los niveles del curso de vida
datos$curso_de_vida <- factor(
  datos$curso_de_vida,
  levels = c("0 a 6 años", "7  a 11 años", "12 a 17 años", 
             "18 a 28 años", "29 a 59 años", ">60 años")
)

# Limpiar formato de años en curso de vida
datos <- datos %>%
  mutate(curso_de_vida_clean = str_replace_all(curso_de_vida, "años", "años"))

# Encontrar servicios principales por grupo etario y sexo
servicios_edad <- datos %>%
  group_by(curso_de_vida_clean, sexo, servicio) %>%
  summarise(total = sum(cantidad)) %>%
  arrange(desc(total)) %>%
  group_by(curso_de_vida_clean, sexo) %>%
  slice_head(n = 3) %>%
  ungroup() %>%
  arrange(curso_de_vida_clean, sexo, desc(total))

# Crear tabla primero para verificar los datos
knitr::kable(servicios_edad %>% 
               select(curso_de_vida_clean, sexo, servicio, total),
             caption = "Top 3 servicios más utilizados por grupo etario y sexo",
             col.names = c("Grupo etario", "Sexo", "Servicio", "Total atenciones"))
Top 3 servicios más utilizados por grupo etario y sexo
Grupo etario Sexo Servicio Total atenciones
0 a 6 años Femenino 939402 NEBULIZACION 1033
0 a 6 años Femenino VACUNACION COMBINADA CONTRA DIFTERIATETANOS Y TOS FERINA (DPT) 776
0 a 6 años Femenino VACUNACION CONTRA VARICELA 742
0 a 6 años Masculino 939402 NEBULIZACION 1522
0 a 6 años Masculino VACUNACION COMBINADA CONTRA DIFTERIATETANOS Y TOS FERINA (DPT) 884
0 a 6 años Masculino VACUNACION CONTRA VARICELA 817
12 a 17 años Femenino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 464
12 a 17 años Femenino UROANALISIS CON SEDIMENTO Y DENSIDAD URINARIA 295
12 a 17 años Femenino 890701 CONSULTA DE URGENCIAS POR MEDICINA GENERAL 271
12 a 17 años Masculino CONSULTA DE PRIMERA VEZ POR MEDICINA GENERAL 175
12 a 17 años Masculino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 162
12 a 17 años Masculino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 118
18 a 28 años Femenino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 3947
18 a 28 años Femenino UROANALISIS CON SEDIMENTO Y DENSIDAD URINARIA 2546
18 a 28 años Femenino VIH 1 Y 2 ANTICUERPOS 2461
18 a 28 años Masculino CONSULTA DE PRIMERA VEZ POR MEDICINA GENERAL 765
18 a 28 años Masculino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 669
18 a 28 años Masculino 890701 CONSULTA DE URGENCIAS POR MEDICINA GENERAL 399
29 a 59 años Femenino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 1951
29 a 59 años Femenino UROANALISIS CON SEDIMENTO Y DENSIDAD URINARIA 1196
29 a 59 años Femenino CONSULTA DE CONTROL O DE SEGUIMIENTO POR MEDICINA GENERAL 1118
29 a 59 años Masculino CONSULTA DE PRIMERA VEZ POR MEDICINA GENERAL 757
29 a 59 años Masculino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 744
29 a 59 años Masculino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 499
7 a 11 años Femenino VACUNACION COMBINADA CONTRA SARAMPION Y RUBEOLA [SR] (DOBLE VIRAL) 343
7 a 11 años Femenino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 182
7 a 11 años Femenino VACUNACION CONTRA VIRUS PAPILOMA HUMANO [VPH] 171
7 a 11 años Masculino VACUNACION COMBINADA CONTRA SARAMPION Y RUBEOLA [SR] (DOBLE VIRAL) 304
7 a 11 años Masculino 939402 NEBULIZACION 296
7 a 11 años Masculino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 225
>60 años Femenino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 159
>60 años Femenino CONSULTA DE CONTROL O DE SEGUIMIENTO POR MEDICINA GENERAL 115
>60 años Femenino CUIDADO (MANEJ O) INTRAHOSPITALARIO POR MEDICINA ESPECIALIZADA 109
>60 años Masculino HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 124
>60 años Masculino CONSULTA DE CONTROL O DE SEGUIMIENTO POR MEDICINA GENERAL 113
>60 años Masculino CONSULTA DE URGENCIAS POR MEDICINA GENERAL 77
# Crear etiquetas más cortas para los servicios (asegurando que no haya NA)
servicios_edad <- servicios_edad %>%
  mutate(servicio_corto = ifelse(is.na(servicio), 
                               "No especificado", 
                               substr(as.character(servicio), 1, 25)))

# Visualizar los 3 servicios principales por grupo etario y sexo
ggplot(servicios_edad, aes(x = reorder(servicio_corto, total), y = total, fill = sexo)) +
  geom_col() +
  facet_grid(curso_de_vida_clean ~ sexo, scales = "free_y") +
  coord_flip() +
  labs(
    title = "Top 3 servicios más utilizados por grupo etario y sexo",
    x = "Servicio",
    y = "Total de atenciones",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 10) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank(),
    strip.background = element_rect(fill = "#e3eaf7"),
    strip.text = element_text(face = "bold", size = 9),
    axis.text.y = element_text(size = 8)  # Texto más pequeño para que quepa mejor
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF"))


library(moments)

# 1. Limpiar y agregar datos por grupo etario y sexo
distribucion_edad_sexo <- datos %>%
  # Corregir el problema de codificación de "años"
  mutate(grupo_edad = str_replace_all(curso_de_vida, "años", "años")) %>%
  # Asegurar orden correcto de grupos etarios
  mutate(grupo_edad = factor(grupo_edad, 
                          levels = c("0 a 6 años", "7  a 11 años", "12 a 17 años", 
                                    "18 a 28 años", "29 a 59 años", ">60 años"),
                          ordered = TRUE)) %>%
  # Contar atenciones por grupo de edad y sexo
  group_by(sexo, grupo_edad) %>%
  summarise(total_atenciones = sum(cantidad, na.rm = TRUE)) %>%
  arrange(sexo, grupo_edad)

# 2. Mostrar la tabla de distribución por edad y sexo
knitr::kable(distribucion_edad_sexo,
            caption = "Distribución de atenciones por grupo etario y sexo",
            col.names = c("Sexo", "Grupo de edad", "Total de atenciones"))
Distribución de atenciones por grupo etario y sexo
Sexo Grupo de edad Total de atenciones
Femenino 0 a 6 años 21187
Femenino 7 a 11 años 4424
Femenino 12 a 17 años 11178
Femenino 18 a 28 años 97448
Femenino 29 a 59 años 48543
Femenino >60 años 3623
Masculino 0 a 6 años 23183
Masculino 7 a 11 años 4279
Masculino 12 a 17 años 2630
Masculino 18 a 28 años 10397
Masculino 29 a 59 años 14901
Masculino >60 años 2979
# 3. Asignar valores numéricos representativos para cálculos estadísticos
datos_estadisticos_sexo <- distribucion_edad_sexo %>%
  mutate(edad_representativa = case_when(
    grupo_edad == "0 a 6 años" ~ 3,
    grupo_edad == "7  a 11 años" ~ 9,
    grupo_edad == "12 a 17 años" ~ 14.5,
    grupo_edad == "18 a 28 años" ~ 23,
    grupo_edad == "29 a 59 años" ~ 44,
    grupo_edad == ">60 años" ~ 70,
    TRUE ~ NA_real_
  ))

# 4. Calcular estadísticas por sexo
stats_por_sexo <- datos_estadisticos_sexo %>%
  group_by(sexo) %>%
  summarize(
    # Media ponderada
    media_ponderada = sum(edad_representativa * total_atenciones) / sum(total_atenciones),
    
    # Momento 2 (varianza)
    m2 = sum(total_atenciones * (edad_representativa - media_ponderada)^2) / 
         sum(total_atenciones),
    
    # Momento 3 (para sesgo)
    m3 = sum(total_atenciones * (edad_representativa - media_ponderada)^3) / 
         sum(total_atenciones),
    
    # Momento 4 (para curtosis)
    m4 = sum(total_atenciones * (edad_representativa - media_ponderada)^4) / 
         sum(total_atenciones),
    
    # Calcular sesgo y curtosis
    desv_est = sqrt(m2),
    sesgo = m3 / (m2^(3/2)),
    curtosis_exceso = m4 / (m2^2) - 3
  )

# 5. Visualizar la distribución por sexo
p1 <- ggplot(distribucion_edad_sexo, aes(x = grupo_edad, y = total_atenciones, fill = sexo)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = total_atenciones), 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, size = 3) +
  labs(
    title = "Distribución de atenciones por grupo etario y sexo",
    subtitle = paste("Sesgo - Femenino:", round(stats_por_sexo$sesgo[1], 2), 
                   "| Masculino:", round(stats_por_sexo$sesgo[2], 2)),
    x = "Grupo de edad",
    y = "Total de atenciones",
    fill = "Sexo"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF"))

# 6. Crear datos para histograma y densidad - VERSIÓN CORREGIDA
datos_densidad <- bind_rows(
  # Datos para mujeres
  datos_estadisticos_sexo %>%
    filter(sexo == "Femenino") %>%
    rowwise() %>%
    do(data.frame(
      sexo = "Femenino",
      edad = rep(.$edad_representativa, times = ceiling(.$total_atenciones/100))
    )),
  
  # Datos para hombres
  datos_estadisticos_sexo %>%
    filter(sexo == "Masculino") %>%
    rowwise() %>%
    do(data.frame(
      sexo = "Masculino", 
      edad = rep(.$edad_representativa, times = ceiling(.$total_atenciones/100))
    ))
)

# 7. Visualizar la distribución aproximada por sexo
p2 <- ggplot(datos_densidad, aes(x = edad, fill = sexo, color = sexo)) +
  geom_histogram(binwidth = 5, alpha = 0.6, position = "identity") +
  geom_density(aes(y = ..count.. * 5), alpha = 0.3, size = 1) +
  labs(
    title = "Distribución aproximada de la edad en atenciones por sexo",
    subtitle = paste("Media - Femenino:", round(stats_por_sexo$media_ponderada[1], 1), 
                   "| Masculino:", round(stats_por_sexo$media_ponderada[2], 1)),
    x = "Edad representativa",
    y = "Frecuencia",
    fill = "Sexo",
    color = "Sexo"
  ) +
  theme_minimal() +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF")) +
  scale_color_manual(values = c("Femenino" = "#FF7A82", "Masculino" = "#4692DF"))

# 8. Tabla con estadísticas descriptivas comparativas por sexo
estadisticas_tabla <- data.frame(
  Estadistica = c("Media (años)", "Desviación estándar (años)", "Sesgo", "Curtosis (exceso)"),
  Femenino = c(round(stats_por_sexo$media_ponderada[1], 2), 
               round(stats_por_sexo$desv_est[1], 2),
               round(stats_por_sexo$sesgo[1], 2), 
               round(stats_por_sexo$curtosis_exceso[1], 2)),
  Masculino = c(round(stats_por_sexo$media_ponderada[2], 2), 
                round(stats_por_sexo$desv_est[2], 2),
                round(stats_por_sexo$sesgo[2], 2), 
                round(stats_por_sexo$curtosis_exceso[2], 2)),
  Interpretacion = c(
    paste("Las mujeres tienen una edad promedio de atención de", 
          round(stats_por_sexo$media_ponderada[1], 1), 
          "años frente a", round(stats_por_sexo$media_ponderada[2], 1), 
          "años para los hombres."),
    paste("La distribución de edades en mujeres es", 
          ifelse(stats_por_sexo$desv_est[1] > stats_por_sexo$desv_est[2], "más dispersa", "menos dispersa"), 
          "que en hombres."),
    paste("Para mujeres:", 
          ifelse(stats_por_sexo$sesgo[1] < 0, 
                 "Distribución sesgada a la izquierda (mayor concentración en edades mayores)",
                 "Distribución sesgada a la derecha (mayor concentración en edades menores)"), 
          "| Para hombres:", 
          ifelse(stats_por_sexo$sesgo[2] < 0, 
                 "Distribución sesgada a la izquierda (mayor concentración en edades mayores)",
                 "Distribución sesgada a la derecha (mayor concentración en edades menores)")),
    paste("Para mujeres:", 
          ifelse(stats_por_sexo$curtosis_exceso[1] > 0, 
                 "Distribución leptocúrtica (más puntiaguda)",
                 "Distribución platicúrtica (más plana)"), 
          "| Para hombres:", 
          ifelse(stats_por_sexo$curtosis_exceso[2] > 0, 
                 "Distribución leptocúrtica (más puntiaguda)",
                 "Distribución platicúrtica (más plana)"))
  )
)

# 9. Mostrar resultados
p1

p2

knitr::kable(estadisticas_tabla, caption = "Comparación de estadísticas de distribución por sexo")
Comparación de estadísticas de distribución por sexo
Estadistica Femenino Masculino Interpretacion
Media (años) 26.27 21.41 Las mujeres tienen una edad promedio de atención de 26.3 años frente a 21.4 años para los hombres.
Desviación estándar (años) 14.20 19.98 La distribución de edades en mujeres es menos dispersa que en hombres.
Sesgo 0.49 0.77 Para mujeres: Distribución sesgada a la derecha (mayor concentración en edades menores) | Para hombres: Distribución sesgada a la derecha (mayor concentración en edades menores)
Curtosis (exceso) 0.29 -0.50 Para mujeres: Distribución leptocúrtica (más puntiaguda) | Para hombres: Distribución platicúrtica (más plana)
# 10. Crear gráfico de proporciones para mejor visualización
# Calcular proporciones por grupo etario y sexo
proporciones_sexo <- distribucion_edad_sexo %>%
  group_by(grupo_edad) %>%
  mutate(proporcion = total_atenciones / sum(total_atenciones) * 100) %>%
  ungroup()

# Gráfico de proporciones
p3 <- ggplot(proporciones_sexo, aes(x = grupo_edad, y = proporcion, fill = sexo)) +
  geom_bar(stat = "identity", position = "fill") +
  geom_text(aes(label = paste0(round(proporcion), "%")), 
            position = position_fill(vjust = 0.5), 
            color = "white", size = 3) +
  labs(
    title = "Proporción de atenciones por grupo etario y sexo",
    x = "Grupo de edad",
    y = "Proporción",
    fill = "Sexo"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF")) +
  scale_y_continuous(labels = scales::percent_format(scale = 1))

p3


Interpretación

El gráfico revela diferencias notables en la forma en que hombres y mujeres migrantes acceden a los servicios de salud a lo largo del ciclo de vida:

0 a 11 años:

  • En ambos sexos predominan vacunas y nebulizaciones, lo cual es esperable en edades pediátricas por cuadros respiratorios comunes y cumplimiento del esquema de vacunación.
  • No se observan diferencias marcadas entre niños y niñas.

12 a 28 años:

  • Las mujeres acceden masivamente a servicios diagnósticos como hemogramas y uroanálisis, junto con urgencias.
  • Aparece un dato especialmente relevante: la prueba de VIH 1 y 2 anticuerpos es el tercer servicio más solicitado por mujeres de 18 a 28 años (2,461 atenciones), mientras que no aparece entre los principales para los hombres.
  • Este hallazgo sugiere una mayor conciencia, recomendación médica o necesidad de tamizaje en mujeres en edad reproductiva. También puede estar relacionado con controles prenatales, mayor cobertura de programas de salud sexual y reproductiva, o detección temprana de infecciones.

12 a 28 años (hombres):

  • Los hombres acceden a urgencias y consultas generales, pero casi no figuran en servicios de diagnóstico o prevención, como VIH, uroanálisis o hemogramas.
  • Este patrón refuerza la hipótesis de un acceso más tardío y menos preventivo al sistema de salud por parte de la población masculina.

29 a 59 años:

  • Continúa la tendencia: las mujeres utilizan principalmente servicios diagnósticos y de seguimiento.
  • En los hombres aparecen nuevamente consultas de primera vez y urgencias, manteniendo su perfil reactivo.

Mayores de 60 años:

  • Ambos sexos utilizan control de seguimiento y hemogramas, aunque las mujeres también registran cuidados intrahospitalarios, lo que puede reflejar enfermedades crónicas avanzadas o necesidades complejas en salud.

Además, si observamos la distribución total de atenciones por grupo etario, se confirma que el rango de 18 a 28 años en mujeres concentra el mayor volumen absoluto, seguido por el grupo de 29 a 59 años.

  • La gráfica de densidad por edad también muestra picos definidos para las mujeres entre los 20 y 30 años, mientras que los hombres tienen una distribución más dispersa y sin concentración clara.
  • Por último, el gráfico de proporción por grupo etario refuerza estas diferencias: más del 80% de las atenciones en edades reproductivas son para mujeres, mientras que la relación es más equilibrada en menores de 11 años y adultos mayores.

Esto justifica enfocar el siguiente análisis en el grupo de mujeres entre 18 y 28 años, por ser el segmento más representativo, con mayor carga diagnóstica, gasto acumulado y necesidades específicas en salud reproductiva, sexual y preventiva.


Análisis específico para mujeres de 18-28 años

# Filtrar datos para mujeres de 18-28 años
# (Corrigiendo el formato de "años" que tiene problemas en los datos)
mujeres_jovenes <- datos %>%
  filter(sexo == "Femenino") %>%
  mutate(curso_de_vida_clean = str_replace_all(curso_de_vida, "años", "años")) %>%
  filter(curso_de_vida_clean == "18 a 28 años")

# Tabla: Top 15 servicios más utilizados por mujeres jóvenes
servicios_top <- mujeres_jovenes %>%
  group_by(servicio) %>%
  summarise(
    total_atenciones = sum(cantidad),
    costo_promedio = mean(valor_servicio),
    costo_total = sum(cantidad * valor_servicio)
  ) %>%
  arrange(desc(total_atenciones)) %>%
  slice_head(n = 15)

# Mostrar tabla de servicios top

knitr::kable(servicios_top %>% 
               mutate(
                 costo_promedio = round(costo_promedio, 2),
                 costo_total = round(costo_total, 2)
               ),
             caption = "Top 15 servicios más utilizados por mujeres migrantes de 18-28 años",
             col.names = c("Servicio", "Total Atenciones", "Costo Promedio ($)", "Costo Total ($)"))
Top 15 servicios más utilizados por mujeres migrantes de 18-28 años
Servicio Total Atenciones Costo Promedio (\()| Costo Total (\))
HEMOGRAMA IV [HEMOGLOBINA HEMATOCRITO RECUENTO ETC 3947 21041.69 83361417
UROANALISIS CON SEDIMENTO Y DENSIDAD URINARIA 2546 13235.19 33707915
VIH 1 Y 2 ANTICUERPOS 2461 70840.05 174344756
TREPONEMA PALLIDUM ANTICUERPOS (PRUEBA TREPONEMICA) MANUAL O SEMIAUTOMATIZADA O AUTOMATIZADA 2299 13558.09 31170928
890701 CONSULTA DE URGENCIAS POR MEDICINA GENERAL 2137 53285.06 113870180
EXAMEN DIRECTO FRESCO DE CUALQUIER MUESTRA 2086 43990.62 91764443
902208 HEMOGRAMA II ( HEMOGLOBINA HEMATOCRITO RECUENTO DE ERITROCITOS 1898 22032.09 41816900
890301 CONSULTA DE CONTROL O DE SEGUIMIE MEDIC GRAL 1845 26098.16 48151100
GONADOTROPINA CORIONICA SUBUNIDAD BETA CUALITATIVA [BHCG] PRUEBA DE EMBARAZO EN ORINA O SUERO 1812 12191.46 22096719
CONSULTA DE URGENCIAS POR MEDICINA GENERAL - PARTOS 1733 52797.74 91498482
CONSULTA MEDICA DE CONTROL EN PRENATAL 1644 28404.63 46697213
907106 UROANÁLISIS CON SEDIMENTO Y DENSIDAD URINARIA 1510 13152.52 19860300
HEMOCLASIFICACION GRUPO ABO Y FACTOR RH 1422 25830.91 36733640
ECOGRAFÍA PÉLVICA GINECOLÓGICA TRANSABDOMINAL POR MEDICINA GENERAL 1363 76432.27 104177190
906249 VIH 1 Y 2 ANTICUERPOS & 1358 68347.18 92815464
# Gráfico de barras para los servicios principales
ggplot(servicios_top %>% slice_head(n = 10), 
       aes(x = reorder(servicio, total_atenciones), y = total_atenciones)) +
  geom_bar(stat = "identity", fill = "#FF9AA2") +
  coord_flip() +
  labs(
    title = "Top 10 servicios más utilizados por mujeres migrantes de 18-28 años",
    x = "Servicio",
    y = "Total de atenciones"
  ) +
  theme_minimal(base_size = 12) +
  theme(axis.text.y = element_text(size = 9))


Interpretación

Las mujeres entre 18 y 28 años destacan como el grupo etario con mayor número de atenciones en todo el sistema de salud. Dentro de este grupo, los servicios más utilizados incluyen pruebas de laboratorio, consultas médicas generales, y atención de urgencias. Sin embargo, un hallazgo particularmente relevante es el rol central de los servicios relacionados con detección y control de enfermedades de transmisión sexual (ETS), especialmente VIH.

Servicios destacados:

VIH 1 y 2 anticuerpos:

  • 2,461 atenciones
  • Costo promedio: $70,840
  • Costo total: más de 174 millones de pesos

Representa el servicio más costoso en total en este grupo, lo que refleja una inversión importante en tamizaje y prevención.

Prueba treponémica (sífilis):

  • 2,299 atenciones
  • Costo total: $31,170,928

Consulta de urgencias por parto y control prenatal:

  • Más de 1,600 atenciones en cada caso

Reflejan un fuerte componente reproductivo y perinatal en las atenciones

Prueba de embarazo (HCG) y uroanálisis:

  • Refuerzan el enfoque en diagnóstico temprano y seguimiento en salud sexual y reproductiva

Análisis específico de servicios relacionados con VIH por sexo

# Filtrar servicios relacionados con VIH
datos_vih <- datos %>%
  filter(str_detect(toupper(servicio), "VIH")) %>%
  group_by(sexo) %>%
  summarise(total_atenciones = sum(cantidad)) %>%
  mutate(porcentaje = total_atenciones / sum(total_atenciones) * 100)

# Ver la tabla de resultados
knitr::kable(datos_vih, 
             caption = "Distribución de atenciones relacionadas con VIH por sexo",
             col.names = c("Sexo", "Total Atenciones", "Porcentaje (%)"))
Distribución de atenciones relacionadas con VIH por sexo
Sexo Total Atenciones Porcentaje (%)
Femenino 6879 94.765119
Masculino 380 5.234881
# Crear diagrama de sectores
ggplot(datos_vih, aes(x = "", y = porcentaje, fill = sexo)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  labs(
    title = "Proporción de atenciones relacionadas con VIH por sexo",
    subtitle = "Población migrante 2014-2022",
    fill = "Sexo"
  ) +
  geom_text(aes(label = paste0(round(porcentaje, 1), "%")), 
            position = position_stack(vjust = 0.5)) +
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank()
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF"))

# Análisis adicional: top servicios específicos relacionados con VIH
servicios_vih_especificos <- datos %>%
  filter(str_detect(toupper(servicio), "VIH")) %>%
  count(servicio, sexo, wt = cantidad) %>%
  arrange(desc(n)) %>%
  group_by(servicio) %>%
  mutate(total_servicio = sum(n)) %>%
  ungroup() %>%
  arrange(desc(total_servicio))

# Tabla de servicios específicos de VIH por sexo
knitr::kable(servicios_vih_especificos, 
             caption = "Distribución de atenciones por tipo específico de servicio de VIH",
             col.names = c("Servicio específico", "Sexo", "Total Atenciones", "Total por servicio"))
Distribución de atenciones por tipo específico de servicio de VIH
Servicio específico Sexo Total Atenciones Total por servicio
VIH 1 Y 2 ANTICUERPOS Femenino 3501 3644
VIH 1 Y 2 ANTICUERPOS Masculino 143 3644
906249 VIH 1 Y 2 ANTICUERPOS & Femenino 1861 2021
906249 VIH 1 Y 2 ANTICUERPOS & Masculino 160 2021
906249MAT VIH 1 Y 2 ANTICUERPOS Femenino 761 776
906249MAT VIH 1 Y 2 ANTICUERPOS Masculino 15 776
19878 VIH 1 Y 2 ANTICUERPOS Femenino 380 421
19878 VIH 1 Y 2 ANTICUERPOS Masculino 41 421
ASESORIA PRE Y POS TEST VIH Femenino 182 200
ASESORIA PRE Y POS TEST VIH Masculino 18 200
PERINATAL - VIH (PRUEBA RAPIDA) Femenino 187 187
VIRUS DE INMUNODEFICIENCIA HUMANA PRUEBA CONFIRMATORIA (VIH) Masculino 3 5
VIRUS DE INMUNODEFICIENCIA HUMANA PRUEBA CONFIRMATORIA (VIH) Femenino 2 5
906249CP VIH 1 Y 2 ANTICUERPOS Femenino 4 4
19878-1 VIH CARGA VIRAL CUALQUIER TECNICA Femenino 1 1
# Análisis por grupo etario y sexo para servicios relacionados con VIH
datos_vih_edad <- datos %>%
  filter(str_detect(toupper(servicio), "VIH")) %>%
  mutate(curso_de_vida_clean = str_replace_all(curso_de_vida, "años", "años")) %>%
  group_by(curso_de_vida_clean, sexo) %>%
  summarise(total_atenciones = sum(cantidad)) %>%
  ungroup()

# Visualización por grupo etario para servicios de VIH
ggplot(datos_vih_edad, aes(x = curso_de_vida_clean, y = total_atenciones, fill = sexo)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Atenciones relacionadas con VIH por grupo etario y sexo",
    x = "Grupo etario",
    y = "Total de atenciones",
    fill = "Sexo"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "bottom"
  ) +
  scale_fill_manual(values = c("Femenino" = "#FF9AA2", "Masculino" = "#66B2FF"))


Interpretación

La figura del diagrama de sectores muestra que el 94.8% de las atenciones relacionadas con VIH fueron para mujeres, frente a apenas un 5.2% en hombres migrantes. Esta disparidad extrema podría tener múltiples explicaciones:

  • Las mujeres migrantes tienen mayor acceso o cobertura en programas de salud sexual y reproductiva, donde las pruebas de VIH están incluidas por defecto (especialmente en controles prenatales).
  • Puede existir menor percepción de riesgo o menor oferta de pruebas dirigidas a hombres migrantes.
  • También puede reflejar sesgos institucionales o falta de programas con enfoque de género masculino.

La siguiente figura detalla los diferentes tipos de servicios relacionados con VIH:

  • El servicio más frecuente fue “VIH 1 Y 2 ANTICUERPOS”, con más de 3.500 atenciones en mujeres y solo 143 en hombres.
  • Otros códigos de servicio como 906249, 19878 y ASESORÍA PRE Y POS TEST - VIH también presentan una concentración abrumadora en mujeres.
  • Algunos servicios especializados como “PERINATAL - VIH (prueba rápida)” o “Carga viral” son prácticamente exclusivos de mujeres, reflejando el enfoque perinatal del sistema de salud.

Este patrón refuerza la idea de que los hombres migrantes tienen una menor presencia en esquemas de tamizaje, diagnóstico o control para VIH, a pesar de ser también población de riesgo.


4 Discusión

¿Los resultados responden a las preguntas de investigación?

  • Sí. El análisis responde de forma clara y fundamentada a las preguntas formuladas.

¿Cuáles son los 3 servicios de salud más utilizados por mujeres migrantes vs. hombres migrantes, y cómo se compara su costo promedio?

  • Las mujeres migrantes utilizan con mayor frecuencia servicios como hemogramas, uroanálisis y consultas de urgencias. En contraste, los hombres priorizan servicios como nebulizaciones, urgencias y consultas de primera vez.
  • Si bien el costo promedio por atención es similar entre sexos, el gasto total acumulado en mujeres es superior debido a la mayor frecuencia de uso del sistema.

¿Existen diferencias significativas en el tipo de especialidad médica demandada según el sexo?

  • Sí. Las mujeres acceden a especialidades relacionadas con salud sexual y reproductiva, control prenatal, partos y tamizaje de ETS. Estas atenciones comienzan desde edades tempranas (12–17 años) y se intensifican en la etapa reproductiva.
  • Los hombres, en cambio, acuden principalmente por urgencias y muestran muy baja participación en servicios preventivos o de control. Esto sugiere un patrón conductual de atención tardía y posiblemente, una percepción de invulnerabilidad que reduce la probabilidad de acudir a servicios antes de una crisis.

¿Cómo varía la distribución del costo?

  • El análisis temporal muestra que los costos promedio masculinos presentan picos intermitentes, posiblemente relacionados con urgencias de alto costo y bajo volumen de atención. Por su parte, las mujeres mantienen un uso sostenido y más equilibrado del sistema, lo que genera una curva más estable, pero con un gasto acumulado mayor.

¿Hay hallazgos inesperados?

  • Sí, el estudio reveló fenómenos no anticipados inicialmente:

    • Alta concentración de pruebas de VIH y sífilis en mujeres jóvenes (18–28 años), superando con creces las cifras de los hombres.
      Esto podría indicar no solo una cobertura efectiva en programas prenatales, sino también la presencia de contextos de riesgo como el trabajo sexual no documentado o relaciones no protegidas.
    • Baja presencia masculina en servicios de salud preventiva, con una proporción inferior al 25% en servicios diagnósticos clave.
      Esta subutilización, sumada al patrón reactivo observado, aumenta la probabilidad de diagnósticos tardíos, complicaciones médicas y mayores costos a largo plazo.
    • El impacto directo de la pandemia también fue notable: durante 2020, se redujo drásticamente la atención, especialmente en mujeres. En 2021, se produce una recuperación intensa, asociada al restablecimiento de servicios ambulatorios, laboratorios y vacunación.

¿Qué valor aporta este análisis?

  • Más allá de responder las preguntas de investigación, este estudio demuestra que la utilización del sistema de salud no es uniforme, sino que depende de factores como sexo, edad, tipo de servicio y contexto social.
  • Además, introduce la posibilidad de predecir comportamientos futuros en función de los patrones observados. Por ejemplo:
    • Si continúan las barreras sociales y culturales, es altamente probable que los hombres sigan accediendo tarde al sistema.
    • Si no se fortalecen las campañas de prevención, se puede prever un aumento en la carga económica del sistema, especialmente por diagnósticos tardíos o eventos evitables.

5 Conclusiones

Resumen del problema

El presente estudio se enfocó en analizar cómo la población migrante accede a los servicios de salud en el municipio, diferenciando según sexo, edad, tipo de servicio, sede de atención y periodo temporal. El objetivo fue identificar patrones de uso, diferencias en especialidades demandadas y distribución del gasto en salud.


Resumen del enfoque y metodología

Se trabajó con un conjunto de datos del Ministerio de Salud, que contiene más de 230.000 registros de atenciones a población migrante entre octubre de 2014 y diciembre de 2022.

Se aplicó una metodología de análisis exploratorio de datos en RMarkdown, que incluyó:

  • Limpieza y normalización de datos categóricos
  • Transformación de fechas, costos y factores
  • Análisis descriptivo y visual con gráficos temporales, espaciales y comparativos
  • Interpretación cruzada de variables como sexo, edad y tipo de servicio

Ideas interesantes encontradas

  • Las mujeres migrantes acceden con más frecuencia, y desde edades más tempranas, al sistema de salud, sobre todo en áreas preventivas y reproductivas.
  • Los hombres acceden menos y más tarde, especialmente por causas urgentes. Esto puede aumentar su vulnerabilidad médica y generar picos de gasto.
  • Las pruebas de VIH, sífilis y embarazo están altamente concentradas en mujeres jóvenes, lo que evidencia la presencia de programas activos, pero también áreas de riesgo no exploradas en hombres.
  • La distribución de atenciones por sede muestra inequidades geográficas que pueden guiar futuras decisiones administrativas.
  • La pandemia de COVID-19 afectó directamente la atención, reduciendo el volumen de servicios en 2020 y generando una “ola de compensación” en 2021.

Implicaciones para el consumidor

Los hallazgos tienen valor práctico para múltiples actores del sistema de salud:

  • Entidades gubernamentales y secretarías de salud pueden rediseñar la asignación de recursos y estrategias con base en evidencia real y actualizada.
  • Hospitales y centros médicos pueden ajustar su capacidad instalada según las cargas observadas.
  • Organismos internacionales y ONGs pueden enfocar campañas y financiamiento hacia grupos con menor acceso o mayor riesgo, como hombres migrantes adultos.

Además, se abre la puerta a estudios predictivos que ayuden a anticipar sobrecargas, identificar grupos invisibilizados y diseñar soluciones específicas.


Limitaciones

  • La base de datos no incluye información clínica ni sociodemográfica detallada.
  • No es posible identificar repeticiones de pacientes, ni hacer trazabilidad longitudinal.
  • Algunas variables (especialidad, tipo de servicio) tienen inconsistencias o duplicaciones.
  • No se dispone de datos comparativos con población no migrante.

Posibles mejoras

  • Integrar datos complementarios (diagnósticos, ocupación, nacionalidad, antecedentes médicos).
  • Aplicar modelos estadísticos para identificar correlaciones o segmentar poblaciones.
  • Implementar visualizaciones interactivas que permitan exploración dinámica.
  • Analizar políticas públicas (ej. permisos de permanencia, campañas de salud) como variables explicativas.