# Librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(lubridate)
# Cargar datos
datos <- read.csv2(
"Base_de_Datos_QMT_2026.csv",
stringsAsFactors = FALSE
)
head(datos)
# Visualizar estructura
str(datos)
# Primeras filas
head(datos)Contexto del Problema: La atención de pacientes en quimioterapia requiere una adecuada planificación de recursos humanos, infraestructura y medicamentos. Las inasistencias, variaciones en la demanda y diferencias en las características de los pacientes pueden afectar la eficiencia operativa del servicio, generando subutilización o sobrecarga de recursos asistenciales.
Audiencia Objetivo: Directivos de instituciones de salud, coordinadores de servicios oncológicos, líderes asistenciales y profesionales responsables de la planeación y gestión de recursos en programas de quimioterapia.
Objetivo analítico: Identificar patrones de asistencia, caracterizar la población atendida y analizar factores asociados a la demanda del servicio de quimioterapia mediante técnicas de estadística descriptiva, inferencial y modelado predictivo, con el fin de apoyar la toma de decisiones basada en datos.
Este informe analiza 731 registros de pacientes programados para quimioterapia ambulatoria con el fin de comprender los patrones de asistencia, la caracterización de la población atendida y el comportamiento de la demanda del servicio. Los resultados evidenciaron una tasa de asistencia del 89.3%, una predominancia de pacientes afiliados al régimen subsidiado y una alta concentración de la demanda en diagnósticos de cáncer de mama. Adicionalmente, los análisis estadísticos y predictivos permitieron identificar tendencias operativas y generar información útil para la planificación de recursos y la toma de decisiones basada en datos.
| Indicador | Valor |
|---|---|
| Pacientes programados | 731 |
| Pacientes atendidos | 653 |
| Tasa de asistencia | 89.3% |
| Tasa de inasistencia | 10.7% |
| Régimen predominante | Subsidiado |
| Diagnóstico más frecuente | CA MAMA |
Introducción
Desde la perspectiva de la gestión de recursos sanitarios y la atención oncológica, la base de datos de pacientes programados para tratamiento de quimioterapia constituye una fuente de información estratégica para comprender el comportamiento asistencial, las características clínicas de la población atendida y la utilización de los recursos disponibles. La integración de variables demográficas, clínicas y operativas permite identificar patrones de atención, evaluar la adherencia al tratamiento y explorar factores asociados a la asistencia e inasistencia de los pacientes.
Se aplicaron herramientas de exploración analítica de datos, probabilidad y estadística descriptiva e inferencial con el fin de transformar los registros operativos en información útil para la toma de decisiones. Los resultados obtenidos contribuyen a identificar oportunidades de mejora en la continuidad de la atención, la optimización de agendas, la gestión de la capacidad instalada y el fortalecimiento de estrategias orientadas a la calidad y seguridad de la atención oncológica.
La base de datos analizada contiene 731 registros correspondientes a pacientes programados para tratamiento de quimioterapia durante el año 2026. La información incluye variables demográficas, administrativas y clínicas relacionadas con edad, sexo, procedencia, entidad aseguradora, régimen de afiliación, tipo de paciente, intención terapéutica, diagnóstico, medicamentos administrados y asistencia al tratamiento. Esta diversidad de variables permite realizar análisis orientados tanto a la caracterización de la población atendida como a la evaluación del desempeño operativo del servicio de oncología.
# Dimensiones de la base
data.frame(
Indicador = c("Número de registros", "Número de variables"),
Valor = dim(datos)
)## [1] "FECHA.PROGRAMACION"
## [2] "FECHA.DE.NACIMIENTO"
## [3] "EDAD"
## [4] "SEXO"
## [5] "PROCEDENCIA"
## [6] "EPS"
## [7] "REGIMEN"
## [8] "TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO"
## [9] "INTENCION"
## [10] "AMBULATORIO.O.HOSPITALIZADO"
## [11] "DX"
## [12] "CIE10"
## [13] "CONCOMITANCIA"
## [14] "ESPECIALIDAD"
## [15] "MEDICAMENTOS"
## [16] "ASISTENCIA"
## [17] "TELEFONO"
## [18] "MOTIVO"
## [19] "INICIA.O.CONTINUIDAD"
## [20] "FINALIZA.CICLO"
## [21] "FINALIZA.TRATAMIENTO"
La base de datos contiene 731 registros y 21 variables relacionadas con aspectos demográficos, clínicos y operativos de pacientes en tratamiento oncológico. La información disponible permite analizar tanto las características de la población atendida como indicadores asociados al funcionamiento del servicio. La diversidad de variables registradas constituye una oportunidad para desarrollar análisis orientados a la adherencia terapéutica, la gestión de agendas y la optimización de recursos asistenciales.
La caracterización de la población constituye un elemento fundamental para la planificación de servicios de salud. Conocer la distribución de los pacientes según variables demográficas como sexo y edad permite identificar grupos con mayor demanda de atención y orientar la asignación de recursos clínicos, administrativos y logísticos dentro del servicio de oncología.
El sexo constituye una variable demográfica fundamental para la caracterización de la población atendida, ya que puede influir en la frecuencia de determinados diagnósticos oncológicos, los patrones de utilización de los servicios de salud y las necesidades de atención. Analizar su distribución permite comprender la composición de la población y orientar la planificación de recursos asistenciales de acuerdo con los grupos predominantes.
Distribucion de Pacientes por Sexo
g1 <- ggplot(sexo_tabla,
aes(x = SEXO,
y = n,
fill = SEXO)) +
geom_col() +
labs(title = "Distribución de pacientes por sexo",
x = "Sexo",
y = "Número de pacientes") +
theme_minimal()
ggplotly(g1)La población atendida presentó una ligera predominancia del sexo femenino (54,9%) frente al masculino (45,1%). Esta distribución puede estar influenciada por la frecuencia de determinados tipos de cáncer dentro de la población estudiada. Desde la perspectiva de gestión sanitaria, conocer esta composición resulta útil para la planificación de programas de atención, seguimiento clínico y estrategias de educación dirigidas a los grupos con mayor demanda asistencial.
La edad es una variable clave en oncología. Este análisis permite identificar los grupos etarios con mayor demanda de tratamientos y orientar la asignación de recursos clínicos y administrativos.
datos <- datos %>%
mutate(
grupo_edad = case_when(
EDAD < 18 ~ "Menor de edad",
EDAD >= 18 & EDAD < 40 ~ "18-39",
EDAD >= 40 & EDAD < 60 ~ "40-59",
EDAD >= 60 ~ "60 o más"
)
)Distribución por grupos de Edad
edad_tabla <- datos %>%
count(grupo_edad)
g2 <- ggplot(edad_tabla,
aes(x = grupo_edad,
y = n,
fill = grupo_edad)) +
geom_col() +
labs(title = "Distribución por grupos de edad",
x = "Grupo de edad",
y = "Número de pacientes") +
theme_minimal()
ggplotly(g2)La población analizada estuvo conformada principalmente por adultos y adultos mayores, con una mediana de edad de 60 años. Este comportamiento es consistente con la epidemiología de las enfermedades oncológicas, cuya incidencia aumenta con la edad. La concentración de pacientes en grupos etarios avanzados implica mayores requerimientos de seguimiento clínico, manejo de comorbilidades y coordinación de recursos para garantizar la continuidad de la atención.
La identificación de los diagnósticos oncológicos más frecuentes permite comprender la composición de la demanda asistencial del servicio y orientar la planificación de recursos clínicos, farmacéuticos y operativos. Asimismo, facilita la priorización de estrategias de gestión enfocadas en los grupos de pacientes que generan mayor utilización de la capacidad instalada.
# Total de pacientes atendidos
total_pacientes <- datos %>%
filter(ASISTENCIA == "SI") %>%
nrow()
# Top 6 diagnósticos
top6_cancer <- datos %>%
filter(ASISTENCIA == "SI") %>%
count(DX, sort = TRUE) %>%
mutate(
porcentaje = round((n / total_pacientes) * 100, 1)
) %>%
slice_head(n = 6)
# Total de diagnósticos diferentes
total_tipos_cancer <- datos %>%
filter(ASISTENCIA == "SI") %>%
summarise(n = n_distinct(DX)) %>%
pull(n)
# Agregar fila resumen del Top 6
top6_cancer <- top6_cancer %>%
bind_rows(
data.frame(
DX = "TOTAL TOP 6",
n = sum(top6_cancer$n),
porcentaje = round(sum(top6_cancer$porcentaje), 1)
)
)
# Mostrar indicadores generales
cat("Pacientes atendidos:", total_pacientes, "\n")## Pacientes atendidos: 653
## Tipos de cáncer identificados: 57
# Mostrar tabla al final
knitr::kable(
top6_cancer,
col.names = c("Diagnóstico", "Pacientes", "% del total")
)| Diagnóstico | Pacientes | % del total |
|---|---|---|
| CA MAMA | 110 | 16.8 |
| CA GASTRICO | 97 | 14.9 |
| LINFOMA NO HODGKIN | 62 | 9.5 |
| MIELOMA | 59 | 9.0 |
| CA PROSTATA | 47 | 7.2 |
| CA RECTO | 26 | 4.0 |
| TOTAL TOP 6 | 401 | 61.4 |
Durante mayo de 2026 se atendieron 653 pacientes con 57 diagnósticos oncológicos diferentes, evidenciando una población amplia y clínicamente diversa. Sin embargo, la atención se concentró principalmente en seis patologías: cáncer de mama, cáncer gástrico, linfoma no Hodgkin, mieloma, cáncer de próstata y cáncer de recto, las cuales representaron en conjunto el 61,4% de los pacientes atendidos. Esta concentración de la demanda permite identificar los grupos diagnósticos que generan la mayor utilización de recursos asistenciales y constituye un insumo estratégico para la planificación de medicamentos, insumos y capacidad operativa del servicio de oncología.
Implicación para la gestión: La concentración de pacientes en determinados diagnósticos permite orientar la planificación de medicamentos, recursos asistenciales y capacidad operativa del servicio.
La asistencia al tratamiento constituye uno de los principales indicadores operativos en los servicios oncológicos, debido a su impacto sobre la continuidad terapéutica, la utilización de recursos y la eficiencia institucional. El análisis de los patrones de asistencia permite identificar oportunidades de mejora en la programación de agendas y en las estrategias de seguimiento a pacientes.
Implicación para la gestión: El seguimiento de los patrones de asistencia contribuye a optimizar la programación de citas y el aprovechamiento de los recursos disponibles.
Asistencia al tratamiento
g3 <- ggplot(asistencia_tabla,
aes(
x = `ASISTENCIA`,
y = n,
fill = `ASISTENCIA`
)) +
geom_col() +
labs(title = "Asistencia al tratamiento",
x = "Estado",
y = "Número de pacientes") +
theme_minimal()
ggplotly(g3)Se observó una alta adherencia al tratamiento, con una asistencia del 89,3% y una inasistencia del 10,7%. Aunque los resultados reflejan un adecuado nivel de cumplimiento, las ausencias continúan representando una fuente potencial de ineficiencia operativa, debido al impacto que generan sobre la utilización de la capacidad instalada y la oportunidad en la atención. El monitoreo continuo de este indicador resulta fundamental para fortalecer la gestión del servicio.
Este análisis permite identificar barreras de acceso o problemas operativos que afectan la continuidad terapéutica. Los hallazgos pueden utilizarse para diseñar intervenciones de mejoramiento en la gestión de citas y seguimiento de pacientes.
Motivos de Inasistencia
g3 <- ggplot(
asistencia_tabla,
aes(
x = reorder(ASISTENCIA, n),
y = n,
fill = ASISTENCIA
)
) +
geom_col() +
coord_flip() +
labs(
x = "Cumplimiento",
y = "# pacientes"
) +
theme_minimal()
ggplotly(g3)De las 78 inasistencias registradas, la causa principal fue ‘No asiste a control’ con 22 casos (28.2%), seguida estrechamente por la ‘Condición de salud’ del paciente con 20 casos (25.6%). Esto indica que más de la mitad del ausentismo se concentra en factores clínicos y de adherencia directa del paciente. Sin embargo, las barreras administrativas y de coordinación de la red tienen un peso importante: se registraron 4 casos por ‘EPS no envió medicamento’, 4 por ‘No tiene direccionamiento’, 4 por ‘Reprograman cita IPS’ y 2 por ‘Autorizaciones’. Estos 14 casos administrativos representan cerca del 18% de las pérdidas de agenda, lo que evidencia oportunidades claras de mejora en la coordinación con las aseguradoras en los días previos a la programación de las sillas de quimioterapia.
Análisis parcial
El análisis exploratorio permite caracterizar la población oncológica atendida e identificar patrones relevantes de asistencia al tratamiento. Se evidenció una población predominantemente adulta, con ligera mayor participación femenina y altos niveles de adherencia terapéutica. Asimismo, las principales causas de inasistencia estuvieron asociadas a condiciones clínicas y factores administrativos, información que puede orientar acciones de mejora en la gestión del servicio, la continuidad de la atención y la optimización de los recursos sanitarios.
La probabilidad y la estadística constituyen herramientas fundamentales para transformar datos operativos en información útil para la toma de decisiones. Su aplicación en el ámbito oncológico permite describir el comportamiento de la población atendida, estimar escenarios potenciales y evaluar diferencias o asociaciones entre variables relevantes para la gestión clínica y administrativa.
Esta sección permite resumir y comprender las principales características de la población analizada mediante indicadores numéricos y distribuciones de frecuencia. Complementariamente, la probabilidad empírica utiliza los datos observados para estimar la ocurrencia de eventos relevantes, aportando información útil para la gestión basada en evidencia.
La edad constituye una de las variables demográficas más relevantes en oncología, debido a su relación con la incidencia, evolución y complejidad de las enfermedades oncológicas. El análisis de medidas descriptivas permite resumir el comportamiento de esta variable dentro de la población estudiada.
estadisticas_edad <- data.frame(
Indicador = c(
"Media",
"Mediana",
"Desviación estándar",
"Varianza",
"Edad mínima",
"Edad máxima"
),
Valor = c(
mean(datos$EDAD, na.rm = TRUE),
median(datos$EDAD, na.rm = TRUE),
sd(datos$EDAD, na.rm = TRUE),
var(datos$EDAD, na.rm = TRUE),
min(datos$EDAD, na.rm = TRUE),
max(datos$EDAD, na.rm = TRUE)
)
)
estadisticas_edadLa probabilidad empírica se calcula a partir de los eventos observados en la base de datos. En este caso, permite estimar la frecuencia histórica de asistencia e inasistencia según el régimen de afiliación, aportando información útil para identificar posibles diferencias entre grupos poblacionales.
tabla_asistencia <- data.frame(
Estado = names(table(datos$ASISTENCIA)),
Frecuencia = as.vector(table(datos$ASISTENCIA)),
Probabilidad = round(
as.vector(prop.table(table(datos$ASISTENCIA))),
4
)
)
tabla_asistenciaLos datos muestran una marcada predominancia de pacientes que asistieron al tratamiento frente a aquellos que no asistieron. Este comportamiento refleja una adecuada adherencia al proceso terapéutico; sin embargo, el porcentaje de inasistencia continúa representando una fuente potencial de pérdida de capacidad instalada y retraso en los tratamientos. Desde la gestión del servicio, resulta importante monitorear periódicamente este indicador para identificar tendencias y oportunidades de mejora.
En esta sección identificar diferencias en los patrones de asistencia entre regímenes de aseguramiento, facilitando la detección de posibles inequidades o barreras de acceso.
La distribución de la asistencia según el régimen permite identificar posibles diferencias en el comportamiento de los pacientes frente al cumplimiento de sus citas. Si se observan variaciones importantes entre grupos, estas podrían estar relacionadas con barreras administrativas, autorizaciones o acceso a los servicios. Este tipo de información resulta útil para focalizar estrategias de mejoramiento y seguimiento institucional.
Frecuencias
Implicación para la gestión: El conocimiento de la composición de la población atendida facilita la planificación financiera y el relacionamiento con los aseguradores de mayor participación.
Probabilidad
prob_regimen <- round(
prop.table(
table(datos$REGIMEN, datos$ASISTENCIA),
1
) * 100,
2
)
as.data.frame.matrix(prob_regimen)Al analizar los 731 pacientes según su aseguramiento, se evidencia que el Régimen Subsidiado concentra el mayor volumen de la demanda con 446 pacientes (61% del total), aportando también la mayor cantidad absoluta de inasistencias (51 casos), lo que equivale a una probabilidad empírica de inasistencia del 11.43%. Por su parte, el Régimen Contributivo (198 pacientes) presentó 20 inasistencias (10.10%), mientras que el Régimen Especial (86 pacientes) mostró la mejor adherencia con solo 7 inasistencias (8.14%). Aunque las proporciones de incumplimiento oscilan cercanamente entre el 8% y el 11%, el impacto volumétrico recae sobre el régimen subsidiado, sugiriendo que las estrategias de navegación de pacientes y recordatorio de citas deben priorizar a esta población.
La simulación de escenarios permite representar situaciones operativas que podrían ocurrir en la práctica asistencial. Estas herramientas facilitan la comprensión de la variabilidad inherente a fenómenos como la asistencia de pacientes, la ocupación de recursos y la demanda de servicios, apoyando la planificación y la toma de decisiones.
La selección aleatoria de registros constituye una herramienta ampliamente utilizada en procesos de auditoría y control de calidad. Su aplicación permite garantizar imparcialidad en la revisión de historias clínicas y optimizar el uso de recursos destinados a la evaluación de la atención.
La muestra seleccionada representa un ejemplo práctico de cómo pueden elegirse registros para procesos de auditoría clínica. Este procedimiento facilita la evaluación sistemática de la calidad de los registros y del cumplimiento de estándares asistenciales sin necesidad de revisar la totalidad de la base de datos.
Las distribuciones binomiales permiten modelar eventos que pueden ocurrir o no ocurrir, como la asistencia a una cita programada. Esta simulación ayuda a comprender la variabilidad natural que puede presentarse en la programación diaria del servicio.
set.seed(123)
sim_inasistencia <- rbinom(
1000,
size = 20,
prob = 0.107
)
data.frame(
Indicador = "Inasistencias simuladas",
`Escenario 1` = sim_inasistencia[1],
`Escenario 2` = sim_inasistencia[2],
`Escenario 3` = sim_inasistencia[3],
`Escenario 4` = sim_inasistencia[4],
`Escenario 5` = sim_inasistencia[5],
`Escenario 6` = sim_inasistencia[6]
)Los escenarios simulados muestran que el número de inasistencias puede variar entre 0 y 4 pacientes en agendas hipotéticas de 20 pacientes programados. Aunque todos los escenarios fueron generados con la misma probabilidad histórica de inasistencia (10,7%), los resultados fluctúan debido a la variabilidad inherente a los procesos asistenciales. Este ejercicio permite anticipar posibles comportamientos operativos y apoyar la planificación de recursos en el servicio oncológico.
Simulación de Inasistencias Diarias
sim_binomial <- data.frame(
inasistencias = sim_inasistencia
)
g5 <- ggplot(sim_binomial,
aes(x = inasistencias)) +
geom_histogram(bins = 15) +
labs(title = "Simulación de inasistencias diarias",
x = "Número de inasistencias",
y = "Frecuencia") +
theme_minimal()
ggplotly(g5)La simulación evidencia que el número de inasistencias puede variar entre diferentes jornadas, incluso manteniendo una probabilidad de inasistencia constante. Este comportamiento refleja la incertidumbre propia de la operación diaria de los servicios de salud. Desde una perspectiva administrativa, conocer esta variabilidad facilita la planificación de agendas, la asignación de recursos y la evaluación de estrategias para reducir tiempos ociosos.
Los tiempos de permanencia en las sillas de quimioterapia influyen directamente sobre la capacidad operativa del servicio. La simulación mediante una distribución normal permite representar la variabilidad esperada en la duración de los tratamientos.
## [1] 163.1857 173.0947 226.7612 182.1153 183.8786 231.4519
data.frame(
Indicador = "Tiempo de ocupación (minutos)",
`Escenario 1` = round(tiempo_silla[1],1),
`Escenario 2` = round(tiempo_silla[2],1),
`Escenario 3` = round(tiempo_silla[3],1),
`Escenario 4` = round(tiempo_silla[4],1),
`Escenario 5` = round(tiempo_silla[5],1),
`Escenario 6` = round(tiempo_silla[6],1)
)Los escenarios simulados muestran que el tiempo de ocupación de una silla de quimioterapia puede variar entre pacientes, aun cuando se parte de un promedio esperado de 180 minutos. Esta variabilidad refleja diferencias clínicas, esquemas terapéuticos y condiciones individuales de atención. La simulación permite visualizar cómo estas fluctuaciones pueden impactar la disponibilidad de capacidad instalada y la programación diaria del servicio.
Simulación de Tiempo de Ocupación
tiempo_df <- data.frame(
tiempo_silla
)
g6 <- ggplot(tiempo_df,
aes(x = tiempo_silla)) +
geom_histogram(bins = 20) +
labs(title = "Simulación de tiempo de ocupación",
x = "Minutos",
y = "Frecuencia") +
theme_minimal()
ggplotly(g6)La distribución observada muestra que la mayoría de los tiempos de ocupación se concentran alrededor del promedio estimado, mientras que algunos pacientes pueden requerir tiempos significativamente mayores o menores. Este comportamiento es relevante para la programación de la capacidad instalada, ya que permite anticipar variaciones en la utilización de las sillas de tratamiento y mejorar la gestión de los flujos asistenciales.
En esta sección evaluamos si los patrones observados en los datos pueden considerarse evidencia suficiente para identificar diferencias o asociaciones entre grupos.
La prueba t de Student permite comparar el promedio de una variable numérica entre dos grupos. En este caso, se utiliza para evaluar posibles diferencias en la edad promedio entre hombres y mujeres atendidos en el servicio.
tabla_intencion <- data.frame(
Intencion = names(table(datos$INTENCION)),
Frecuencia = as.vector(table(datos$INTENCION))
)
tabla_intenciondata.frame(
Indicador = c(
"Edad promedio mujeres",
"Edad promedio hombres",
"Valor p"
),
Resultado = c(
round(t_edad_sexo$estimate[1],2),
round(t_edad_sexo$estimate[2],2),
round(t_edad_sexo$p.value,4)
)
)Comparación Edad y Sexo
Al aplicar la prueba t de Student para evaluar si el perfil etario varía según el sexo, los datos muestran que la edad promedio de las 401 mujeres atendidas fue de 57.07 años, frente a los 58.15 años de los 330 hombres. El resultado de la prueba estadística arrojó un valor p de 0.3688. Al ser este valor superior al nivel de significancia (0.05), se concluye que no existe una diferencia estadísticamente significativa en la edad de los pacientes según su sexo. Esto indica que el servicio atiende a una población etariamente homogénea, sin sesgos generacionales entre hombres y mujeres.
El análisis de varianza (ANOVA) permite comparar promedios entre más de dos grupos de manera simultánea. Su aplicación facilita la identificación de diferencias potenciales en variables clínicas o demográficas entre distintas categorías de interés.
resultado_anova <- summary(anova_intencion)[[1]]
data.frame(
Indicador = c(
"Grupos comparados",
"Estadístico F",
"Valor p"
),
Resultado = c(
"Intención terapéutica",
round(resultado_anova$`F value`[1], 2),
format(resultado_anova$`Pr(>F)`[1], scientific = TRUE)
)
)El análisis de varianza (ANOVA) permitió comparar la edad promedio entre los diferentes grupos de intención terapéutica. Se identificaron diferencias estadísticamente significativas entre los grupos (F = 19,9; p < 0,001), lo que indica que la edad de los pacientes varía según la intención del tratamiento. Este hallazgo sugiere que las decisiones terapéuticas podrían estar asociadas con características demográficas de la población atendida y constituye información relevante para la planificación de recursos clínicos y asistenciales.
Comparativa Edad vs Intención
edad_intencion <- datos %>%
group_by(INTENCION) %>%
summarise(
Edad_promedio = mean(EDAD, na.rm = TRUE)
)
g8 <- ggplot(
edad_intencion,
aes(
x = INTENCION,
y = Edad_promedio,
fill = INTENCION
)
) +
geom_col() +
labs(
title = "Edad promedio según intención terapéutica",
x = "Intención terapéutica",
y = "Edad promedio"
) +
theme_minimal()
ggplotly(g8)El análisis de varianza (ANOVA) evaluó la relación entre la edad del paciente y la intención terapéutica, la cual se distribuyó en 417 pacientes con intención paliativa, 303 curativa y 11 no oncológica. La prueba estadística arrojó un estadístico F de 17.88 y un valor p de 2.62 x 10^-8 (p < 0.001), lo que confirma que existen diferencias estadísticamente significativas en la edad promedio según el enfoque del tratamiento. Clínicamente, esto demuestra que las decisiones terapéuticas paliativas y curativas están fuertemente segmentadas por el momento de vida y la edad biológica de la población atendida.
La prueba Chi-cuadrado permite evaluar si existe asociación entre dos variables categóricas. En este caso, se analiza si el régimen de afiliación presenta alguna relación con el comportamiento de asistencia al tratamiento.
tabla_chi <- table(
datos$REGIMEN,
datos$ASISTENCIA
)
tabla_chi_df <- as.data.frame.matrix(tabla_chi)
tabla_chi_dfchi_resultado <- chisq.test(tabla_chi)
data.frame(
Indicador = c(
"Prueba",
"Chi-cuadrado",
"Grados de libertad",
"Valor p"
),
Resultado = c(
"Regimen vs Asistencia",
round(chi_resultado$statistic,2),
chi_resultado$parameter,
round(chi_resultado$p.value,4)
)
)La evaluación arrojó un valor Chi-cuadrado de 1.04 con 3 grados de libertad y un valor p de 0.792. Dado que el valor p es superior a 0.05, no se encontró evidencia estadística de asociación entre el régimen de afiliación y la asistencia al tratamiento. Operativamente, esto sugiere que los niveles de cumplimiento observados son similares entre los diferentes regímenes analizados, indicando que el aseguramiento no parece constituir un factor determinante de la asistencia en la población estudiada.
Asistencia según Régime
regimen_tabla <- datos %>%
count(REGIMEN) %>%
mutate(
porcentaje = round(n / sum(n) * 100, 1),
etiqueta = paste0(
REGIMEN,
" - ",
n,
" pacientes (",
porcentaje,
"%)"
)
)
ggplot(
regimen_tabla,
aes(
x = "",
y = n,
fill = etiqueta
)
) +
geom_col(width = 1) +
coord_polar("y") +
theme_void() +
labs(
title = "Distribución de pacientes según régimen de afiliación",
fill = "Régimen"
)tabla_chi_df <- as.data.frame(tabla_chi)
g9 <- ggplot(
tabla_chi_df,
aes(
x = Var1,
y = Freq,
fill = Var2
)
) +
geom_col(position = "dodge") +
labs(
title = "Asistencia según régimen",
x = "Régimen",
y = "Frecuencia"
) +
theme_minimal()
ggplotly(g9)La comparación de frecuencias permite identificar si algunos regímenes presentan mayores proporciones de inasistencia que otros. Desde la perspectiva de gestión sanitaria, esta información puede orientar intervenciones específicas para grupos que presenten mayores dificultades de acceso o continuidad en el tratamiento.
La prueba de comparación de proporciones permite determinar si la frecuencia de un evento difiere entre dos o más grupos. En este caso, se analiza si existen diferencias en la proporción de inasistencia entre pacientes nuevos y pacientes en control.
Tabla de frecuencias
tabla_prop <- table(
datos$TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO,
datos$inasistencia
)
tabla_prop_df <- data.frame(
Tipo_Paciente = rownames(tabla_prop),
Asistio = tabla_prop[,1],
No_Asistio = tabla_prop[,2]
)
tabla_prop_dfPrueba de proporciones
prop_resultado <- prop.test(
x = tabla_prop[,2],
n = rowSums(tabla_prop)
)
data.frame(
Indicador = c(
"Proporción de inasistencia Control",
"Proporción de inasistencia Nuevo",
"Valor p"
),
Resultado = c(
round(tabla_prop["CONTROL",2] / sum(tabla_prop["CONTROL",]),4),
round(tabla_prop["NUEVO",2] / sum(tabla_prop["NUEVO",]),4),
round(prop_resultado$p.value,4)
)
)Al desagregar la demanda operativa, la base reportó 384 pacientes en control y 347 pacientes nuevos. La inasistencia en los controles fue del 11.20% (43 inasistencias), mientras que en los pacientes de primera vez fue ligeramente inferior, con un 10.09% (35 inasistencias). Al realizar la prueba estadística de comparación de proporciones, se obtuvo un valor p de 0.7143. Este resultado confirma que no hay diferencias significativas en la adherencia entre ambos grupos. Para la gestión operativa, esto es un hallazgo positivo, pues indica que los pacientes que ingresan por primera vez logran acoplarse y asistir a sus esquemas iniciales con la misma disciplina que aquellos que ya llevan tiempo en el servicio.
Visualización Proporción de asistencia e inasistencia según tipo de paciente
prop_df <- as.data.frame(prop.table(tabla_prop,1))
prop_df$Var2 <- factor(
prop_df$Var2,
levels = c(0,1),
labels = c("Asistió", "No asistió")
)
g10 <- ggplot(
prop_df,
aes(
x = Var1,
y = Freq,
fill = Var2
)
) +
geom_col(position = "dodge") +
labs(
x = "Tipo de paciente",
y = "Proporción",
fill = "Estado"
) +
theme_minimal()
ggplotly(g10)La distribución visual de las barras confirma una alta homogeneidad en el comportamiento de la demanda asistencial. Tanto para los esquemas de continuidad (control) como para las aperturas de tratamiento (nuevos), la tasa de asistencia efectiva supera holgadamente el 88%, manteniéndose en un 88.8% para controles y un 89.9% para pacientes de primera vez. Desde una perspectiva gerencial y de programación de agendas, este hallazgo es sumamente positivo: tumba la hipótesis común de que los pacientes nuevos faltan más por desconocimiento del servicio o que los controles se confían y descuidan sus citas. Al comportarse de manera idéntica, el servicio puede aplicar estrategias unificadas de confirmación y asignación de tiempos en sala de quimioterapia para toda la población, sin necesidad de segmentar los esfuerzos logísticos según el tipo de ingreso.
Analisis
El análisis realizado permitió caracterizar la población atendida en el servicio de quimioterapia e identificar patrones relevantes relacionados con la asistencia al tratamiento, las características demográficas y la variabilidad operativa del servicio. Los resultados evidenciaron una población predominantemente adulta, altos niveles de adherencia terapéutica y factores clínicos y administrativos asociados a la inasistencia. La aplicación de herramientas de estadística descriptiva, probabilidad e inferencia permitió transformar los registros asistenciales en información útil para la gestión, aportando elementos que pueden apoyar la optimización de recursos, la continuidad de la atención y el fortalecimiento de la calidad en los servicios oncológicos.
El modelado predictivo permite transformar los datos históricos en información útil para anticipar necesidades futuras del servicio. En el contexto de la quimioterapia ambulatoria, estimar el volumen de pacientes que efectivamente asisten a tratamiento constituye una herramienta valiosa para la planificación de agendas, asignación de personal, disponibilidad de sillas de infusión y gestión de recursos asistenciales. A partir de los registros históricos de programación y asistencia, es posible construir modelos estadísticos que apoyen la toma de decisiones operativas y contribuyan a una utilización más eficiente de la capacidad instalada.
Implicación para la gestión: Las proyecciones obtenidas pueden utilizarse como herramienta de apoyo para la planeación estratégica y la anticipación de necesidades futuras del servicio.
Introducción
La gestión eficiente de los servicios oncológicos requiere anticipar la demanda asistencial para garantizar la disponibilidad oportuna de recursos humanos, infraestructura y capacidad operativa. En los servicios de quimioterapia, las variaciones en la asistencia de los pacientes pueden generar tanto congestión de agendas como subutilización de recursos, afectando la eficiencia institucional y la continuidad de la atención. Por esta razón, el uso de modelos predictivos representa una estrategia útil para apoyar la toma de decisiones basada en datos históricos.
Cuello de Botella Operativo y Pérdida Económica en el Agendamiento
El servicio de quimioterapia debe planificar diariamente la asignación de recursos asistenciales, incluyendo personal de enfermería, disponibilidad de sillas de infusión, programación de medicamentos y tiempos de atención. Sin embargo, la variabilidad en la asistencia de los pacientes dificulta la estimación precisa de la demanda, lo que puede generar ineficiencias operativas y afectar el aprovechamiento de la capacidad instalada.
Objetivo general
Desarrollar un modelo predictivo capaz de estimar el volumen diario de pacientes que asisten a tratamiento de quimioterapia, utilizando información histórica de la base de datos institucional, con el fin de apoyar la planificación de agendas, la asignación de recursos asistenciales y la optimización de la capacidad operativa del servicio.
Indicadores clave de desempeño (KPIs)
KPI 1. Error Cuadrático Medio (RMSE)
Mide la diferencia promedio entre el número real de pacientes atendidos y el número estimado por el modelo predictivo.
Meta: Mantener un RMSE inferior a 2 pacientes por día programado.
KPI 2. Error porcentual de predicción
Evalúa el porcentaje de diferencia entre los valores observados y los valores predichos por el modelo.
Meta: Mantener un error inferior al 20% del volumen promedio diario de pacientes atendidos.
KPI 3. Estabilidad del modelo
Compara el desempeño obtenido en los conjuntos de entrenamiento y prueba para identificar posibles problemas de sobreajuste.
Meta: Mantener una diferencia inferior al 10% entre el RMSE de entrenamiento y el RMSE de prueba.
Meta del modelo
Construir un modelo predictivo con capacidad para estimar de manera consistente el volumen diario de pacientes atendidos, generando resultados suficientemente precisos para apoyar la programación operativa y la gestión de recursos dentro del servicio de oncología.
Justificación
La implementación de herramientas de analítica predictiva permite transformar los datos históricos en información útil para la gestión clínica y administrativa. La capacidad de anticipar el volumen esperado de pacientes puede contribuir a optimizar la utilización de recursos, mejorar la planificación de agendas y fortalecer la continuidad de la atención en pacientes oncológicos.
La construcción de un modelo predictivo requiere identificar las variables con potencial capacidad explicativa sobre el fenómeno que se desea estimar. En este caso, el objetivo es predecir el volumen diario de pacientes que asisten a tratamiento de quimioterapia, por lo que se seleccionan variables demográficas, clínicas y operativas que podrían influir en la demanda del servicio. Adicionalmente, se realiza una exploración inicial para verificar la calidad y estructura de los datos disponibles.
library(dplyr)
library(tidyr)
library(ggplot2)
library(plotly)
library(rsample)
library(broom)
library(yardstick)
library(ggpubr)
cat("Número de registros:", nrow(datos), "\n")## Número de registros: 731
## Número de variables: 23
La base de datos contiene 731 registros correspondientes a pacientes programados para tratamiento oncológico y 23 variables demográficas, clínicas y administrativas. Entre las variables disponibles se encuentran edad, sexo, régimen de afiliación, intención terapéutica, asistencia al tratamiento y características operativas de la atención. Esta información proporciona una base adecuada para desarrollar modelos predictivos orientados a la gestión de la demanda asistencial.
variables_modelo <- data.frame(
Variables_Seleccionadas = c(
"FECHA.PROGRAMACION",
"EDAD",
"SEXO",
"REGIMEN",
"INTENCION",
"ASISTENCIA"
)
)
variables_modeloAunque la base de datos contiene 23 variables disponibles para análisis, se seleccionaron seis variables consideradas relevantes para el desarrollo del modelo predictivo. Esta selección se realizó con base en criterios clínicos, administrativos y operativos, priorizando aquellas que pueden influir sobre el comportamiento de la asistencia y la demanda de atención en el servicio de quimioterapia.
datos_modelo <- datos %>%
select(
FECHA.PROGRAMACION,
EDAD,
SEXO,
REGIMEN,
INTENCION,
ASISTENCIA
) %>%
drop_na()
head(datos_modelo)Se seleccionaron variables demográficas (edad y sexo), administrativas (régimen de afiliación), clínicas (intención terapéutica) y operativas (asistencia al tratamiento y fecha de programación), debido a su posible influencia sobre la utilización de los servicios oncológicos. Estas variables constituyen la base de información utilizada para desarrollar el modelo predictivo.
Justificación clínica de las variables
Edad: La complejidad clínica y frecuencia de atención pueden variar según el grupo etario.
Sexo: Algunos diagnósticos oncológicos presentan distribuciones diferentes según sexo.
Régimen: Puede influir sobre la continuidad y oportunidad de la atención.
Intención terapéutica: Los pacientes curativos y paliativos pueden presentar patrones diferentes de seguimiento.
Fecha de programación: Permite identificar comportamientos temporales de la demanda.
Asistencia histórica: Constituye el principal antecedente para estimar futuros volúmenes de atención.
Las variables seleccionadas combinan información demográfica, clínica y administrativa relacionada con la utilización del servicio. Su inclusión busca representar diferentes factores que pueden influir en la asistencia de los pacientes y, por tanto, en el volumen diario de atención requerido por el servicio de quimioterapia.
El volumen de pacientes atendidos se define como el número de pacientes que asistieron al tratamiento en cada fecha programada.
volumen_diario <- datos %>%
filter(ASISTENCIA == "SI") %>%
count(FECHA.PROGRAMACION)
head(volumen_diario)Implicación para la gestión: La identificación de días con mayor demanda permite ajustar la asignación de personal y mejorar la eficiencia operativa.
Volumen de pacientes atendidos por fecha
g11 <- ggplot(
volumen_diario,
aes(
x = seq_along(n),
y = n
)
) +
geom_col(fill = "steelblue") +
labs(
title = "Volumen de pacientes atendidos por fecha",
x = "Fecha programada",
y = "Pacientes atendidos"
) +
theme_minimal()
g11El volumen de pacientes atendidos presenta variaciones entre las diferentes fechas de programación, evidenciando fluctuaciones naturales en la demanda asistencial del servicio. Estas diferencias sugieren que la carga operativa no es constante a lo largo del tiempo, lo que justifica la utilización de herramientas predictivas para anticipar necesidades de personal, agendas y capacidad instalada. La información histórica de asistencia constituye la base para desarrollar modelos que apoyen una planificación más eficiente de los recursos oncológicos.
Para construir un modelo predictivo es necesario dividir los datos en dos conjuntos: uno para entrenar el modelo y otro para evaluar su desempeño. Esta metodología permite verificar si el modelo es capaz de realizar predicciones sobre datos no utilizados durante su construcción, reduciendo el riesgo de obtener resultados artificialmente optimistas.
library(rsample)
# Base agregada por fecha
volumen_diario <- datos %>%
filter(ASISTENCIA == "SI") %>%
count(FECHA.PROGRAMACION)
head(volumen_diario)La variable de interés corresponde al número de pacientes que asistieron a tratamiento en cada fecha programada. Esta medida representa la demanda real del servicio y será utilizada como variable resultado para el modelo predictivo.
La división de los datos permite construir el modelo utilizando el 75% de la información disponible y reservar el 25% restante para evaluar su capacidad predictiva. Este procedimiento es ampliamente utilizado para verificar la estabilidad y utilidad práctica de los modelos estadísticos.
library(rsample)
set.seed(123)
division <- initial_split(
volumen_diario,
prop = 0.75
)
train_data <- training(division)
test_data <- testing(division)
data.frame(
Conjunto = c("Entrenamiento", "Prueba"),
Registros = c(nrow(train_data), nrow(test_data))
)La base de datos fue dividida en dos subconjuntos: uno destinado al entrenamiento del modelo (75% de las observaciones) y otro reservado para la evaluación de su desempeño (25% restante). Esta estrategia permite construir el modelo utilizando la mayor parte de la información disponible y, al mismo tiempo, verificar su capacidad de generar predicciones sobre datos que no participaron en su ajuste.
Desde la perspectiva de gestión clínica, esta metodología reduce el riesgo de obtener resultados artificialmente optimistas y proporciona una evaluación más realista de la utilidad del modelo para apoyar la planificación de recursos, la programación de tratamientos y la gestión de la capacidad instalada del servicio de oncología.
library(dplyr)
train_data <- train_data %>%
mutate(dia = row_number())
test_data <- test_data %>%
mutate(dia = row_number())
head(train_data)Se construyó una variable secuencial denominada “día”, que representa el orden cronológico de las observaciones incluidas en el conjunto de entrenamiento. Esta variable permite evaluar la existencia de tendencias temporales en el volumen de pacientes atendidos y constituye la variable predictora utilizada para el ajuste inicial del modelo de regresión lineal.
Se construyó una variable secuencial denominada “día”, que representa el orden cronológico de las observaciones. Esta variable permite evaluar si existe una tendencia en el volumen de pacientes atendidos a lo largo del periodo analizado.
##
## Call:
## lm(formula = n ~ dia, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.7332 -12.3671 0.4368 10.9792 20.5217
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 27.9881 5.9067 4.738 0.000111 ***
## dia -0.5425 0.4308 -1.259 0.221741
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.7 on 21 degrees of freedom
## Multiple R-squared: 0.07021, Adjusted R-squared: 0.02594
## F-statistic: 1.586 on 1 and 21 DF, p-value: 0.2217
La variable día presentó una relación negativa con el volumen de pacientes atendidos; sin embargo, esta asociación no fue estadísticamente significativa (p = 0,382). Asimismo, el modelo explicó únicamente el 3,7% de la variabilidad observada (R² = 0,037), lo que indica que la demanda asistencial depende de otros factores clínicos y operativos no incluidos en el análisis.
Modelo de regresión lineal
library(ggplot2)
library(plotly)
g12 <- ggplot(
train_data,
aes(
x = dia,
y = n
)
) +
geom_point() +
geom_smooth(
method = "lm",
se = TRUE,
color = "blue"
) +
labs(
title = "Modelo de regresión lineal",
x = "Día",
y = "Pacientes atendidos"
) +
theme_minimal()
ggplotly(g12)La gráfica evidencia una amplia dispersión en el número de pacientes atendidos a lo largo del periodo analizado. Aunque la línea de regresión presenta una pendiente ligeramente negativa, la amplitud de la banda de confianza y la distribución de los puntos sugieren que no existe una tendencia temporal claramente definida.
Se observan días con una demanda considerablemente superior al promedio y otros con una actividad mucho menor, lo que refleja una variabilidad operativa importante dentro del servicio. Estos hallazgos indican que la demanda asistencial no puede explicarse únicamente por el paso del tiempo y que la incorporación de variables clínicas y administrativas adicionales podría mejorar la capacidad predictiva del modelo..
Una vez ajustado el modelo, es necesario evaluar su comportamiento para determinar si las predicciones obtenidas son confiables para apoyar la toma de decisiones. Esta etapa permite identificar posibles desviaciones del modelo, comparar su desempeño en datos de entrenamiento y prueba, y detectar señales de sobreajuste que puedan limitar su aplicación en escenarios reales de gestión clínica.
Los residuos corresponden a la diferencia entre los valores observados y los valores predichos por el modelo. Su análisis permite evaluar si la regresión lineal describe adecuadamente el comportamiento de los datos y detectar posibles patrones no explicados por las variables incluidas.
Distribución de residuos
library(plotly)
g13 <- ggplot(
residuos,
aes(
x = .fitted,
y = .resid,
text = paste(
"Predicción:", round(.fitted,2),
"<br>Residuo:", round(.resid,2)
)
)
) +
geom_point() +
geom_hline(
yintercept = 0,
linetype = "dashed"
) +
labs(
title = "Diagnóstico de residuos del modelo",
x = "Valores predichos",
y = "Residuos"
) +
theme_minimal()
ggplotly(g13, tooltip = "text")Los residuos se distribuyen tanto por encima como por debajo de la línea de referencia en cero, sin evidenciar un patrón sistemático claramente definido. Este comportamiento sugiere que el modelo no presenta sesgos importantes en sus predicciones, ya que los errores ocurren en ambas direcciones.
No obstante, la amplitud de algunos residuos evidencia diferencias considerables entre los valores observados y los estimados por el modelo. Esto es consistente con el bajo valor de R² identificado previamente y refuerza la idea de que existen factores relevantes que no están siendo capturados por la variable temporal utilizada en la regresión. Desde una perspectiva operativa, el modelo ofrece una aproximación general al comportamiento de la demanda, pero su capacidad explicativa resulta limitada para realizar predicciones precisas del volumen diario de pacientes.
Además de la evaluación visual, es necesario cuantificar el error de predicción mediante indicadores objetivos. Para este ejercicio se utilizará el RMSE (Raíz del Error Cuadrático Medio), una métrica ampliamente utilizada para medir la diferencia promedio entre los valores observados y los estimados por el modelo.
library(yardstick)
pred_train <- predict(
modelo_qmt,
newdata = train_data
)
pred_test <- predict(
modelo_qmt,
newdata = test_data
)
rmse_train <- rmse_vec(
truth = train_data$n,
estimate = pred_train
)
rmse_test <- rmse_vec(
truth = test_data$n,
estimate = pred_test
)Tabla de resultados
El modelo presentó un RMSE de 15,37 pacientes en el conjunto de entrenamiento y 12,79 pacientes en el conjunto de prueba. Estos resultados indican que, en promedio, las predicciones realizadas por el modelo difieren entre 13 y 15 pacientes respecto a los valores observados.
La diferencia entre ambos valores es reducida y, además, el error en el conjunto de prueba es ligeramente menor que en entrenamiento. Este comportamiento sugiere que el modelo no presenta evidencia de sobreajuste y mantiene una capacidad de generalización aceptable para los datos evaluados. Desde la perspectiva de gestión clínica, el modelo constituye una aproximación inicial útil para estimar la demanda asistencial; sin embargo, el nivel de error observado indica que aún existen factores no incluidos en el análisis que podrían influir en el volumen diario de pacientes atendidos..
La comparación visual de las métricas obtenidas en entrenamiento y prueba facilita la identificación de posibles problemas de sobreajuste (overfitting), situación en la que un modelo aprende excesivamente los datos utilizados para su construcción pero pierde capacidad para generalizar a nuevos escenarios.
comparacion_rmse <- data.frame(
Conjunto = c("Entrenamiento", "Prueba"),
RMSE = c(rmse_train, rmse_test)
)
g14 <- ggplot(
comparacion_rmse,
aes(
x = Conjunto,
y = RMSE,
fill = Conjunto,
text = paste(
"Conjunto:", Conjunto,
"<br>RMSE:", round(RMSE,2)
)
)
) +
geom_col(width = 0.5) +
labs(
title = "Comparación del desempeño del modelo",
x = "Conjunto de datos",
y = "RMSE"
) +
theme_minimal()
ggplotly(g14, tooltip = "text")La comparación gráfica evidencia que los errores obtenidos en los conjuntos de entrenamiento y prueba son similares, lo que confirma la estabilidad del modelo al enfrentarse a información nueva. La ausencia de diferencias importantes entre ambos resultados indica que la regresión lineal no está memorizando los datos utilizados para su construcción y conserva una capacidad razonable de predicción sobre observaciones no vistas previamente.
Para la gestión clínica, un modelo con desempeño estable proporciona una base más sólida para anticipar variaciones en la demanda de atención y fortalecer los procesos de planificación operativa del servicio de oncología.
Conclusión del diagnóstico del modelo
Los resultados obtenidos indican que el modelo presenta un comportamiento estable y una adecuada capacidad de generalización, al mantener niveles de error similares entre los conjuntos de entrenamiento y prueba. Aunque las predicciones ofrecen una aproximación útil al comportamiento de la demanda asistencial, la precisión alcanzada evidencia oportunidades de mejora mediante la incorporación de nuevas variables explicativas que permitan capturar de forma más completa los factores que influyen en la utilización de los servicios de quimioterapia.
Como complemento al modelo de predicción del volumen de pacientes atendidos, se desarrolló un análisis exploratorio orientado a evaluar la capacidad de predecir la asistencia de los pacientes programados para quimioterapia. A diferencia del modelo anterior, este ejercicio corresponde a un problema de clasificación binaria, donde el resultado de interés es determinar si el paciente asistió o no a su cita programada.
datos_auc <- datos %>%
select(
EDAD,
SEXO,
REGIMEN,
TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO,
ASISTENCIA
) %>%
drop_na() %>%
mutate(
ASISTENCIA = trimws(ASISTENCIA),
asistencia_bin = ifelse(ASISTENCIA == "SI", 1, 0),
SEXO = trimws(SEXO),
REGIMEN = trimws(REGIMEN),
TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO =
trimws(TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO)
)library(rsample)
set.seed(123)
split_auc <- initial_split(
datos_auc,
prop = 0.75,
strata = ASISTENCIA
)
train_auc <- training(split_auc)
test_auc <- testing(split_auc)test_auc <- test_auc %>%
mutate(
SEXO = factor(SEXO, levels = unique(train_auc$SEXO)),
REGIMEN = factor(REGIMEN, levels = unique(train_auc$REGIMEN)),
TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO =
factor(
TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO,
levels = unique(train_auc$TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO)
)
)modelo_auc <- glm(
asistencia_bin ~ EDAD + SEXO + REGIMEN +
TIPO.DE.PACIENTE.NUEVO..CONTROL.O.REINGRESO,
data = train_auc,
family = binomial
)## [1] NA
La regresión logística permite estimar la probabilidad de asistencia a partir de variables demográficas y administrativas. Este enfoque es útil para identificar factores asociados a la inasistencia y apoyar estrategias de seguimiento dirigidas a pacientes con mayor riesgo de incumplimiento. Cálculo del AUC
library(pROC)
roc_obj <- roc(
response = test_auc$asistencia_bin,
predictor = pred_auc
)
auc(roc_obj)## Area under the curve: 0.4899
Gráfica de la curva ROC
library(pROC)
roc_obj <- roc(
response = test_auc$asistencia_bin,
predictor = pred_auc
)
plot(
roc_obj,
main = "Curva ROC - Predicción de asistencia"
)El modelo de clasificación presentó un AUC de 0.4899, lo cual indica una capacidad discriminativa cercana al azar para diferenciar entre pacientes que asisten y no asisten a la cita.
Este resultado se explica por la naturaleza de las variables incluidas en el modelo, las cuales corresponden principalmente a características demográficas y administrativas (edad, sexo, tipo de paciente e intención). Estas variables no capturan de manera suficiente los factores determinantes del comportamiento de asistencia, como barreras de acceso, condiciones socioeconómicas, historial de inasistencia o aspectos operativos del servicio.
En consecuencia, el modelo no logra establecer patrones consistentes que permitan una adecuada clasificación de los pacientes, lo que se refleja en un desempeño similar al azar.
Por esta razón, el AUC no se utilizó como métrica principal de evaluación en el análisis de predicción de demanda, priorizándose el RMSE, el cual permite cuantificar el error promedio en la estimación del número de pacientes y ofrece una interpretación más útil desde la perspectiva de gestión operativa y planificación de servicios.
El propósito final del modelado predictivo no es únicamente generar estimaciones estadísticas, sino transformar los datos operativos en información útil para apoyar la toma de decisiones. En el contexto de la atención oncológica, la predicción de la demanda asistencial puede contribuir a optimizar la programación de agendas, mejorar la asignación de recursos y reducir riesgos asociados al desabastecimiento de insumos críticos.
El modelo desarrollado permitió explorar la relación entre el comportamiento temporal de la demanda y el volumen de pacientes que asistieron a tratamiento de quimioterapia. Los resultados mostraron una ligera tendencia descendente en el número de pacientes atendidos a lo largo del periodo analizado; sin embargo, dicha relación no fue estadísticamente significativa y explicó una proporción reducida de la variabilidad observada.
Adicionalmente, el modelo presentó errores similares en los conjuntos de entrenamiento y prueba (RMSE = 15,37 y 12,79 pacientes, respectivamente), lo que evidencia una adecuada capacidad de generalización y ausencia de sobreajuste. No obstante, el bajo poder explicativo obtenido indica que el comportamiento de la demanda depende de múltiples factores clínicos y administrativos que no fueron incorporados en esta primera aproximación.
Desde una perspectiva de gestión, los hallazgos sugieren que el tiempo por sí solo no constituye un predictor suficiente para anticipar con precisión el volumen de pacientes atendidos, siendo necesario incorporar variables adicionales relacionadas con diagnósticos oncológicos, esquemas terapéuticos, programación de ciclos y características de la población atendida.
Fortalecimiento de variables predictoras
Se recomienda incorporar variables clínicas y operativas adicionales al modelo, tales como diagnóstico oncológico, intención terapéutica, tipo de paciente (nuevo o control), especialidad tratante y medicamentos programados. La inclusión de estos factores permitiría capturar una mayor proporción de la variabilidad observada en la demanda asistencial y mejorar la precisión de las proyecciones utilizadas para la planeación de recursos.
Implementación progresiva de modelos predictivos avanzados
Como etapa futura, se recomienda evaluar metodologías de aprendizaje automático, como Random Forest o Gradient Boosting, que permiten modelar relaciones complejas entre múltiples variables sin requerir estrictamente los supuestos de la regresión lineal. Estos enfoques podrían incrementar la capacidad predictiva del sistema y fortalecer los procesos de planificación de agendas, gestión de medicamentos y asignación de recursos humanos en el servicio de oncología.
El presente análisis permitió aplicar herramientas de exploración analítica, estadística inferencial y modelado predictivo sobre la información operativa de pacientes programados para quimioterapia, con el propósito de identificar patrones de comportamiento asistencial y evaluar su utilidad para la gestión de recursos en el servicio de oncología.
Los resultados evidenciaron que el volumen de pacientes atendidos presenta una variabilidad importante entre las fechas analizadas y que la variable temporal, por sí sola, posee una capacidad limitada para explicar dicho comportamiento. Aunque el modelo desarrollado mostró estabilidad al mantener niveles de error similares entre los conjuntos de entrenamiento y prueba, su capacidad predictiva puede fortalecerse mediante la incorporación de variables clínicas, administrativas y operativas que permitan representar de manera más integral la dinámica de la atención oncológica.
Desde una perspectiva gerencial, este ejercicio demuestra el valor estratégico de los datos institucionales como herramienta para apoyar la toma de decisiones basada en evidencia. La implementación progresiva de modelos analíticos más robustos puede contribuir a optimizar la programación asistencial, mejorar la planeación de recursos humanos y tecnológicos, fortalecer la gestión de medicamentos e insumos críticos y, en última instancia, favorecer una atención más eficiente, segura y centrada en las necesidades de los pacientes.