Análisis de Consumo de Antibióticos Hospitalarios

Descripción del Dataset

El dataset consumoantibioticos.csv contiene información detallada sobre el consumo de antibióticos en un centro hospitalario durante los primeros días de enero de 2025. Incluye variables como fecha de prescripción, servicio médico, médico prescriptor, paciente, medicamento, dosis, y cantidades dispensadas.

# Instalar paquetes necesarios (si no están instalados)
if (!require("tidyverse")) install.packages("tidyverse")
if (!require("lubridate")) install.packages("lubridate")
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("ggthemes")) install.packages("ggthemes")
if (!require("scales")) install.packages("scales")
if (!require("knitr")) install.packages("knitr")
if (!require("kableExtra")) install.packages("kableExtra")
if (!require("plotly")) install.packages("plotly")
if (!require("DT")) install.packages("DT")

# Cargar librerías
library(tidyverse)
library(lubridate)
library(ggplot2)
library(ggthemes)
library(scales)
library(knitr)
library(kableExtra)
library(plotly)
library(DT)
# Cargar datos
df <- read.csv("D:/IPS_APOYO_MEDICO/estudioantibioticos/consumoantibioticos.csv", sep = ";", fileEncoding = "UTF-8")

# Limpieza inicial de datos
df_clean <- df %>%
  mutate(
    Fecha = dmy(Fecha.Necesidad),
    Hora = hm(Hora.Solicitud),
    Cantidad.Recetada = as.numeric(Cantidad.Recetada),
    Dia = day(Fecha),
    Hora_num = hour(Hora) + minute(Hora)/60
  ) %>%
  filter(!is.na(Fecha)) %>%
  distinct()

Resumen General

# Análisis descriptivo básico
resumen_general <- df_clean %>%
  summarise(
    Total_Registros = n(),
    Periodo = paste(min(Fecha), "a", max(Fecha)),
    Antibioticos_Unicos = n_distinct(Medicamento.SIH),
    Servicios_Unicos = n_distinct(Denom..Almacén.Requisitante),
    Medicos_Unicos = n_distinct(Nombre.del.Médico),
    Pacientes_Unicos = n_distinct(Num..Prontuario.Expediente),
    Dosis_Total = sum(Cantidad.Recetada, na.rm = TRUE)
  )

kable(resumen_general, caption = "Resumen General del Dataset") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Resumen General del Dataset
Total_Registros Periodo Antibioticos_Unicos Servicios_Unicos Medicos_Unicos Pacientes_Unicos Dosis_Total
50700 2025-01-01 a 2025-07-31 39 31 236 8250 219832

Antibióticos Más Utilizados

# 2. Antibióticos más utilizados
top_antibioticos <- df_clean %>%
  group_by(Texto.Breve.Medicamento) %>%
  summarise(
    Total_Dosis = sum(Cantidad.Recetada),
    Porcentaje = round(Total_Dosis / sum(df_clean$Cantidad.Recetada) * 100, 2)
  ) %>%
  arrange(desc(Total_Dosis)) %>%
  head(10)

kable(top_antibioticos, caption = "Top 10 Antibióticos por Consumo") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Top 10 Antibióticos por Consumo
Texto.Breve.Medicamento Total_Dosis Porcentaje
CEFAZOLINA 1g INY 34601 15.74
AMOXICILINA + SULBACTAM 875mg+125mg COM 26847 12.21
AMOXICILINA+SULBACTAM 1000mg+500mg INY 18012 8.19
CEFALEXINA 500mg CAP 17814 8.10
VANCOMICINA 500mg INY 15364 6.99
MEROPENEN 1000 mg INY 15280 6.95
CIPROFLOXACINA 500mg COM 14966 6.81
CIPROFLOXACINA 200mg INY 11196 5.09
CLINDAMICINA 600mg INY 10411 4.74
PIPERACILINA+TAZOBACTAM 4g+500mg INY 7128 3.24

