¿Cómo influyen la disponibilidad de camas, la demanda de pacientes y la moral del personal sobre la satisfacción del paciente y el rechazo de pacientes en los servicios hospitalarios?
datos <- read.csv("services_weekly.csv")
str(datos)
## 'data.frame': 208 obs. of 10 variables:
## $ week : int 1 1 1 1 2 2 2 2 3 3 ...
## $ month : int 1 1 1 1 1 1 1 1 1 1 ...
## $ service : chr "emergency" "surgery" "general_medicine" "ICU" ...
## $ available_beds : int 32 45 37 22 28 40 43 16 32 27 ...
## $ patients_request : int 76 130 201 31 169 26 183 7 177 66 ...
## $ patients_admitted : int 32 45 37 22 28 26 43 7 32 27 ...
## $ patients_refused : int 44 85 164 9 141 0 140 0 145 39 ...
## $ patient_satisfaction: int 67 83 97 84 75 96 73 79 73 63 ...
## $ staff_morale : int 70 78 43 91 64 56 93 85 58 72 ...
## $ event : chr "none" "flu" "flu" "flu" ...
summary(datos)
## week month service available_beds
## Min. : 1.00 Min. : 1.000 Length :208 Min. : 8.00
## 1st Qu.:13.75 1st Qu.: 4.000 N.unique : 4 1st Qu.:18.00
## Median :26.50 Median : 7.000 N.blank : 0 Median :27.50
## Mean :26.50 Mean : 6.923 Min.nchar: 3 Mean :30.35
## 3rd Qu.:39.25 3rd Qu.:10.000 Max.nchar: 16 3rd Qu.:40.00
## Max. :52.00 Max. :12.000 Max. :74.00
## patients_request patients_admitted patients_refused patient_satisfaction
## Min. : 5.00 Min. : 5.00 Min. : 0.00 Min. :60
## 1st Qu.: 23.75 1st Qu.:16.00 1st Qu.: 0.00 1st Qu.:70
## Median : 49.00 Median :26.00 Median : 13.50 Median :81
## Mean : 64.87 Mean :28.13 Mean : 36.74 Mean :80
## 3rd Qu.: 86.00 3rd Qu.:37.00 3rd Qu.: 52.50 3rd Qu.:89
## Max. :388.00 Max. :74.00 Max. :363.00 Max. :99
## staff_morale event
## Min. :31.00 Length :208
## 1st Qu.:60.00 N.unique : 4
## Median :73.00 N.blank : 0
## Mean :72.57 Min.nchar: 3
## 3rd Qu.:86.00 Max.nchar: 8
## Max. :99.00
colSums(is.na(datos))
## week month service
## 0 0 0
## available_beds patients_request patients_admitted
## 0 0 0
## patients_refused patient_satisfaction staff_morale
## 0 0 0
## event
## 0
El conjunto de datos corresponde a un periodo de un año completo, comprendido entre la semana 1 y la 52, así como entre el mes 1 y el 12. Se dispone de 208 registros, distribuidos de forma equitativa en 4 servicios hospitalarios únicos 52 semanas por servicio. Esta estructura confirma que se llevó a cabo un seguimiento continuo y homogéneo de cada servicio durante todo el año de estudio.
El hospital objeto de análisis presenta un cuello de botella de carácter estructural. Su infraestructura, con un promedio aproximado de 30 camas, está dimensionada para atender solo la mitad de la demanda promedio que recibe, la cual asciende a cerca de 65 solicitudes. Ante esta insuficiencia de recursos, el personal logra mantener niveles adecuados de satisfacción por parte de los pacientes, aunque ello se produce a expensas de su propia motivación y bienestar, que pueden descender hasta niveles críticos con un puntaje de 31 sobre 100 durante los periodos de mayor saturación.
library(ggplot2)
ggplot(datos,aes(patient_satisfaction))+geom_histogram(bins=20)
El histograma evidencia que no existen observaciones por debajo de 59-60 puntos ni por encima de 100. Esto confirma que la escala de medición está acotada en ese rango y que, aun en las semanas de mayor complejidad asistencial, como los brotes epidemiológicos, el hospital no registra niveles de insatisfacción crítica menores a 50 puntos. El histograma evidencia que la satisfacción de los pacientes en este centro hospitalario no constituye un valor constante ni predecible, sino que se manifiesta en tres escenarios operativos diferenciados: las semanas de crisis operativa, con puntuaciones aproximadas de 64 puntos, períodos recurrentes en los que la experiencia del usuario se ve afectada negativamente y que coinciden con los picos de rechazo de atención identificados en análisis previos; las semanas de operación normal, con puntuaciones cercanas a los 82 puntos, correspondientes al escenario más frecuente, donde los procesos se desarrollan conforme a lo establecido; y las semanas de alta eficiencia, con puntuaciones de alrededor de 95 puntos, momentos en los que la capacidad instalada supera adecuadamente la demanda de servicios.
ggplot(datos,aes(staff_morale,patient_satisfaction))+geom_point()+geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'
El análisis estadístico del gráfico correspondiente revela, en primer lugar, la ausencia de correlación lineal entre la moral del personal y la satisfacción de los pacientes: la línea de tendencia se mantiene horizontal con una pendiente cercana a cero, estabilizada en el valor de 80 puntos, coincidente con la media general observada en análisis previos, lo que confirma que variaciones en la motivación del equipo, tanto incrementos hasta 90 puntos como descensos a niveles críticos de 40 o 50 puntos, no se traducen en cambios proporcionales o sistemáticos en la percepción del usuario. En segundo lugar, se evidencia una alta dispersión de los datos, distribuidos de forma homogénea en todo el plano, lo que permite observar situaciones donde una moral muy baja coincide con niveles de satisfacción casi óptimos y, a la inversa, períodos con el personal altamente motivado en los que la calificación de los pacientes desciende hasta valores mínimos. Asimismo, el intervalo de confianza, representado por la banda gris, se ensancha considerablemente en los valores más bajos de motivación, debido a la escasez de registros en ese rango, lo que genera mayor incertidumbre estadística. Desde el punto de vista operativo, este comportamiento confirma la hipótesis del efecto de sobreesfuerzo profesional: el personal mantiene los estándares habituales de atención pese a condiciones laborales adversas, lo que puede generar una falsa sensación de estabilidad si solo se monitorea la satisfacción del paciente, ocultando el desgaste progresivo y el riesgo de agotamiento del equipo de trabajo.
datos |>
group_by(service) |>
summarise(across(c(available_beds,patients_request,patients_admitted,
patients_refused,patient_satisfaction,staff_morale),
list(media=mean,sd=sd)))
## # A tibble: 4 × 13
## service available_beds_media available_beds_sd patients_request_media
## <chr> <dbl> <dbl> <dbl>
## 1 ICU 14.8 4.19 15.2
## 2 emergency 22.8 5.91 119.
## 3 general_medicine 46.2 12.3 82.1
## 4 surgery 37.5 10.9 43.1
## # ℹ 9 more variables: patients_request_sd <dbl>, patients_admitted_media <dbl>,
## # patients_admitted_sd <dbl>, patients_refused_media <dbl>,
## # patients_refused_sd <dbl>, patient_satisfaction_media <dbl>,
## # patient_satisfaction_sd <dbl>, staff_morale_media <dbl>,
## # staff_morale_sd <dbl>
El análisis de los resultados desagregados por servicio permite comparar el comportamiento y la presión operativa de cada área asistencial: Urgencias se identifica como el punto crítico de mayor saturación, ya que cuenta con una disponibilidad media de solo 22,8 camas frente a una demanda promedio de 119 pacientes semanales, es decir, recibe más de cinco veces la capacidad que puede albergar, lo que explica la mayor parte de los rechazos de atención registrados en análisis anteriores; Medicina General es el área con mayor infraestructura, con un promedio de 46,2 camas, aunque presenta la mayor variabilidad operativa con una desviación estándar de 12,3 camas, lo que sugiere reasignaciones frecuentes de su espacio y una demanda elevada de 82,1 solicitudes semanales; la Unidad de Cuidados Intensivos se caracteriza por ser el servicio más estable y controlado, con una media de 14,8 camas, una variación reducida de 4,19 y un volumen de ingresos de 15,2 pacientes semanales, cifra muy cercana a su capacidad, lo que denota un flujo regulado y sin sobresaturación; finalmente, Cirugía opera en un nivel intermedio, con 37,5 camas disponibles y 43,1 solicitudes promedio, donde la demanda supera ligeramente la oferta pero dentro de rangos manejables. En conjunto, este desglose revela que los promedios globales ocultaban la situación real: el hospital no presenta un colapso generalizado, sino una presión asimétrica concentrada en Urgencias, mientras que los demás servicios mantienen un equilibrio aceptable.
modelo1 <- lm(patient_satisfaction~available_beds+patients_request+
patients_admitted+patients_refused+staff_morale+service,data=datos)
summary(modelo1)
##
## Call:
## lm(formula = patient_satisfaction ~ available_beds + patients_request +
## patients_admitted + patients_refused + staff_morale + service,
## data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.8178 -9.2391 0.5205 8.5212 21.8805
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 76.11880 4.55533 16.710 <2e-16 ***
## available_beds 0.17975 0.18322 0.981 0.328
## patients_request 0.00847 0.01963 0.431 0.667
## patients_admitted -0.20664 0.20313 -1.017 0.310
## patients_refused NA NA NA NA
## staff_morale 0.01862 0.05179 0.360 0.720
## servicegeneral_medicine 4.01221 3.42605 1.171 0.243
## serviceICU 3.95266 2.88290 1.371 0.172
## servicesurgery 1.38856 3.12415 0.444 0.657
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.18 on 200 degrees of freedom
## Multiple R-squared: 0.02417, Adjusted R-squared: -0.009989
## F-statistic: 0.7075 on 7 and 200 DF, p-value: 0.6657
El objetivo del modelo consiste en predecir la satisfacción del paciente a partir de las distintas variables operativas del centro hospitalario como factores explicativos; no obstante, el análisis realizado permite concluir de manera clara y contundente que dicho modelo no resulta válido, ya que ninguna de las variables evaluadas presenta un impacto estadísticamente significativo sobre el indicador de satisfacción. Al revisar los valores de probabilidad asociados, se observa que ninguno cumple con el umbral de significancia habitual de 0,05: la moral del personal registra un valor de 0,720, la disponibilidad de camas alcanza 0,328 y las variables correspondientes a los servicios médicos presentan también cifras muy elevadas, lo que indica que las variaciones en estos factores se producen de forma aleatoria respecto a la satisfacción y no existe una relación demostrable entre ellos. Por otro lado, la capacidad predictiva del modelo es prácticamente nula: el coeficiente de determinación múltiple alcanza solo el 2,41%, lo que significa que las variables incluidas explican únicamente esa proporción de la variabilidad observada, mientras que el 97,5% restante responde a factores no contemplados en la base de datos; además, el coeficiente ajustado adopta un valor negativo de -0,009989, lo que confirma que los indicadores incorporados aportan información irrelevante o solo ruido estadístico. Finalmente, la prueba de significancia global arroja un valor de probabilidad de 0,6657, muy superior al límite establecido, por lo que se acepta la hipótesis nula: el modelo en su conjunto no ofrece una predicción más fiable que utilizar simplemente el promedio general de satisfacción, fijado en 76,11 puntos.
par(mfrow=c(2,2))
plot(modelo1)
bptest(modelo1)
##
## studentized Breusch-Pagan test
##
## data: modelo1
## BP = 6.8411, df = 7, p-value = 0.4456
shapiro.test(residuals(modelo1))
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo1)
## W = 0.96714, p-value = 9.067e-05
El supuesto de homocedasticidad requiere que los errores presenten una variabilidad constante a lo largo de todas las predicciones; su cumplimiento se confirma tanto mediante el análisis gráfico como mediante la prueba estadística de Breusch-Pagan, que arroja un valor p de 0,4456, cifra superior al umbral de significancia de 0,05, por lo que no se rechaza la hipótesis nula y se concluye que la variabilidad de los residuos es constante. Por otro lado, el supuesto de normalidad de los errores no se satisface: aunque en el diagrama Q-Q los puntos se alinean adecuadamente en la zona central, se observan desviaciones en los extremos, lo que sugiere una distribución con colas más anchas; este hallazgo se confirma con la prueba de Shapiro-Wilk, que registra un valor p de 9,067e-05 el cual es inferior a 0,05, motivo por el cual se rechaza la hipótesis de normalidad. Finalmente, el análisis de puntos influyentes y atípicos, realizado a través del gráfico de residuos frente a apalancamiento, revela que no existen observaciones con capacidad suficiente para distorsionar los resultados, ya que ninguna se aproxima a los límites críticos de la distancia de Cook y, aunque algunas se ubican en valores más altos de apalancamiento, no combinan esta condición con errores significativos, por lo que se confirma la estabilidad estructural del modelo.
modelo2 <- glm(patients_refused~available_beds+patients_request+
staff_morale+service,family=poisson,data=datos)
summary(modelo2)
##
## Call:
## glm(formula = patients_refused ~ available_beds + patients_request +
## staff_morale + service, family = poisson, data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.5277381 0.0675576 52.218 < 2e-16 ***
## available_beds -0.0080541 0.0014438 -5.578 2.43e-08 ***
## patients_request 0.0079010 0.0001254 63.012 < 2e-16 ***
## staff_morale 0.0011651 0.0008263 1.410 0.159
## servicegeneral_medicine -0.3597252 0.0466934 -7.704 1.32e-14 ***
## serviceICU -2.6149941 0.0877853 -29.789 < 2e-16 ***
## servicesurgery -1.3020773 0.0531446 -24.501 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 13313.9 on 207 degrees of freedom
## Residual deviance: 2465.6 on 201 degrees of freedom
## AIC: 3230.5
##
## Number of Fisher Scoring iterations: 6
AIC(modelo1,modelo2)
## df AIC
## modelo1 9 1604.433
## modelo2 7 3230.520
Se modificó la variable dependiente por el número de pacientes rechazados, indicador que corresponde a datos de conteo y justifica la aplicación de la distribución de Poisson; asimismo, se eliminó la variable redundante de pacientes ingresados para subsanar totalmente el problema de multicolinealidad. A diferencia del modelo anterior, este presenta resultados altamente satisfactorios y aporta hallazgos estadísticos relevantes y significativos. Al analizar la significancia de los predictores, se observa que la mayoría de las variables registran valores de probabilidad inferiores al umbral de referencia, lo que las sitúa en un nivel de confianza superior al 99,9 %: la disponibilidad de camas muestra un coeficiente negativo de -0,00805, lo que indica que un mayor número de camas disponibles reduce significativamente el volumen de rechazos; por el contrario, el volumen de solicitudes de ingreso presenta un coeficiente positivo de 0,00790, confirmando que a mayor demanda, mayor es la cantidad de pacientes que no pueden ser atendidos.En cambio, la variable correspondiente a la moral del personal obtiene un valor de probabilidad de 0,159, por encima del límite establecido, lo que demuestra que este factor no influye en los rechazos, siendo este un asunto asociado exclusivamente a la capacidad física y la infraestructura del centro y no a la motivación o actitud del equipo de trabajo. Finalmente, al evaluar el ajuste global mediante la devianza, se observa que esta se reduce desde un valor nulo de 13313,9 hasta un valor residual de 2465,6, lo que representa una explicación del 81,5 % de la variabilidad original y confirma que las variables seleccionadas describen adecuadamente el comportamiento de los rechazos
set.seed(123)
id <- createDataPartition(datos$patient_satisfaction, p = 0.7, list = FALSE)
train_data <- datos[id, ]
test_data <- datos[-id, ]
fit_lineal <- lm(patient_satisfaction ~ available_beds + patients_request +
patients_admitted + staff_morale + service,
data = train_data)
pred_lineal <- predict(fit_lineal, newdata = test_data)
metricas_m1 <- postResample(pred_lineal, test_data$patient_satisfaction)
print(metricas_m1)
## RMSE Rsquared MAE
## 11.01975020 0.03478303 9.26460906
fit_poisson <- glm(patients_refused ~ available_beds + patients_request +
staff_morale + service,
family = poisson, data = train_data)
pred_poisson <- predict(fit_poisson, newdata = test_data, type = "response")
metricas_m2 <- postResample(pred_poisson, test_data$patients_refused)
print(metricas_m2)
## RMSE Rsquared MAE
## 21.079523 0.893759 14.655469
El desarrollo realizado siguió una secuencia metodológica adecuada: se partió de la hipótesis inicial sobre la influencia de la gestión en la satisfacción, la cual fue descartada por los datos, al mostrar que el comportamiento profesional del personal atenúa su efecto; se identificó y corrigió el problema de multicolinealidad exacta presente en las variables, y se reorientó el estudio hacia la variable más relevante para la institución: el volumen de pacientes rechazados. Los hallazgos obtenidos permiten a la dirección del hospital utilizar el Modelo 2 con total confianza para realizar simulaciones y proyecciones, por ejemplo, estimando con un nivel de acierto cercano al 89,4% el número de camas adicionales necesarias ante aumentos de la demanda para evitar incrementos desmedidos en el rechazo de atención.