Los tiempos de espera en la atención ambulatoria constituyen un problema relevante en los servicios de salud, ya que afectan la oportunidad de la atención, la satisfacción del paciente y la eficiencia operativa. Demoras prolongadas pueden generar congestión, percepción negativa de la calidad y dificultades en la gestión de agendas médicas.
En una población de pacientes que asisten a citas médicas ambulatorias, se observa variabilidad en el tiempo de espera una vez el paciente llega al servicio. Sin embargo, no se tiene claridad sobre el papel que desempeñan factores operativos de la programación de la cita, como el periodo del día y el día de la semana, en dicha variabilidad.
Pregunta de investigación:
¿Qué factores asociados a la programación de la cita (periodo del día y
día de la semana) se relacionan con el tiempo de espera de los pacientes
que asisten a su cita médica?
appointments <- readRDS(“appointments.rds”) ## 4. Carga de datos y preparación
Nota: Este documento asume que ya tienes el objeto
appointmentscargado en el Environment.
Si no lo tienes, descomenta la línearead_csv()y ajusta el nombre/ruta del archivo.
## [1] 111488 20
## [1] "appointment_id" "slot_id" "scheduling_date"
## [4] "appointment_date" "appointment_time" "scheduling_interval"
## [7] "status" "check_in_time" "appointment_duration"
## [10] "start_time" "end_time" "waiting_time"
## [13] "patient_id" "sex" "age"
## [16] "age_group" "age_decade" "weekday"
## [19] "hour" "time_period"
## 'data.frame': 111488 obs. of 20 variables:
## $ appointment_id : int 138 146 21 233 90 180 197 191 135 130 ...
## $ slot_id : int 1 23 24 25 26 27 28 29 30 22 ...
## $ scheduling_date : Date, format: "2014-12-28" "2014-12-29" ...
## $ appointment_date : Date, format: "2015-01-01" "2015-01-01" ...
## $ appointment_time : chr "8:00:00" "13:30:00" "13:45:00" "14:00:00" ...
## $ scheduling_interval : int 4 3 15 1 6 2 2 2 4 4 ...
## $ status : Factor w/ 5 levels "attended","cancelled",..: 3 3 1 1 2 1 1 1 2 1 ...
## $ check_in_time : chr "" "" "13:36:45" "13:59:32" ...
## $ appointment_duration: num NA NA 5.2 28.9 NA 7.7 4.2 27.1 NA 1.2 ...
## $ start_time : chr "" "" "13:37:57" "14:00:40" ...
## $ end_time : chr "" "" "13:43:09" "14:29:34" ...
## $ waiting_time : num NA NA 1.2 1.1 NA 21.7 16.2 1 NA 8.5 ...
## $ patient_id : int 8285 5972 6472 5376 8028 4317 7638 7061 2475 4217 ...
## $ sex : Factor w/ 2 levels "Female","Male": 2 2 2 1 2 1 2 2 1 1 ...
## $ age : int 37 84 77 37 72 51 28 33 29 90 ...
## $ age_group : Factor w/ 16 levels "15-19","20-24",..: 5 14 13 5 12 8 3 4 3 16 ...
## $ age_decade : num 30 80 70 30 70 50 20 30 20 90 ...
## $ weekday : Factor w/ 5 levels "jueves","lunes",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ hour : num NA 13 13 14 14 14 14 15 15 13 ...
## $ time_period : Factor w/ 3 levels "morning","afternoon",..: 3 2 2 2 2 2 2 2 2 2 ...
## [1] 86032 20
##
## morning afternoon other
## 17184 51644 17204
##
## jueves lunes martes miércoles viernes
## 17179 17231 17155 17193 17274
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.60 12.60 33.50 44.09 64.60 297.30
Se describe el comportamiento del tiempo de espera mediante medidas de tendencia central y dispersión robusta, complementadas con visualizaciones.
## n media mediana IQR
## 1 86032 44.08651 33.5 52
Se identifican valores extremos usando la regla 1.5 × IQR. Los outliers no se eliminan del modelado; se excluyen únicamente en una visualización para facilitar la lectura del comportamiento central.
## outliers_n outliers_pct limite_inferior limite_superior
## 1 2538 2.950065 -65.4 142.6
Para responder la pregunta de investigación se ajustan dos modelos de regresión lineal:
waiting_time ~ time_periodwaiting_time ~ time_period + weekdayLa comparación se realiza con R², ANOVA entre modelos anidados, y validación predictiva sencilla (train/test) con RMSE y MAE.
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.127 0.127 38.1 6266. 0 2 -435265. 870539. 870576.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
## # A tibble: 3 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 34.5 0.291 119. 0
## 2 time_periodafternoon 20.9 0.336 62.2 0
## 3 time_periodother -14.6 0.411 -35.5 4.34e-274
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.128 0.128 38.1 2102. 0 6 -435231. 870478. 870553.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
## # A tibble: 7 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 35.2 0.390 90.3 0
## 2 time_periodafternoon 20.9 0.335 62.2 0
## 3 time_periodother -14.6 0.411 -35.5 3.06e-274
## 4 weekdaylunes 0.119 0.411 0.290 7.72e- 1
## 5 weekdaymartes -0.442 0.411 -1.08 2.82e- 1
## 6 weekdaymiércoles -0.464 0.411 -1.13 2.59e- 1
## 7 weekdayviernes -2.82 0.410 -6.87 6.65e- 12
## Analysis of Variance Table
##
## Model 1: waiting_time ~ time_period
## Model 2: waiting_time ~ time_period + weekday
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 86029 124932525
## 2 86025 124832991 4 99534 17.148 4.561e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación (para sustentación):
En bases de datos grandes, la incorporación de una variable adicional
puede producir aumentos pequeños en R². Aun así, la prueba ANOVA evalúa
si la variable adicional mejora significativamente el ajuste. Un p-valor
pequeño respalda que el Modelo 2 es estadísticamente
superior al Modelo 1.
## # A tibble: 2 × 3
## modelo RMSE MAE
## <chr> <dbl> <dbl>
## 1 Modelo 1 38.0 28.9
## 2 Modelo 2 38.0 28.9
El gráfico muestra valores predichos (estimaciones
promedio del modelo) para cada combinación de time_period y
weekday, lo cual permite explorar el efecto conjunto de
ambas variables de forma interactiva.
El análisis evidenció que el periodo del día se asocia de forma relevante con el tiempo de espera: la tarde concentra mayores tiempos de espera promedio frente a la mañana. La inclusión del día de la semana en el Modelo 2 refina el análisis e incorpora variación adicional (moderada pero consistente).
Aunque la mejora en R² puede ser pequeña —algo esperable en bases de datos grandes y con muchos determinantes no observados—, la prueba ANOVA demuestra que el Modelo 2 mejora significativamente el ajuste respecto al Modelo 1. Adicionalmente, la validación predictiva simple (train/test) permite contrastar desempeño mediante RMSE/MAE, apoyando la evaluación de la capacidad predictiva.
En conjunto, estos resultados aportan evidencia cuantitativa para comprender la problemática de tiempos de espera y respaldan la toma de decisiones operativas para mejorar la organización de agendas médicas.