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()
# 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)
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 |
# 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)
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 |
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)
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 |
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))
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))
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)
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 |
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))
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é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 |
Este análisis revela patrones importantes en el uso de antibióticos en el entorno hospitalario:
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
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
Este análisis fue realizado el 2025-09-03 usando R R version 4.4.3 (2025-02-28 ucrt)