Servicios con Mayor Consumo

consumo_por_servicio <- df_clean %>%
  group_by(Denom..Almacén.Requisitante) %>%
  summarise(Total_Dosis = sum(Cantidad.Recetada)) %>%
  arrange(desc(Total_Dosis)) %>%
  head(10)

kable(consumo_por_servicio, caption = "Top 10 Servicios por Consumo de Antibióticos") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Top 10 Servicios por Consumo de Antibióticos
Denom..Almacén.Requisitante Total_Dosis
CX Gral A2 19326
CX Gral A1 18866
Clinic Med C2 1P 18542
CX Gral C1 18320
Urologia A1 (1P) 17797
OYT A2 3P 17305
OYT A1 3P 14894
OYT C2 3P 13290
OYT C1 3P 12493
CX Gral C2 12237

Visualizaciones

Patrón de Consumo por Hora del Día

consumo_por_hora <- df_clean %>%
  group_by(Hora_num) %>%
  summarise(Total = sum(Cantidad.Recetada)) %>%
  arrange(Hora_num)

ggplot(consumo_por_hora, aes(x = Hora_num, y = Total)) +
  geom_line(color = "steelblue", size = 1.5) +
  geom_point(color = "steelblue", size = 3) +
  labs(title = "Patrón de Consumo de Antibióticos por Hora del Día",
       x = "Hora del Día", y = "Dosis Totales") +
  theme_minimal() +
  scale_x_continuous(breaks = seq(0, 24, by = 3)) +
  theme(plot.title = element_text(hjust = 0.5))

Top 10 Antibióticos

ggplot(top_antibioticos, aes(x = reorder(Texto.Breve.Medicamento, Total_Dosis), y = Total_Dosis)) +
  geom_bar(stat = "identity", fill = "coral") +
  coord_flip() +
  labs(title = "Top 10 Antibióticos Más Utilizados",
       x = "Antibiótico", y = "Dosis Totales") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Uso de Antibióticos de Espectro Amplio

abx_espectro_amplio <- c("MEROPENEN 1000 mg INY", "IMIPENEN + CILASTATINA 500 mg INY", "TIGECICLINA 50mg INY")

uso_espectro_amplio <- df_clean %>%
  mutate(Espectro_Amplio = Texto.Breve.Medicamento %in% abx_espectro_amplio) %>%
  group_by(Denom..Almacén.Requisitante) %>%
  summarise(
    Total_Dosis = sum(Cantidad.Recetada),
    Porcentaje_Espectro_Amplio = sum(Cantidad.Recetada[Espectro_Amplio]) / Total_Dosis * 100
  ) %>%
  arrange(desc(Porcentaje_Espectro_Amplio))

kable(uso_espectro_amplio, caption = "Uso de Antibióticos de Espectro Amplio por Servicio") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Uso de Antibióticos de Espectro Amplio por Servicio
Denom..Almacén.Requisitante Total_Dosis Porcentaje_Espectro_Amplio
Clinica Med BC3 7167 46.6303893
CX Gral C3 4414 34.3452651
Clinic Med C2 1P 18542 27.1923201
OYT A3 3P 9851 24.1701350
OYT A1 3P 14894 15.4491742
Urologia A3 (1P) 797 14.9309912
Neurocirug Bloq 4485 13.5340022
3752 13.2196162
OYT D2 3P 269 11.8959108
CX Gral Urgencia 39 10.2564103
CX Gral A1 18866 6.1009223
CX Gral C1 18320 5.0272926
CX Gral A3 2P 6890 4.7314949
CX Gral C2 12237 4.4046743
Urologia A1 (1P) 17797 4.3546665
Urg Traumatolgia 74 2.7027027
CX Gral A2 19326 2.6078857
OYT D1 3P 6440 1.4596273
OYT A2 3P 17305 0.8956949
Masto BA2-1P 10444 0.2297970
OYT C2 3P 13290 0.1053424
Cirugia Gral C2 30 0.0000000
Clinica Med BA4 5 0.0000000
Cons Clin Ingavi 2004 0.0000000
Fcia Int DepoMed 30 0.0000000
Fcia Int Venta 14 0.0000000
Fichero Ingavi 15 0.0000000
Mastologi BD3 3P 30 0.0000000
OYT C1 3P 12493 0.0000000
Urg Pediat Polic 8 0.0000000
Urgenc Adulto BA 4 0.0000000

