SOUTH WEST HEALTH CENTRE: IMPROVING PATIENT FLOW IN THE INTENSIVE CARE UNIT
Caso 2 - Procesos Estocasticos
Preguntas
1. Preprocesamiento de los datos: Análisis de los datos que se requiere previo a realizar el modelamiento.
a. Realice un gráfico que presente la cantidad promedio de personas que llegan al Hospital Universitario según cada día de la semana y cada una de las jornadas (Mañana 6:00 am – 12:00, Tarde 12:00 – 6:00 pm, Noche 6:00 pm a 12:00, Madrugada 12:00 a 6:00 am). Utilice el gráfico para decidir si es razonable asumir que la llegada de los pacientes tiene un comportamiento similar a lo largo de los días de la semana.
Para el caso del South West Health Center (SWHC) se analizo el arribo de pacientes todos los días de la semana en las jornadas que se manejan actualmente (madrugada, mañana tarde y noche). Con base en los datos suministrados, se realizan 3 gráficos que permiten observar el comportamiento de dichas llegadas a lo largo de la semana.
# Pacientes por jornada el Lunes
#Mañana
LunesMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="lunes")
ContarLM<-count(LunesMañana)
ContarLM
## n
## 1 29
#Tarde
LunesTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="lunes")
ContarLT<-count(LunesTarde)
ContarLT
## n
## 1 34
#Noche
LunesNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="lunes")
ContarLN<-count(LunesNoche)
ContarLN
## n
## 1 37
#Madrugada
LunesMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="lunes")
ContarLD<-count(LunesMadrugada)
ContarLD
## n
## 1 37
TotalLunes<-ContarLM+ContarLT+ContarLN+ContarLD
TotalLunes
## n
## 1 137
# Pacientes por jornada el martes
#Mañana
MartesMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="martes")
ContarMM<-count(MartesMañana)
ContarMM
## n
## 1 34
#Tarde
MartesTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="martes")
ContarMT<-count(MartesTarde)
ContarMT
## n
## 1 43
#Noche
MartesNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="martes")
ContarMN<-count(MartesNoche)
ContarMN
## n
## 1 42
#Madrugada
MartesMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="martes")
ContarMD<-count(MartesMadrugada)
ContarMD
## n
## 1 48
TotalMartes<-ContarMM+ContarMT+ContarMN+ContarMD
TotalMartes
## n
## 1 167
# Pacientes por jornada el Miercoles
#Mañana
MiercolesMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="miércoles")
ContarIM<-count(MiercolesMañana)
ContarIM
## n
## 1 44
#Tarde
MiercolesTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="miércoles")
ContarIT<-count(MiercolesTarde)
ContarIT
## n
## 1 40
#Noche
MiercolesNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="miércoles")
ContarIN<-count(MiercolesNoche)
ContarIN
## n
## 1 40
#Madrugada
MiercolesMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="miércoles")
ContarID<-count(MiercolesMadrugada)
ContarID
## n
## 1 43
TotalMiercoles<-ContarIM+ContarIT+ContarIN+ContarID
TotalMiercoles
## n
## 1 167
# Pacientes por jornada el jueves
#Mañana
JuevesMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="jueves")
ContarJM<-count(JuevesMañana)
ContarJM
## n
## 1 45
#Tarde
JuevesTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="jueves")
ContarJT<-count(JuevesTarde)
ContarJT
## n
## 1 39
#Noche
JuevesNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="jueves")
ContarJN<-count(JuevesNoche)
ContarJN
## n
## 1 44
#Madrugada
JuevesMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="jueves")
ContarJD<-count(JuevesMadrugada)
ContarJD
## n
## 1 35
TotalJueves<-ContarJM+ContarJT+ContarJN+ContarJD
TotalJueves
## n
## 1 163
# Pacientes por jornada el viernes
#Mañana
ViernesMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="viernes")
ContarVM<-count(ViernesMañana)
ContarVM
## n
## 1 42
#Tarde
ViernesTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="viernes")
ContarVT<-count(ViernesTarde)
ContarVT
## n
## 1 35
#Noche
ViernesNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="viernes")
ContarVN<-count(ViernesNoche)
ContarVN
## n
## 1 47
#Madrugada
ViernesMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="viernes")
ContarVD<-count(ViernesMadrugada)
ContarVD
## n
## 1 43
TotalViernes<- ContarVM+ContarVT+ContarVN+ContarVD
TotalViernes
## n
## 1 167
# Pacientes por jornada el sábado
#Mañana
SabadoMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="sábado")
ContarSM<-count(SabadoMañana)
ContarSM
## n
## 1 31
#Tarde
SabadoTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="sábado")
ContarST<-count(SabadoTarde)
ContarST
## n
## 1 30
#Noche
SabadoNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="sábado")
ContarSN<-count(SabadoNoche)
ContarSN
## n
## 1 27
#Madrugada
SabadoMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="sábado")
ContarSD<-count(SabadoMadrugada)
ContarSD
## n
## 1 41
TotalSabado<-ContarSM+ContarST+ContarSN+ContarSD
TotalSabado
## n
## 1 129
# Pacientes por jornada el Domingo
#Mañana
DomingoMañana <- Arribos %>% filter(Jornada=="Mañana",`Dia de la semana`=="domingo")
ContarDM<-count(DomingoMañana)
ContarDM
## n
## 1 41
#Tarde
DomingoTarde<- Arribos %>% filter(Jornada=="Tarde",`Dia de la semana`=="domingo")
ContarDT<-count(DomingoTarde)
ContarDT
## n
## 1 42
#Noche
DomingoNoche<- Arribos %>% filter(Jornada=="Noche",`Dia de la semana`=="domingo")
ContarDN<-count(DomingoNoche)
ContarDN
## n
## 1 42
#Madrugada
DomingoMadrugada<- Arribos %>% filter(Jornada=="Madrugada",`Dia de la semana`=="domingo")
ContarDD<-count(DomingoMadrugada)
ContarDD
## n
## 1 34
TotalDomingo <-ContarDM+ContarDT+ContarDN+ContarDD
TotalDomingo
## n
## 1 159
VectorDias <-c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")
VectorJornadas <-c("Madrugada", "Mañana", "Tarde","Noche")
MatrizDias<-matrix(c(ContarLD,ContarMD,ContarID,ContarJD,ContarVD,ContarSD,ContarDD,ContarLM,ContarMM,ContarIM,ContarJM,ContarVM,ContarSM,ContarDM,ContarLT,ContarMT,ContarIT,ContarJT,ContarVT,ContarST,ContarDT, ContarLN,ContarMN,ContarIN,ContarJN,ContarVN,ContarSN,ContarDN),byrow = TRUE,ncol = 7, nrow = 4)
colnames(MatrizDias)<-c(VectorDias)
rownames(MatrizDias)<-c(VectorJornadas)
MatrizDias
## Lunes Martes Miércoles Jueves Viernes Sábado Domingo
## Madrugada 37 48 43 35 43 41 34
## Mañana 29 34 44 45 42 31 41
## Tarde 34 43 40 39 35 30 42
## Noche 37 42 40 44 47 27 42
VectorM<- c(37,48,43,35,43,41,34)
VectorD<- c(29,34,44,45,42,31,41)
VectorT<-c(34,43,40,39,35,30,42)
VectorN<-c(37,42,40,44,47,27,42)
plot(VectorM,type = "o",col="deeppink",xlab = "Dias",ylab = "Pacientes",main = "Cantidad de pacientes que arriban",ylim = c(25,50),lwd=3)+lines(VectorD,type = "o",col="cadetblue",lwd=3)+lines(VectorT,type = "o",col="cornsilk4",lwd=3)+lines(VectorN,type = "o", col="maroon4",lwd=3)
## integer(0)
En la primer figura podemos observar la cantidad de pacientes que arriban al centro médico SWHC en las jornadas ya mencionada, allí se puede apreciar una diferencia entre cada jornada y día estudiado, por lo que inicialmente se podría asumir que la llegada de los pacientes no tiene un comportamiento similar a lo largo de los días de la semana. Esta situación la podemos ver desde otra perspectiva en la figura 3.
Figura 2. Cantidad Promedio De Pacientes
Por su parte, la figura 2 nos permite observar la cantidad promedio de pacientes que llegan al hospital discriminado, igualmente, por los días de la semana y las jornadas de trabajo. Se puede apreciar en esta ocasión que el promedio de pacientes que llega al centro médico oscila entre 3 y 4 pacientes para los días miércoles, jueves, viernes y domingo, en cada una de las jornadas mencionadas, mientras que los días lunes y sábado tienen un flujo promedio de entre 2 y 4 pacientes. Por su parte, el día martes tiene un flujo promedio de entre 2 y 5 personas en cada jornada. Comparando estos resultados, se podría asumir que la llegada de pacientes al hospital tiene un comportamiento similar a lo largo de los días de la semana, pues la diferencia entre un día y otro es, en promedio, de 1 o 2 pacientes por día.
Figura 3. Cantidad de pacientes que arriban
Finalmente, al considerar los resultados obtenidos en los distintos gráficos, podemos concluir que la llegada de pacientes no tiene un comportamiento similar a lo largo de la semana cuando se estudian las frecuencias de los arribos en cada jornada, sin embargo, al considerar el promedio de pacientes, podríamos asumir comportamientos similares con una desviación un poco más notoria en los días lunes y sábado.
Ahora bien, pueden existir factores externos que alteren este comportamiento, sin embargo estos no son constantes, es decir, ocurren aleatoriamente en situaciones específicas como lo puede ser un accidente de tráfico que ocasiona otros en serie o la aparición de nuevas enfermedades que afecten críticamente a la población.
b. Realice una prueba de bondad de ajuste para probar si los tiempos entre llegadas se pueden modelar como una distribución exponencial. Hint: al restar dos fechas en Excel, el resultado se presenta en fracciones de días.
##
## Begin fitting distributions ---------------------------------------
## * fitting normal distribution ... OK
## * fitting Cauchy distribution ... OK
## * fitting logistic distribution ... OK
## * fitting beta distribution ... failed
## * fitting exponential distribution ... OK
## * fitting chi-square distribution ... failed
## * fitting uniform distribution ... OK
## * fitting gamma distribution ... failed
## * fitting lognormal distribution ... failed
## * fitting Weibull distribution ... failed
## * fitting F-distribution ... failed
## * fitting Student's t-distribution ... OK
## * fitting Gompertz distribution ... OK
## * fitting triangular distribution ... failed
## End fitting distributions -----------------------------------------
## logL AIC BIC Chisq(value) Chisq(p) AD(value) H(AD)
## Normal -315.07 634.14 644.13 706.65 0.00 46.03 rejected
## Cauchy -314.15 632.3 642.29 638.96 0.00 58.53 rejected
## Logistic -260.22 524.45 534.43 615.63 0.00 33.18 rejected
## Exponential 103.11 -204.22 -199.22 43.66 0.02 Inf rejected
## Uniform NULL NULL NULL Inf 0.00 Inf NULL
## Student -1119.71 2241.43 2246.42 2895.67 0.00 266.09 NULL
## Gompertz 103.88 -203.75 -193.76 42.69 0.02 Inf NULL
## KS(value) H(KS)
## Normal 0.15 rejected
## Cauchy 0.20 rejected
## Logistic 0.15 rejected
## Exponential 0.02 not rejected
## Uniform 0.20 rejected
## Student 0.50 rejected
## Gompertz 0.02 not rejected
##
## Chosen continuous distribution is: Exponential (exp)
## Fitted parameters are:
## rate
## 2.987975
## Goodness-of-fit statistics
## 1-mle-exp
## Kolmogorov-Smirnov statistic 0.01611993
## Cramer-von Mises statistic 0.06087069
## Anderson-Darling statistic Inf
##
## Goodness-of-fit criteria
## 1-mle-exp
## Akaike's Information Criterion -204.2188
## Bayesian Information Criterion -199.2249
A partir de los datos proporcionados para el año 2014, se realizó una prueba de bondad de ajuste para determinar si los tiempos entre llegadas se pueden modelar como una distribución exponencial.
H0: Los tiempos entre llegadas siguen una distribución exponencial.
H1: Los tiempos entre llegadas no siguen una distribución exponencial.
Con base en los resultados obtenidos por medio de las pruebas Kolmogorov-Smirnov, Cramer von Mises y Anderson Darling, cuyos valores p fueron en su mayoría menores a una significancia del 5%, no es posible asumir con una confianza del 95% que estos tiempos se distribuyan exponencialmente, no obstante, al graficar los datos registrados podemos observar que estos tienen un buen ajuste con la distribución mencionada por lo que se termina aceptando la hipótesis nula, ergo es posible modelar el comportamiento de los tiempos entre arribos con la distribución exponencial como lo indica p-value de la prueba de Cramer.
c. Realice una prueba de bondad de ajuste para probar si los tiempos de servicio se pueden modelar como una distribución exponencial.
#Tiempos de servicio para MSICU(icu)
fit.cont(Icu$TiempoServicio)
##
## Begin fitting distributions ---------------------------------------
## * fitting normal distribution ... OK
## * fitting Cauchy distribution ... OK
## * fitting logistic distribution ... OK
## * fitting beta distribution ... failed
## * fitting exponential distribution ... OK
## * fitting chi-square distribution ... OK
## * fitting uniform distribution ... OK
## * fitting gamma distribution ... OK
## * fitting lognormal distribution ... OK
## * fitting Weibull distribution ... OK
## * fitting F-distribution ... OK
## * fitting Student's t-distribution ... OK
## * fitting Gompertz distribution ... OK
## * fitting triangular distribution ... failed
## End fitting distributions -----------------------------------------
## logL AIC BIC Chisq(value) Chisq(p) AD(value)
## Normal -3551.21 7106.42 7116.4 841.48 0.00 54.74
## Cauchy -3468.35 6940.7 6950.69 547.13 0.00 54.92
## Logistic -3463.18 6930.36 6940.34 696.89 0.00 36.71
## Exponential -3087.32 6176.63 6181.63 16.13 0.95 0.48
## Chi-square -3513.27 7028.53 7033.53 5052.44 0.00 120.30
## Uniform NULL NULL NULL Inf 0.00 Inf
## Gamma -3087.16 6178.32 6188.31 16.04 0.94 0.53
## Lognormal -3162.81 6329.62 6339.61 104.20 0.00 10.16
## Weibull -3087.28 6178.56 6188.55 16.15 0.93 0.50
## F -3473.75 6951.5 6961.49 779.68 0.00 168.49
## Student -4299.42 8600.84 8605.83 3032.66 0.00 769.37
## Gompertz -3087.44 6178.88 6188.87 16.44 0.92 0.54
## H(AD) KS(value) H(KS)
## Normal rejected 0.16 rejected
## Cauchy rejected 0.19 rejected
## Logistic rejected 0.16 rejected
## Exponential not rejected 0.02 not rejected
## Chi-square NULL 0.15 rejected
## Uniform NULL 0.21 rejected
## Gamma not rejected 0.02 not rejected
## Lognormal rejected 0.08 rejected
## Weibull not rejected 0.02 not rejected
## F NULL 0.29 rejected
## Student NULL 0.57 rejected
## Gompertz NULL 0.02 not rejected
##
## Chosen continuous distribution is: Exponential (exp)
## Fitted parameters are:
## rate
## 0.1600291
pruebabondadICU<-fitdist(Icu$TiempoServicio,"exp")
gofstat(pruebabondadICU)
## Goodness-of-fit statistics
## 1-mle-exp
## Kolmogorov-Smirnov statistic 0.02135524
## Cramer-von Mises statistic 0.07509211
## Anderson-Darling statistic 0.48477555
##
## Goodness-of-fit criteria
## 1-mle-exp
## Akaike's Information Criterion 6176.631
## Bayesian Information Criterion 6181.625
plot(pruebabondadICU,demp=TRUE)
#Tiempos de servicio Ward
fit.cont(Ward$TiempoServicio)
##
## Begin fitting distributions ---------------------------------------
## * fitting normal distribution ... OK
## * fitting Cauchy distribution ... OK
## * fitting logistic distribution ... OK
## * fitting beta distribution ... failed
## * fitting exponential distribution ... OK
## * fitting chi-square distribution ... OK
## * fitting uniform distribution ... OK
## * fitting gamma distribution ... OK
## * fitting lognormal distribution ... OK
## * fitting Weibull distribution ... OK
## * fitting F-distribution ... OK
## * fitting Student's t-distribution ... OK
## * fitting Gompertz distribution ... failed
## * fitting triangular distribution ... failed
## End fitting distributions -----------------------------------------
## logL AIC BIC Chisq(value) Chisq(p) AD(value)
## Normal -1099.15 2202.3 2210.06 203.06 0.00 17.84
## Cauchy -1064.83 2133.65 2141.41 162.23 0.00 16.52
## Logistic -1065.34 2134.69 2142.45 163.53 0.00 11.51
## Exponential -940.26 1882.53 1886.41 21.18 0.17 0.41
## Chi-square -1040.59 2083.19 2087.07 363.04 0.00 28.31
## Uniform NULL NULL NULL Inf 0.00 Inf
## Gamma -939.95 1883.89 1891.66 20.90 0.14 0.37
## Lognormal -981.18 1966.36 1974.12 72.45 0.00 6.19
## Weibull -940.02 1884.04 1891.8 21.15 0.13 0.38
## F -1051.38 2106.76 2114.52 249.61 0.00 49.14
## Student -1312.8 2627.59 2631.47 928.45 0.00 238.67
## H(AD) KS(value) H(KS)
## Normal rejected 0.17 rejected
## Cauchy rejected 0.19 rejected
## Logistic rejected 0.16 rejected
## Exponential not rejected 0.03 not rejected
## Chi-square NULL 0.14 rejected
## Uniform NULL 0.22 rejected
## Gamma NA 0.04 not rejected
## Lognormal rejected 0.11 rejected
## Weibull not rejected 0.04 not rejected
## F NULL 0.29 rejected
## Student NULL 0.53 rejected
##
## Chosen continuous distribution is: Exponential (exp)
## Fitted parameters are:
## rate
## 0.1966292
pruebabondadWard<-fitdist(Ward$TiempoServicio,"exp")
gofstat(pruebabondadWard)
## Goodness-of-fit statistics
## 1-mle-exp
## Kolmogorov-Smirnov statistic 0.03382901
## Cramer-von Mises statistic 0.06315013
## Anderson-Darling statistic 0.40622164
##
## Goodness-of-fit criteria
## 1-mle-exp
## Akaike's Information Criterion 1882.528
## Bayesian Information Criterion 1886.408
plot(pruebabondadWard,demp=TRUE)
A partir de los datos proporcionados para el año 2014, se realizó una prueba de bondad de ajuste para determinar si los tiempos de servicio en la Unidad de Cuidados Intensivos (UCI) y en la zona denominada Ward, se pueden modelar por medio de una distribución exponencial.
H0: Los tiempos de servicio siguen una distribución exponencial.
H1: Los tiempos de servicio no siguen una distribución exponencial.
Podemos observar en los resultados obtenidos por medio de las pruebas Kolmogorov-Smirnov, Cramer von Mises y Anderson Darling, cuyos valores de p fueron en su mayoría mayores a una significancia del 5%, que es posible asumir con una confianza del 95% que estos tiempos se distribuyen exponencialmente. Igualmente, al graficar los datos registrados podemos observar que estos tienen un buen ajuste con la distribución mencionada por lo que finalmente, no se rechaza la hipótesis nula y se concluye que los tiempos de servicio para ambas zonas del hospital se distribuyen de manera exponencial
2. Modele este sistema como una red de Jackson.
a. Realice el diagrama de nodos.
A continuación se presenta el diagrama de nodos para la red de Jackson modelada para el flujo de pacientes del hospital. En ella podemos ver 5 posibles estados, sin embargo la red se modelará con las estaciones “ICU” y “Ward”, pues son las que realmente ofrecen un servicio para los pacientes.
probabilidadesTransicion<- matrix(c(0,0.27,0.21,0.52,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),byrow = TRUE,ncol = 5, nrow = 5)
Estaciones<-c('ICU','WARD','MUERTE','TRANSFERENCIA','SALIDA')
colnames(probabilidadesTransicion)<-c(Estaciones)
row.names(probabilidadesTransicion)<-c(Estaciones)
probabilidadesTransicion
## ICU WARD MUERTE TRANSFERENCIA SALIDA
## ICU 0 0.27 0.21 0.52 0
## WARD 0 0.00 0.00 0.00 1
## MUERTE 0 0.00 0.00 0.00 0
## TRANSFERENCIA 0 0.00 0.00 0.00 0
## SALIDA 0 0.00 0.00 0.00 0
plotmat(round(probabilidadesTransicion, 3) , pos = c(1,3,1), lwd = 0.9, box.lwd = -0.7, cex.txt = 0.6, box.size = 0.07, box.type = "circle", box.prop = -0.5, box.col = "seagreen3", arr.length = -0.2, arr.width = 0.2, self.cex = -1.5, self.shifty = -0.05, self.shiftx = 0.13, main = "Transition Diagram")
b. Explique detalladamente si considera conveniente modelar esta situación como una Red de Jackson explicando si se cumplen los supuestos requeridos.
Para determinar si el sistema estudiado puede ser modelado como una red de Jackson, se listan a continuación los supuestos y condiciones bajo los cuales se trabajará en el sistema.
Siendo \(X_i(t):\) “Número de pacientes en la estación i en el instante t.”
Como se mencionó anteriormente, los tiempos entre arribos al hospital se pueden modelar por medio de una distribución exponencial, por lo tanto el tiempo que le quede al sistema en un estado determinado no dependerá de cuánto tiempo ha estado en él, pues al distribuirse exponencialmente, se cumple la propiedad de pérdida de memoria.
Asimismo, anteriormente se discutió si la llegada de pacientes al hospital podía tener un comportamiento similar a lo largo de los días de la semana, cuyo resultado fue favorable, por tanto, el supuesto de estacionariedad se cumple.
El sistema estudiado cuenta con 2 estaciones de servicio “ICU” y “Ward” y cada una de las cuales cuenta con su propia cola de capacidad infinita, pues los pacientes pueden esperar en otros pabellones o incluso en los pasillos para ser atendidos en la estación que requieran. *Los tiempos de servicio para ambas estaciones siguen una distribución exponencial tal y como se demostró anteriormente.
Como se mostró en el punto inmediatamente anterior, los pacientes llegan al hospital para ser atendidos en la zona de “ICU” y de allí tienen 3 posibilidades para transicionar, de las cuales 2 hacen referencia a salir del sistema y 1 a pasar a la zona “Ward”.
Como los supuestos y condiciones anteriormente descritas se cumplen, es posible modelar el sistema planteado \(X_i(t)\) como una red de jackson con 2 estaciones.
c. Obtenga los indicadores de desempeño de cada nodo.
Con el fin de obtener los \(λ_{i}\) de cada nodo, se procede a resolver las ecuaciones de trafico a partir de la siguiente expresión:
\(λ_{i}=r_i+Σ_{t}^{k}λ_{t}*p_{ti}\)
Reemplazando, en la ecuacion se obtienen las siguientes expresiones para la tasa de llegada de pacientes a la ICU(1) y a Ward(2):
\(λ_{1}=r_1\) \(λ_{2}=λ_{1}*p_{12}\)
Despejando se obtienen los siguientes valores:
\(λ_{1}=2.985\) \(λ_{2}=0.806\)
# ICU, Se modela como un sistema M/M/C con c=25
EntradaICU<- NewInput.MMC(lambda = 2.985,mu=0.16, c=25, method = 0)
SalidaICU<- QueueingModel(EntradaICU)
summary(SalidaICU)
## lambda mu c k m RO P0 Lq Wq X L
## 1 2.985 0.16 25 NA NA 0.74625 7.699881e-09 0.3392496 0.1136515 2.985 18.9955
## W Wqq Lqq
## 1 6.363651 0.9852217 3.940887
#Ward, se modela como un sistema M/M/C con C=5
EntradaWARD<- NewInput.MMC(lambda = 0.806, mu=0.197, c=5, method = 0)
SalidaWARD<- QueueingModel(EntradaWARD)
summary(SalidaWARD)
## lambda mu c k m RO P0 Lq Wq X L
## 1 0.806 0.197 5 NA NA 0.8182741 0.01122062 2.656102 3.295413 0.806 6.747473
## W Wqq Lqq
## 1 8.371555 5.586592 5.502793
d. Obtenga los indicadores de desempeño de la red.
#Probabilidades de transición para calculos
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2 ) #Matriz de ICU Y WARD
Estaciones1 <-c('ICU','WARD')
colnames(probtransicion)<-c(Estaciones1)
row.names(probtransicion)<-c(Estaciones1)
probtransicion
## ICU WARD
## ICU 0 0.27
## WARD 0 0.00
#Indicadores de desempeño de la red de jackson
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=25)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=5)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
## L W X Lk Wk Xk ROk
## Net 25.74136 8.623571 2.985 NA NA NA NA
## Nd1 NA NA NA 18.995500 6.363651 2.98500 0.7462500
## Nd2 NA NA NA 6.745859 8.370071 0.80595 0.8182234
e. Analice los resultados de los indicadores identificando los nodos cuellos de botella y los tiempos de espera.
Al obtener los indicadores de desempeño para la unidad de cuidados intensivos (ICU) cada estación “ICU”, se puede afirmar que, a largo plazo, dicha estación tiene una ocupación del 74,6% y que la probabilidad de encontrarla vacía es prácticamente nula. Además, cuenta en promedio con 18,99 pacientes, de los cuales puede haber o no una persona esperando alrededor de 2,73 horas (0,11 días) una cama para ser atendida. Asimismo, el tiempo a largo plazo que un paciente puede durar en la unidad de cuidados intensivos es de 6,36 días.
Por su parte, los indicadores de desempeño para la estación “WARD” indican que, a largo plazo, ésta estación tiene una ocupación del 81,8% y que, al igual que la unidad de cuidados intensivos, la probabilidad de encontrarla vacía es prácticamente nula. Además, cuenta en promedio con 6,74 pacientes, de los cuales 2 o 3 están esperando alrededor de 3,29 días en pasillos u otras salas para ser atendidos en esta estación. Asimismo, el tiempo, a largo plazo, que un paciente puede durar en la estación es de 8,37 días.
En consecuencia, al considerar únicamente estas dos estaciones de servicio en el centro médico SWHC, se establece que ésta red de Jackson es estable y por tanto, es posible concluir sobre sus indicadores de desempeño, los cuales nos aseguran que, a largo plazo, en el sistema se encuentran 25,7 pacientes y cada uno pasa en el centro médico alrededor de 8,62 días.
Teniendo en cuenta estos resultados, es posible afirmar que la estación “WARD” que corresponde a la atención de medicina general para los pacientes que salieron de una situación de salud crítica en la ICU, es la estación cuello de botella, pues su ocupación es superior y, a largo plazo, el número de personas promedio supera la cantidad de camas disponibles, por lo que las colas de pacientes se hacen presentes y el personal médico encargado de ellos debe esforzarse en mayor medida por atender la demanda.
3. Modelamiento analítico vs. Simulación
a. Explique detalladamente si considera más adecuado resolver este caso usando modelamiento analítico o simulación. Contemple los supuestos, las ventajas y desventajas de cada alternativa.
Cualquier modelo se puede resolver usando cualquiera de los dos enfoques, algunas características de cada uno de ellos son:
Modelamiento Analítico: Para este tipo de modelamiento es necesario emplear ecuaciones y expresiones matemáticas (Modelo estocástico) con el fin de representar el comportamiento de un fenómeno. En este sentido, este modelo se caracteriza por brindar soluciones y conclusiones exactas, pero asi como tiene ventajas, tambien presenta desventajas, en primer lugar, cabe destacar que, si se desea estudiar un fenómeno demasiado complejo, no será posible representarlo de forma analítica, ya que en este caso se pueden obtener conclusiones y resultados alejados de la situación original. Los agentes principales que participan en este proceso son los clientes y los servidores. Cabe destacar que a partir del modelamiento analítico podemos encontrar el valor de los parámetros poblacionales bajo una serie de supuestos y simplificaciones del fenómeno.
Simulación: Para este enfoque es necesario el uso de recursos computacionales para representar el comportamiento de un modelo, en este sentido, este tipo de modelamiento es capaz de representar gran variedad de fenómenos a una complejidad inferior que el modelamiento analítico, el problema de la solución de un modelo a partir de simulación radica en que brinda conclusiones aproximadas pues puede verse tan solo como una muestra de las posibles situaciones que pueden ocurrir en el fenómeno real. De igual manera, entre más complejidad tenga el modelo mayores recursos computacionales se requieren. Cabe destacar, que la simulación nos permite obtener estimadores de los parámetros muestrales a partir del uso de herramientas tecnológicas tales como Excel, Flexsim, Simmer, entre otros.
Teniendo en cuenta lo expuesto anteriormente, y al tener una red con sistemas de espera del tipo M/M/C, con C servidores, se considera más adecuado resolver este caso empleando el modelamiento analítico, ya que requerimos calcular parámetros poblacionales tales como µ (tasa media de servicio) y con simulación solo estaríamos analizando una posible muestra, ademas, a partir de modelos matemáticos de teoría de colas podemos encontrar un equilibrio entre el número de pacientes que se encuentran en la línea de espera y la cantidad de servidores o camas que satisfacen la demanda del hospital, tambien, es posible calcular las medidas de desempeño propias del problema con el fin de optimizar el sistema de espera y evitar un posible colapso. De igual manera no se descarta la idea de emplear simulación, en caso de aplicar las alternativas de mejora, esto con el fin de profundizar más en el comportamiento del sistema y de analizar cómo responde ante cambios de naturaleza estocástica.
4. Generación de escenarios:
a. Realice un gráfico que permita comprender cómo cambian los indicadores de desempeño y los costos del GM ward al incrementarse la cantidad de camas. Pruebe hasta 25 camas. ¿Cómo cambian los indicadores de la red?
Para determinar el comportamiento del sistema al contar con un número mayor de camas para la atención en “WARD” y el mismo número de camas (25) en la unidad de cuidados intensivos, se analizaron 21 escenarios y se graficó el comportamiento de 2 indicadores de desempeño, correspondientes a la cantidad promedio de pacientes en el sistema y al tiempo en el mismo, respectivamente. Asimismo, se realizó el estimado de costos en los que incurre la zona de “WARD” al aumentar en 1 unidad sus camas para la atención de los pacientes.
#calculo indicador L para la red
ComparacionWARD<-function(CamasW){
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=25)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=CamasW)
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
Indicadores <-summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
return(Indicadores$Lk[3])
}
PromClientesL<-sapply(5:25, function(x) ComparacionWARD(x))
data.frame(Camasw=5:25, pacientesSistema=PromClientesL)%>%ggplot(aes(x= Camasw, y=pacientesSistema))+geom_line()+geom_point()+theme_minimal()
# Calculo Costos para indicador L
ComparacionWARDCostos<-function(CamasW){
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=25)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=CamasW)
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
Indicadores <-summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
return(Indicadores$Lk[3]*600)
}
CostosClientesL<-sapply(5:25, function(x) ComparacionWARDCostos(x))
data.frame(Camasw=5:25, pacientesCostos=CostosClientesL)%>%ggplot(aes(x= Camasw, y=pacientesCostos))+geom_line()+geom_point()+theme_minimal()
#Calculo indicador W para la red
ComparacionWARDW<-function(CamasW){
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=25)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=CamasW)
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
Indicadores <-summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
return(Indicadores$Wk[3])
}
TiempoEsperaW<-sapply(5:25, function(x) ComparacionWARDW(x))
data.frame(Camasw=5:25, DiasEspera=TiempoEsperaW)%>%ggplot(aes(x=Camasw, y=DiasEspera))+geom_line()+geom_point()+theme_minimal()
Al observar los 3 gráficos obtenidos, podemos concluir que al incluir un mayor número de camas, tanto los indicadores de desempeño como los costos, tienden a un valor constante, es decir, tienen un comportamiento exponencial decreciente, por lo que no habría diferencia, por ejemplo, en aumentar el total de camas en la estación de 10 a 25, pues vemos que en este conjunto de datos los valores para las variables analizadas (pacientes, tiempo y costos) no tienen cambios significativos.
b. Realice un gráfico que permita comprender cómo cambian los indicadores de desempeño y los costos del MSICU al incrementarse el número de camas. Pruebe hasta 50 camas. ¿Cómo cambian los indicadores de la red?
De manera análoga al punto anterior, se determina el comportamiento del sistema al contar esta vez con un número mayor de camas para la atención en la unidad de cuidados intensivos manteniendo constante número de camas (5) en la zona de “WARD”, analizando igualmente 21 escenarios y graficando este comportamiento tanto para los indicadores de desempeño (L y W) como para los costos estimados de la estación.
#calculo indicador L para la red
ComparacionICU<-function(CamasICU){
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=CamasICU)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=5)
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
Indicadores <-summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
return(Indicadores$Lk[2])
}
ClientesICUL<-sapply(25:50, function(x) ComparacionICU(x))
data.frame(CamasICU=25:50, pacientesSistema=ClientesICUL)%>%ggplot(aes(x= CamasICU, y=pacientesSistema))+geom_line()+geom_point()+theme_minimal()
# Calculo Costos para indicador L
ComparacionICU<-function(CamasICU){
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=CamasICU)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=5)
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
Indicadores <-summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
return(Indicadores$Lk[2]*3360)
}
ICUcostos<-sapply(25:50, function(x) ComparacionICU(x))
data.frame(CamasICU=25:50, CostosSistema=ICUcostos)%>%ggplot(aes(x= CamasICU, y=CostosSistema))+geom_line()+geom_point()+theme_minimal()
#calculo indicador W para la red
ComparacionICUW<-function(CamasICU){
S1<- NewInput.MMC(lambda = 2.985,mu=0.16, c=CamasICU)
S2<- NewInput.MMC(lambda = 0, mu=0.197, c=5)
probtransicion <- matrix(c(0,0.27,0,0), byrow = TRUE, ncol = 2,nrow = 2)
RedJackson<- NewInput.OJN(probtransicion,S1,S2)
RedJackson2 <- QueueingModel(RedJackson)
Indicadores <-summary(RedJackson2)[[1]]%>%mutate(Wk=Lk/Xk)
return(Indicadores$Wk[2])
}
TiempoEsperaw<-sapply(25:50, function(x) ComparacionICUW(x))
data.frame(CamasICU=25:50, DiasEspera=TiempoEsperaw)%>%ggplot(aes(x= CamasICU, y=DiasEspera))+geom_line()+geom_point()+theme_minimal()
Al observar los 3 gráficos obtenidos, podemos observar un comportamiento muy similar al caso anterior, y por tanto, se concluye que al incluir un mayor número de camas en la unidad de cuidados intensivos, tanto los indicadores de desempeño como los costos, tienen un comportamiento exponencial decreciente y en consecuencia, no habría diferencia, por ejemplo, en aumentar el total de camas en la estación de 35 a 50, pues vemos que en este conjunto de datos los valores para las variables analizadas (pacientes, tiempo y costos) no tienen cambios significativos.
5. Recomendaciones:
a. Genere recomendaciones basadas en los hallazgos previos que permitan mejorar el servicio dado por el Hospital Universitario
Teniendo en cuenta lo expuesto a lo largo del documento, se recomienda al centro médico SWHC generar alternativas de mejora para la atención en la estación “WARD”, pues es ésta la que determina el desempeño del centro médico al ser el cuello de botella del sistema.
Una alternativa que se propone es el aumento de camas de 5 a 10, pues es en este punto en donde los valores tanto de indicadores como de costos se estabilizan, disminuyendo los tiempos de servicio por paciente de 8,3 días a 5,1 días, y asimismo, se disminuye la cantidad de pacientes en la estación de 6,7 a 4,1, es decir, a largo plazo el número de pacientes en la estación no superará a la cantidad de camas disponibles, por lo que las colas disminuyen y los pacientes pueden disfrutar de un mejor servicio y además, más rápido.
Con la alternativa propuesta también se tiene una reducción de costos significativa para el centro médico, pues se obtiene un ahorro de USD$1560 aproximadamente.
Como esta propuesta, se pueden generar otras similares para un aumento de camas en la misma estación de 2 a 3, es decir, entre 7 y 10 camas en “WARD” y analizar la ocupación del sistema, de manera tal que el centro médico cuente con capacidad para atender la demanda de pacientes sin tener servidores ociosos.