Análisis de Polifarmacia

pacientes_multiples_abx <- df_clean %>%
  group_by(Num..Prontuario.Expediente, Fecha) %>%
  summarise(
    Antibioticos_Distintos = n_distinct(Medicamento.SIH),
    Total_Dosis = sum(Cantidad.Recetada)
  ) %>%
  filter(Antibioticos_Distintos > 1) %>%
  arrange(desc(Antibioticos_Distintos))

ggplot(pacientes_multiples_abx, aes(x = Antibioticos_Distintos)) +
  geom_histogram(binwidth = 1, fill = "purple", alpha = 0.7) +
  labs(title = "Distribución de Número de Antibióticos por Paciente por Día",
       x = "Número de Antibióticos Diferentes", y = "Frecuencia") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Métricas de Salud Pública

metricas_salud_publica <- list(
  total_dosis = sum(df_clean$Cantidad.Recetada),
  dosis_diaria_promedio = mean(df_clean %>% group_by(Fecha) %>% summarise(Total = sum(Cantidad.Recetada)) %>% pull(Total)),
  porcentaje_multiples_abx = nrow(pacientes_multiples_abx) / n_distinct(df_clean$Num..Prontuario.Expediente) * 100,
  antibioticos_por_paciente_dia = mean(pacientes_multiples_abx$Antibioticos_Distintos),
  horario_pico_consumo = consumo_por_hora$Hora_num[which.max(consumo_por_hora$Total)]
)

kable(tibble(
  Métrica = names(metricas_salud_publica),
  Valor = unlist(metricas_salud_publica)
), caption = "Métricas Clave de Salud Pública") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Métricas Clave de Salud Pública
Métrica Valor
total_dosis 2.198320e+05
dosis_diaria_promedio 1.041858e+03
porcentaje_multiples_abx 1.261091e+02
antibioticos_por_paciente_dia 2.109477e+00
horario_pico_consumo NA

Discusión y Conclusiones

Este análisis revela patrones importantes en el uso de antibióticos en el entorno hospitalario:

  1. El consumo de antibióticos sigue un patrón circadiano con picos en horarios específicos
  2. Se identifican variaciones significativas entre servicios en el uso de antibióticos de espectro amplio
  3. Un porcentaje considerable de pacientes recibe múltiples antibióticos simultáneamente

Estos hallazgos sugieren oportunidades para optimizar el uso de antibióticos mediante: - Programas de gestión de antimicrobianos - Guías de prescripción basadas en evidencia - Monitoreo continuo de patrones de consumo

Limitaciones

  • El análisis se limita a un período corto (4 días)
  • No se dispone de información clínica completa de los pacientes
  • No se evaluó la adecuación de las prescripciones a guías clínicas

Futuras Investigaciones

Se recomienda expandir este análisis para: - Evaluar tendencias temporales a largo plazo - Correlacionar el uso de antibióticos con resultados clínicos - Analizar patrones de resistencia antimicrobiana asociados

Referencias

  1. WHO (2019). Antimicrobial stewardship programmes in health-care facilities in low- and middle-income countries
  2. CDC (2019). Core Elements of Hospital Antibiotic Stewardship Programs
  3. Charani E et al. (2019). Understanding the determinants of antimicrobial prescribing within hospitals: the role of “prescribing etiquette”

Este análisis fue realizado el 2025-09-03 usando R R version 4.4.3 (2025-02-28 ucrt)