Está en la página 1de 20

DISTRIBUCION Cupos x Cita

Javier López

2023-01-27

Introducción

El presente documento pretende abordar el problema de marcaje en REMI de hora de inicio y término de
las atenciones de las agrupaciones de agendas de Centro Médico, distinguiendo:

• Consultas
• Endoscopia, que contempla las agendas de procedimientos de la unidad.
• Cardiología, distinguiendose a su vez las agendas:
– Ecocardiogramas
– EKGs
– Holters PA y FC
– SPECT Cardiaco y Test de Esfuerzo
• Terapias Complementarias
• Procedimientos Médicos
• Procedimientos de Enfermería

Este planteamiento presenta antecedentes que evidencian este problema, y una solución viable que consiste
en reemplazar los registros erróneos por observaciones de variables aleatorias. Sin embargo, esto tambien
requiere el input de los parámetros que definen a un registro erróneo.

Problemática

Todas las citas programadas en REMI pasan por una serie de estados, de acuerdo a los cambios que hagan
los usuarios. Actualmente, al menos en Centro Médico, se sabe que las citas en que un paciente fue atendido
son aquellas cuyo último estado incluye Atencion finalizada, Asistencia en curso, y Esperando
Sin embargo, solo el estado Atencion finalizada incluye una hora de término de la atención, por lo que solo
dichas citas tienen un registro de su duración.
De las 177.451 citas concretadas en 2022, 160.885 podrían tener un registro de su duración. Es decir,
9,33% de las citas concretadas no hacen uso de la capacidad instalada cuando esta se mide segun el horario
de atención, y tienen una magnitud de $/hr. que tiende al infinito.
Aun así, se recalca que el objetivo de esta propuesta es plantear una corrección para la duración de las citas.

dataset <- rbind(dataset1, dataset2, dataset3, dataset4, dataset5,


dataset6, dataset7)

dataset$Duracion_Finalizadas <- sub(",", ".", dataset$Duracion_Finalizadas)


dataset$Duracion_Finalizadas <- as.numeric(dataset$Duracion_Finalizadas)

1
## [1] "Atenciones finalizadas: 160885"

summary(dataset[, c(2, 4)])

## Duracion_Finalizadas DURACION_CUPO_OFERTA
## Min. :-893.08 Min. : 1.00
## 1st Qu.: 10.82 1st Qu.: 15.00
## Median : 17.42 Median : 20.00
## Mean : 28.05 Mean : 22.14
## 3rd Qu.: 28.58 3rd Qu.: 20.00
## Max. : 888.65 Max. :120.00
## NA’s :6

head(dataset[, c(1, 2, 4)])

## APPOINTMENT_KEY Duracion_Finalizadas DURACION_CUPO_OFERTA


## 1 11498759 888.65 45
## 2 11512340 843.12 20
## 3 11498364 831.28 45
## 4 11497435 790.08 45
## 5 11553524 781.97 40
## 6 11500251 702.65 20

tail(dataset[, c(1, 2, 4)])

## APPOINTMENT_KEY Duracion_Finalizadas DURACION_CUPO_OFERTA


## 160880 12185187 0.07 20
## 160881 12103556 NA 45
## 160882 12159076 -0.12 20
## 160883 12173305 -0.13 20
## 160884 12222963 -1.18 20
## 160885 12211029 -1.22 20

El resumen tabulado muestra que, dentro del 90,67% de las citas cuya duración si fue registrada, hay
desviaciones importantes respecto a la duración programada en la oferta, y es a continuación que se consolida
el impacto de estos errores. Para plantear este problema en perspectiva, se incorpora una nueva magnitud
que relaciona la duración relativa de las atenciones finalizadas, respecto a la duración programada en la
oferta, que de aquí en adelante podrá ser referido simplemente como Ratio. Otra forma de explicarlo sería
Ocupación de la Oferta de cada Cupo. Por ejemplo, sea un bloque horariode frecuencia de 20 minutos, si
una cita dura 30 minutos, la ocupación del cupo es de 1.5.

2
Análisis de Datos

Ratio Atenciones Finalizadas

Histograma Ratio: Duracion Finalizadas / Duracion Oferta


0.8
0.6
Density

0.4
0.2
0.0

−2 0 2 4 6

Ratio

quantile(dataset$Duracion_Finalizadas/dataset$DURACION_CUPO_OFERTA,
prob = seq(0, 1, length = 101), na.rm = TRUE)

## 0% 1% 2% 3% 4% 5%
## -44.6540000 0.0115000 0.0315000 0.0585000 0.0910000 0.1290000
## 6% 7% 8% 9% 10% 11%
## 0.1776667 0.2310000 0.2725000 0.3060000 0.3340000 0.3585000
## 12% 13% 14% 15% 16% 17%
## 0.3800000 0.4000000 0.4180000 0.4360000 0.4525000 0.4685000
## 18% 19% 20% 21% 22% 23%
## 0.4833333 0.4976667 0.5115000 0.5250000 0.5385000 0.5510000
## 24% 25% 26% 27% 28% 29%
## 0.5640000 0.5765000 0.5886667 0.6010000 0.6125000 0.6246667
## 30% 31% 32% 33% 34% 35%
## 0.6366667 0.6486667 0.6610000 0.6725000 0.6850000 0.6960000
## 36% 37% 38% 39% 40% 41%
## 0.7075000 0.7190000 0.7313333 0.7435000 0.7550000 0.7667973
## 42% 43% 44% 45% 46% 47%
## 0.7799200 0.7915000 0.8040000 0.8160000 0.8285000 0.8413333
## 48% 49% 50% 51% 52% 53%
## 0.8535000 0.8660000 0.8790000 0.8929756 0.9060000 0.9200000

3
## 54% 55% 56% 57% 58% 59%
## 0.9335000 0.9473333 0.9615000 0.9760000 0.9910000 1.0060000
## 60% 61% 62% 63% 64% 65%
## 1.0210000 1.0366667 1.0535000 1.0700000 1.0866667 1.1046667
## 66% 67% 68% 69% 70% 71%
## 1.1225000 1.1415000 1.1610000 1.1810000 1.2015000 1.2240000
## 72% 73% 74% 75% 76% 77%
## 1.2483511 1.2715556 1.2966667 1.3233333 1.3513333 1.3800000
## 78% 79% 80% 81% 82% 83%
## 1.4100000 1.4420000 1.4760000 1.5123633 1.5504978 1.5915000
## 84% 85% 86% 87% 88% 89%
## 1.6390000 1.6911278 1.7460000 1.8085000 1.8775000 1.9525000
## 90% 91% 92% 93% 94% 95%
## 2.0350000 2.1375000 2.2650000 2.4200000 2.6310356 2.9071500
## 96% 97% 98% 99% 100%
## 3.3864400 4.1813300 5.7130844 9.0356111 43.0746667

summary(dataset$Duracion_Finalizadas/dataset$DURACION_CUPO_OFERTA,
na.rm = TRUE)

## Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s


## -44.6540 0.5765 0.8790 1.2281 1.3233 43.0747 6

El gráfico esta sesgado, debido a que los valores negativos si son outliers. Pero como se puede ver, a nivel
agregado, las citas que duran más de 2 veces su programación suman una frecuencia no despreciable.
Lamentablemente, descartar todos los casos de duración menores o iguales a 0 sigue dejando un universo
distorsionado.

Ratio > 0

datos <- dataset


datos$Duracion_Finalizadas[datos$Duracion_Finalizadas <= 0] <- NA
datos <- na.omit(datos)
datos$ratio <- datos$Duracion_Finalizadas/datos$DURACION_CUPO_OFERTA

## [1] "Atenciones Ratio > 0: 160850"

summary(datos[, c(2, 4, 5)])

## Duracion_Finalizadas DURACION_CUPO_OFERTA ratio


## Min. : 0.07 Min. : 1.00 Min. : 0.00222
## 1st Qu.: 10.82 1st Qu.: 15.00 1st Qu.: 0.57667
## Median : 17.42 Median : 20.00 Median : 0.87933
## Mean : 28.11 Mean : 22.14 Mean : 1.23054
## 3rd Qu.: 28.60 3rd Qu.: 20.00 3rd Qu.: 1.32333
## Max. :888.65 Max. :120.00 Max. :43.07467

4
Histograma Ratio
0.8
0.6
Density

0.4
0.2
0.0

0 1 2 3 4 5

Ratio

quantile(datos$ratio, prob = seq(0, 1, length = 101), na.rm = TRUE)

## 0% 1% 2% 3% 4% 5%
## 0.002222222 0.011500000 0.032333333 0.059000000 0.091000000 0.129575000
## 6% 7% 8% 9% 10% 11%
## 0.178666667 0.231500000 0.273486667 0.306666667 0.334333333 0.358500000
## 12% 13% 14% 15% 16% 17%
## 0.381000000 0.400000000 0.418000000 0.436500000 0.452500000 0.468500000
## 18% 19% 20% 21% 22% 23%
## 0.483333333 0.498000000 0.511500000 0.525333333 0.538500000 0.551045000
## 24% 25% 26% 27% 28% 29%
## 0.564000000 0.576666667 0.588666667 0.601000000 0.612968889 0.625000000
## 30% 31% 32% 33% 34% 35%
## 0.636666667 0.648666667 0.661000000 0.672666667 0.685000000 0.696500000
## 36% 37% 38% 39% 40% 41%
## 0.707666667 0.719333333 0.731500000 0.743500000 0.755000000 0.767348333
## 42% 43% 44% 45% 46% 47%
## 0.780000000 0.791500000 0.804000000 0.816000000 0.828500000 0.841333333
## 48% 49% 50% 51% 52% 53%
## 0.854000000 0.866000000 0.879333333 0.893333333 0.906000000 0.920000000
## 54% 55% 56% 57% 58% 59%
## 0.933500000 0.947500000 0.961500000 0.976000000 0.991166667 1.006000000
## 60% 61% 62% 63% 64% 65%
## 1.021000000 1.036666667 1.053500000 1.070000000 1.087111111 1.104666667
## 66% 67% 68% 69% 70% 71%

5
## 1.122500000 1.141500000 1.161000000 1.181000000 1.201500000 1.224000000
## 72% 73% 74% 75% 76% 77%
## 1.248500000 1.271771389 1.296666667 1.323333333 1.351333333 1.380000000
## 78% 79% 80% 81% 82% 83%
## 1.410000000 1.442500000 1.476000000 1.512500000 1.551000000 1.591500000
## 84% 85% 86% 87% 88% 89%
## 1.639000000 1.691333333 1.746000000 1.808500000 1.877500000 1.952601667
## 90% 91% 92% 93% 94% 95%
## 2.035000000 2.138000000 2.265008889 2.420253333 2.631500000 2.907500000
## 96% 97% 98% 99% 100%
## 3.386506667 4.181647222 5.713336667 9.036416667 43.074666667

summary(datos$ratio, na.rm = TRUE)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.00222 0.57667 0.87933 1.23054 1.32333 43.07467

6
Propuesta

Considerando que 39% de las atenciones tuvieron un retraso, es difícil de creer que 50% de ellas duraran
menos que lo ofertado, o que 25% de lla duraran poco más de la mitad.
Es así que se propone la siguiente metodología:

• Recopilar las duraciones de citas y de oferta, para para cada una de las 6 categorías de agenda indiciadas
al principio dle documento.
• En cada caso, Limpiar los datos para descartar los valores de Ratio <= 0, debido a que este es el caso
tajantemente imposible, y que, junto con las concretada cuyo estado no es Atención finalizada, esta
sujeto a la corrección.
• Generar el análisis de frecuencia del Ratio, lo que incluye la impresión del histograma y la tabulación
de los percentiles y valores resumen.
• Determinar la distribución de variable aleatoria continua que mejor se ajusta a los datos remanentes.
Por supuesto, es posible es que el conjunto de datos de cada tipo de agenda siga contaminado con
valores irreales. Pero el resumen de frecuencia y la distribución que mejor se ajusta serán un buen
punto de partida.
• Estudiar junto con funcionarios de las unidades, y si es necesario, con los médicos, cuáles son las
duraciones relativas o Ratios máximos y mínimos que sean creíbles.

• Habiendo limpiado el set de datos de cada subconjunto, se puede volver a estimar la distribución de
variable aleatoria de mejor ajuste, y aplicar esta Ratio como un factor multiplicador sobre la duración
programada en la oferta, que entraría en rigor solo en cuando una cita tiene una duración sujeta a
corrección:

– No tiene duración registrada


– El valor se escapa de los límites de duración creíble.

7
Ejercicio de Ejemplo

Consultas 2022

Las consultas concretadas sumaron 152.106 en 2022, de las cuáles 136.875 llegaron al estado Atención
finalizada.

dataset <- rbind(dataset1, dataset2, dataset3, dataset4, dataset5,


dataset6, dataset7, dataset8, dataset9, dataset10, dataset11,
dataset12)

dataset$Duracion_Finalizadas <- sub(",", ".", dataset$Duracion_Finalizadas)


dataset$Duracion_Finalizadas <- as.numeric(dataset$Duracion_Finalizadas)

## [1] "Atenciones finalizadas: 136875"

summary(dataset[, c(2, 3)])

## Duracion_Finalizadas DURACION_CUPO_OFERTA
## Min. :-893.08 Min. : 5.00
## 1st Qu.: 11.75 1st Qu.:15.00
## Median : 17.85 Median :20.00
## Mean : 27.44 Mean :20.93
## 3rd Qu.: 27.80 3rd Qu.:20.00
## Max. : 888.65 Max. :60.00
## NA’s :6

head(dataset[, c(1, 2, 3)])

## APPOINTMENT_KEY Duracion_Finalizadas DURACION_CUPO_OFERTA


## 1 11938213 12.62 20
## 2 11939563 9.98 20
## 3 11942555 11.08 20
## 4 11943214 48.32 20
## 5 11943220 70.90 20
## 6 11943234 11.25 20

tail(dataset[, c(1, 2, 3)])

## APPOINTMENT_KEY Duracion_Finalizadas DURACION_CUPO_OFERTA


## 136870 11570593 10.52 15
## 136871 11570802 14.42 20
## 136872 11570823 8.78 20
## 136873 11570863 9.32 20
## 136874 11570881 9.57 15
## 136875 11571399 20.75 20

8
Análisis de Datos

Ratio Atenciones Finalizadas, Consultas 2022

Histograma Duracion Finalizadas / Duracion Oferta


0.8
0.6
Density

0.4
0.2
0.0

−1 0 1 2 3 4 5

Ratio

quantile(dataset$Duracion_Finalizadas/dataset$DURACION_CUPO_OFERTA,
prob = seq(0, 1, length = 101), na.rm = TRUE)

## 0% 1% 2% 3% 4% 5%
## -44.6540000 0.1156667 0.2350000 0.2865000 0.3215000 0.3484000
## 6% 7% 8% 9% 10% 11%
## 0.3713333 0.3920000 0.4110000 0.4286667 0.4446667 0.4600000
## 12% 13% 14% 15% 16% 17%
## 0.4746667 0.4880000 0.5015000 0.5150000 0.5280000 0.5400000
## 18% 19% 20% 21% 22% 23%
## 0.5513333 0.5633333 0.5746667 0.5860000 0.5975000 0.6085000
## 24% 25% 26% 27% 28% 29%
## 0.6190000 0.6300000 0.6413333 0.6520000 0.6633333 0.6740000
## 30% 31% 32% 33% 34% 35%
## 0.6850000 0.6950000 0.7053333 0.7160000 0.7275000 0.7380000
## 36% 37% 38% 39% 40% 41%
## 0.7485000 0.7590000 0.7700000 0.7813333 0.7920000 0.8035000
## 42% 43% 44% 45% 46% 47%
## 0.8140000 0.8250000 0.8366667 0.8480000 0.8585000 0.8700000
## 48% 49% 50% 51% 52% 53%

9
## 0.8825000 0.8945000 0.9060000 0.9185000 0.9310000 0.9433333
## 54% 55% 56% 57% 58% 59%
## 0.9553333 0.9685000 0.9813333 0.9950000 1.0081100 1.0213533
## 60% 61% 62% 63% 64% 65%
## 1.0353333 1.0500000 1.0650000 1.0800000 1.0953333 1.1113333
## 66% 67% 68% 69% 70% 71%
## 1.1283333 1.1453333 1.1625000 1.1810000 1.2000000 1.2193333
## 72% 73% 74% 75% 76% 77%
## 1.2415000 1.2635000 1.2860000 1.3095000 1.3346667 1.3615000
## 78% 79% 80% 81% 82% 83%
## 1.3886667 1.4186667 1.4510000 1.4848160 1.5200000 1.5581467
## 84% 85% 86% 87% 88% 89%
## 1.6010000 1.6509333 1.7050000 1.7660800 1.8350000 1.9160000
## 90% 91% 92% 93% 94% 95%
## 2.0040000 2.1115000 2.2490000 2.4240800 2.6566667 2.9820000
## 96% 97% 98% 99% 100%
## 3.5541867 4.4964800 6.2275200 9.7483067 43.0746667

summary(dataset$Duracion_Finalizadas/dataset$DURACION_CUPO_OFERTA,
na.rm = TRUE)

## Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s


## -44.654 0.630 0.906 1.285 1.310 43.075 6

Ya se vuelve evidente que los valores negativos correspondían a Consultas Médicas.

datos <- dataset


datos$Duracion_Finalizadas[datos$Duracion_Finalizadas <= 0] <- NA
datos <- na.omit(datos)
datos$ratio <- datos$Duracion_Finalizadas/datos$DURACION_CUPO_OFERTA

Ratio > 0 , Consultas 2022

## [1] "Atenciones Ratio > 0: 136841"

summary(datos[, c(2, 3, 4)])

## Duracion_Finalizadas DURACION_CUPO_OFERTA ratio


## Min. : 0.08 Min. : 5.00 Min. : 0.0040
## 1st Qu.: 11.75 1st Qu.:15.00 1st Qu.: 0.6300
## Median : 17.85 Median :20.00 Median : 0.9065
## Mean : 27.51 Mean :20.93 Mean : 1.2876
## 3rd Qu.: 27.82 3rd Qu.:20.00 3rd Qu.: 1.3100
## Max. :888.65 Max. :60.00 Max. :43.0747

10
Histograma Ratio mayor a 0
0.8
0.6
Density

0.4
0.2
0.0

−1 0 1 2 3 4 5

Ratio

quantile(datos$ratio, prob = seq(0, 1, length = 101), na.rm = TRUE)

## 0% 1% 2% 3% 4% 5% 6%
## 0.0040000 0.1190000 0.2366667 0.2875000 0.3220000 0.3486667 0.3715000
## 7% 8% 9% 10% 11% 12% 13%
## 0.3925000 0.4113333 0.4290000 0.4450000 0.4600000 0.4746667 0.4885000
## 14% 15% 16% 17% 18% 19% 20%
## 0.5020000 0.5153333 0.5280000 0.5400000 0.5513333 0.5633333 0.5750000
## 21% 22% 23% 24% 25% 26% 27%
## 0.5860000 0.5975000 0.6085000 0.6190000 0.6300000 0.6413333 0.6523333
## 28% 29% 30% 31% 32% 33% 34%
## 0.6635000 0.6740000 0.6850000 0.6953333 0.7053333 0.7160000 0.7275000
## 35% 36% 37% 38% 39% 40% 41%
## 0.7380000 0.7486667 0.7590000 0.7700000 0.7815000 0.7920000 0.8035000
## 42% 43% 44% 45% 46% 47% 48%
## 0.8143333 0.8253333 0.8366667 0.8480000 0.8586667 0.8709667 0.8825000
## 49% 50% 51% 52% 53% 54% 55%
## 0.8946667 0.9065000 0.9186667 0.9310000 0.9433333 0.9553333 0.9686667
## 56% 57% 58% 59% 60% 61% 62%
## 0.9813333 0.9950000 1.0085000 1.0215000 1.0353333 1.0506667 1.0653333
## 63% 64% 65% 66% 67% 68% 69%
## 1.0800889 1.0957667 1.1115000 1.1285000 1.1453333 1.1625000 1.1810000
## 70% 71% 72% 73% 74% 75% 76%
## 1.2000000 1.2200000 1.2415000 1.2635000 1.2860000 1.3100000 1.3346667
## 77% 78% 79% 80% 81% 82% 83%

11
## 1.3615000 1.3886667 1.4186667 1.4510000 1.4850000 1.5200000 1.5583667
## 84% 85% 86% 87% 88% 89% 90%
## 1.6013333 1.6510000 1.7053333 1.7665000 1.8350000 1.9160000 2.0040000
## 91% 92% 93% 94% 95% 96% 97%
## 2.1117000 2.2490000 2.4246667 2.6566667 2.9823333 3.5549333 4.4977000
## 98% 99% 100%
## 6.2281333 9.7512000 43.0746667

summary(datos$ratio, na.rm = TRUE)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.0040 0.6300 0.9065 1.2876 1.3100 43.0747

En este punto, ya se observan indicaciones de que, con la excepción de las duraciones negativas, son los
procedimientos de distinta índole y terapias complementarias las incluyen duraciones anormalmente cortas.

Ratios Creíbles, Consultas 2022 De aquí en adelante se procede a seleccionar arbitrariamente el sub-
conjunto de datos que se espera represente el verdadero rango del Ratio. En caso de pasar a producción, la
selección del subconjunto sería mucho más informada.
De acuerdo a estimaciones consultadas informalmente, la ocupación por cupo de consulta médica debería
ser de [49,21~266,7] %, o dicho de otra forma, el Ratio = [0,4921 : 2,667].

quantile(datos$ratio, prob = seq(0, 1, length = 101), na.rm = TRUE)

## 0% 1% 2% 3% 4% 5% 6%
## 0.0040000 0.1190000 0.2366667 0.2875000 0.3220000 0.3486667 0.3715000
## 7% 8% 9% 10% 11% 12% 13%
## 0.3925000 0.4113333 0.4290000 0.4450000 0.4600000 0.4746667 0.4885000
## 14% 15% 16% 17% 18% 19% 20%
## 0.5020000 0.5153333 0.5280000 0.5400000 0.5513333 0.5633333 0.5750000
## 21% 22% 23% 24% 25% 26% 27%
## 0.5860000 0.5975000 0.6085000 0.6190000 0.6300000 0.6413333 0.6523333
## 28% 29% 30% 31% 32% 33% 34%
## 0.6635000 0.6740000 0.6850000 0.6953333 0.7053333 0.7160000 0.7275000
## 35% 36% 37% 38% 39% 40% 41%
## 0.7380000 0.7486667 0.7590000 0.7700000 0.7815000 0.7920000 0.8035000
## 42% 43% 44% 45% 46% 47% 48%
## 0.8143333 0.8253333 0.8366667 0.8480000 0.8586667 0.8709667 0.8825000
## 49% 50% 51% 52% 53% 54% 55%
## 0.8946667 0.9065000 0.9186667 0.9310000 0.9433333 0.9553333 0.9686667
## 56% 57% 58% 59% 60% 61% 62%
## 0.9813333 0.9950000 1.0085000 1.0215000 1.0353333 1.0506667 1.0653333
## 63% 64% 65% 66% 67% 68% 69%
## 1.0800889 1.0957667 1.1115000 1.1285000 1.1453333 1.1625000 1.1810000
## 70% 71% 72% 73% 74% 75% 76%
## 1.2000000 1.2200000 1.2415000 1.2635000 1.2860000 1.3100000 1.3346667
## 77% 78% 79% 80% 81% 82% 83%
## 1.3615000 1.3886667 1.4186667 1.4510000 1.4850000 1.5200000 1.5583667
## 84% 85% 86% 87% 88% 89% 90%
## 1.6013333 1.6510000 1.7053333 1.7665000 1.8350000 1.9160000 2.0040000
## 91% 92% 93% 94% 95% 96% 97%

12
## 2.1117000 2.2490000 2.4246667 2.6566667 2.9823333 3.5549333 4.4977000
## 98% 99% 100%
## 6.2281333 9.7512000 43.0746667

Rapidamente se puede ver que este rango se encuentra entre los percentiles 13 y 95, o que captura 82% de
los datos observados. Sin embargo, dado que el objetivo es reemplazar los ratios anormales por una variable
aleatoria, esto es solo una referencia.
Para continuar, por precaución, el subconjuto de datos que solo incluye las ocupaciones mayores a 0 vuelve
a construirse, y se limpia, pero con el nuevo criterio Ratio = [0,4921 : 2,667]

rm(datos)
datos <- dataset
datos$Duracion_Finalizadas[datos$Duracion_Finalizadas < (0.4921) *
datos$DURACION_CUPO_OFERTA] <- NA
datos$Duracion_Finalizadas[datos$Duracion_Finalizadas > (2.667) *
datos$DURACION_CUPO_OFERTA] <- NA
datos <- na.omit(datos)
datos$ratio <- datos$Duracion_Finalizadas/datos$DURACION_CUPO_OFERTA

## [1] "Atenciones Ratio en rango: 110483"

Lo que corresponde al 81% de las atenciones finalizadas de consultas.

13
Distribución y Variable Aleatoria, Consultas 2022

Histograma Ratio en rango


1.2
1.0
0.8
Density

0.6
0.4
0.2
0.0

−1 0 1 2 3 4 5

Ratio

quantile(datos$ratio, prob = seq(0, 1, length = 101))

## 0% 1% 2% 3% 4% 5% 6% 7%
## 0.4923333 0.5035000 0.5140000 0.5246667 0.5340000 0.5440000 0.5533333 0.5625000
## 8% 9% 10% 11% 12% 13% 14% 15%
## 0.5720000 0.5813333 0.5900000 0.5993333 0.6085000 0.6175000 0.6260000 0.6350000
## 16% 17% 18% 19% 20% 21% 22% 23%
## 0.6435000 0.6525000 0.6613333 0.6700000 0.6786667 0.6880000 0.6960000 0.7040000
## 24% 25% 26% 27% 28% 29% 30% 31%
## 0.7125000 0.7215000 0.7310000 0.7390000 0.7480000 0.7565000 0.7650000 0.7740000
## 32% 33% 34% 35% 36% 37% 38% 39%
## 0.7833333 0.7915000 0.8010000 0.8100000 0.8185000 0.8275000 0.8366667 0.8453333
## 40% 41% 42% 43% 44% 45% 46% 47%
## 0.8546667 0.8633333 0.8733333 0.8826667 0.8925000 0.9020000 0.9115000 0.9215000
## 48% 49% 50% 51% 52% 53% 54% 55%
## 0.9315000 0.9415000 0.9513333 0.9620000 0.9720000 0.9825000 0.9935000 1.0046667
## 56% 57% 58% 59% 60% 61% 62% 63%
## 1.0150000 1.0260000 1.0375000 1.0493333 1.0615000 1.0735000 1.0860000 1.0985000
## 64% 65% 66% 67% 68% 69% 70% 71%
## 1.1110000 1.1240000 1.1385000 1.1523267 1.1664600 1.1810000 1.1965000 1.2125000
## 72% 73% 74% 75% 76% 77% 78% 79%
## 1.2286667 1.2467500 1.2646667 1.2825000 1.3015000 1.3210000 1.3425000 1.3635000
## 80% 81% 82% 83% 84% 85% 86% 87%

14
## 1.3860000 1.4093333 1.4346667 1.4610000 1.4890000 1.5180000 1.5484200 1.5813900
## 88% 89% 90% 91% 92% 93% 94% 95%
## 1.6178133 1.6588000 1.7035000 1.7510000 1.8040000 1.8646667 1.9325000 2.0046667
## 96% 97% 98% 99% 100%
## 2.0866200 2.1925000 2.3217156 2.4720000 2.6666667

summary(datos$ratio)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.4923 0.7215 0.9513 1.0615 1.2825 2.6667

Los histogramas de Ratio >0 y Ratio = [0,4921 : 2,667] no difieren mucho visualmente.
Ahora, se procede a seleccionar una distribución cuya ajuste sea aceptable. Actualmente, se pueden imple-
mentar en el reporte de Power BI de Oferta Médica, variables que se distribuyan Normal o LogNormal, pero
se incluyen otras distribuciones en el análisis para tenerlas presente en caso que se pueda aplicar una mejor.

weibull <- fitdist(datos$ratio, "weibull")


gamma <- fitdist(datos$ratio, "gamma")
lognormal <- fitdist(datos$ratio, "lnorm")
norm <- fitdist(datos$ratio, "norm")
exp <- fitdist(datos$ratio, "exp")
logis <- fitdist(datos$ratio, "logis")
cauchy <- fitdist(datos$ratio, "cauchy")
invgamma <- fitdist(datos$ratio, "invgamma")
invweibull <- fitdist(datos$ratio, "invweibull")

gofstat(list(weibull, gamma, lognormal, norm, exp, logis, cauchy,


invgamma, invweibull), fitnames = c("weibull", "gamma", "lognormal",
"norm", "exp", "logis", "cauchy", "invgamma", "invweibull"))

## Goodness-of-fit statistics
## weibull gamma lognormal
## Kolmogorov-Smirnov statistic 0.1028916 5.666798e-02 0.03947919
## Cramer-von Mises statistic 317.9026694 1.475743e+02 62.96537904
## Anderson-Darling statistic 2161.4158529 1.007171e+03 482.45400337
## norm exp logis
## Kolmogorov-Smirnov statistic 0.1023804 3.712801e-01 0.1087854
## Cramer-von Mises statistic 470.5161859 3.825384e+03 211.5721674
## Anderson-Darling statistic 2948.4618216 1.916278e+04 2032.9661085
## cauchy invgamma invweibull
## Kolmogorov-Smirnov statistic 0.1621081 0.02973224 0.03815355
## Cramer-von Mises statistic 511.8549168 31.31077967 59.46545499
## Anderson-Darling statistic 3732.6692990 266.91091147 422.60198823
##
## Goodness-of-fit criteria
## weibull gamma lognormal norm exp
## Akaike’s Information Criterion 125822.2 109049.5 102090.4 136460.0 234151.4
## Bayesian Information Criterion 125841.4 109068.7 102109.7 136479.2 234161.0
## logis cauchy invgamma invweibull
## Akaike’s Information Criterion 131731.0 154837.8 98822.80 100227.0
## Bayesian Information Criterion 131750.2 154857.0 98842.02 100246.2

15
summary(lognormal)

## Fitting of the distribution ’ lnorm ’ by maximum likelihood


## Parameters :
## estimate Std. Error
## meanlog -0.01997494 0.0011787846
## sdlog 0.39181600 0.0008335021
## Loglikelihood: -51043.22 AIC: 102090.4 BIC: 102109.7
## Correlation matrix:
## meanlog sdlog
## meanlog 1 0
## sdlog 0 1

summary(invgamma)

## Fitting of the distribution ’ invgamma ’ by maximum likelihood


## Parameters :
## estimate Std. Error
## shape 7.035093 0.02924985
## scale 6.412049 0.02763370
## Loglikelihood: -49409.4 AIC: 98822.8 BIC: 98842.02
## Correlation matrix:
## shape scale
## shape 1.0000000 0.9647431
## scale 0.9647431 1.0000000

La magnitud AIC se utiliza en estadística para estimar la cantidad de información perdida al momento de
de forzar un modelo, en este caso, de distribución de probabilidad, a un conjunto de datos. Al ajustar varios
modelos a un mismo conjunto, el AIC más bajo indica el modelo que presenta la menor falta de ajuste. Por
lo tanto, la variable aleatoria que mejor representa el Ratio para este conjunto de datos sería una Inversa
Gamma, de parámetros Lambda = 7,035093 y k = 6,412049. Pero actualmente esta distribución no puede
modelarse en Power BI, donde se analizan y presentan los datos de oferta médica. Entonces, la distribución
LogNormal es, en comparación aceptable, con parámetros media = -0, 01997494 y desv.std = 0,39181600.
Es así que, 110.483 observaciones de una variable aleatoria con esta distribución se resume a continuación

16
Histograma Variable Aleatoria Lognormal
1.0
0.8
Density

0.6
0.4
0.2
0.0

−1 0 1 2 3 4 5

Ratio

quantile(dist, prob = seq(0, 1, length = 101))

## 0% 1% 2% 3% 4% 5% 6% 7%
## 0.1542525 0.3913337 0.4359779 0.4668272 0.4918899 0.5132597 0.5313820 0.5487675
## 8% 9% 10% 11% 12% 13% 14% 15%
## 0.5638529 0.5779115 0.5920449 0.6052564 0.6176344 0.6300837 0.6413249 0.6523768
## 16% 17% 18% 19% 20% 21% 22% 23%
## 0.6633797 0.6744174 0.6847521 0.6946028 0.7043367 0.7135281 0.7230082 0.7326320
## 24% 25% 26% 27% 28% 29% 30% 31%
## 0.7420613 0.7509730 0.7604392 0.7695776 0.7785367 0.7875535 0.7962486 0.8054152
## 32% 33% 34% 35% 36% 37% 38% 39%
## 0.8145550 0.8238116 0.8320425 0.8410004 0.8499638 0.8583926 0.8674730 0.8762943
## 40% 41% 42% 43% 44% 45% 46% 47%
## 0.8857279 0.8945191 0.9033741 0.9124481 0.9216976 0.9318015 0.9412996 0.9504143
## 48% 49% 50% 51% 52% 53% 54% 55%
## 0.9602468 0.9692005 0.9793351 0.9885540 0.9979649 1.0078828 1.0180962 1.0277284
## 56% 57% 58% 59% 60% 61% 62% 63%
## 1.0380740 1.0484917 1.0589394 1.0695073 1.0805721 1.0912057 1.1025725 1.1139731
## 64% 65% 66% 67% 68% 69% 70% 71%
## 1.1249119 1.1367137 1.1488913 1.1616015 1.1742562 1.1868435 1.1999912 1.2139722
## 72% 73% 74% 75% 76% 77% 78% 79%
## 1.2287695 1.2428987 1.2575177 1.2724169 1.2886741 1.3050639 1.3221482 1.3405758
## 80% 81% 82% 83% 84% 85% 86% 87%
## 1.3598965 1.3797900 1.3995091 1.4208844 1.4432263 1.4667382 1.4922299 1.5189597
## 88% 89% 90% 91% 92% 93% 94% 95%

17
## 1.5479580 1.5800097 1.6159626 1.6553055 1.6970883 1.7433697 1.7987825 1.8616284
## 96% 97% 98% 99% 100%
## 1.9434720 2.0475571 2.1949278 2.4323461 5.0475671

summary(dist)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.1543 0.7510 0.9793 1.0560 1.2724 5.0476

Por supuesto, aplicar esta variable como factor de corrección para la duración de las citas concretadas
“anormales” sería contraproducente, puesto que permite valores más bajos que el 1% y valores casi de 70
veces de la duración por cupo según la oferta.
Afortunadamente, se pueden restringir los valores que esta variable aleatoria puede tomar, como el siguiente
ejemplo de código DAX en Power BI noes muestra.
.
exp(NORM.INV((NORM.DIST(RANDBETWEEN(ln(0.4921) * 10000, ln(2.667) *
10000)/10000, -0.01997494, 0.391816, TRUE)), -0.01997494,
0.391816)) * duracion_oferta

La funcion anterior crea valores aleatorios entre el 0,4921 y 2,667, siguiendo la distribución LogNormal que
presental el menor desajuste.
Con estas restricciones, una variable aleatoria con la misma distribución LogNormal anterior, presenta el
siguiente resumen.

dist2 <- rlnorm(110483, -0.01997494, 0.391816)


length(dist2[dist2 > 0.4921 & dist2 < 2.667])

## [1] 105519

summary(dist2[dist2 > 0.4921 & dist2 < 2.667])

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.4921 0.7774 0.9948 1.0715 1.2827 2.6669

Se ve que, si bien se generaron 110.483 obervaciones, las restricciones reducen la muestra a 105.575. Y más
importante aún, el factor de corrección buscado deja de adoptar los valores extremos.
Para poder medir el orden de magnitud del problema actual, y de la propuesta, la vista se mantiene en las
consultas médicas de 2022:

• Oferta Médica de Consultas se estima en 64.684 hrs.


• Consultas Concretadas se traducen a 62.651 hrs, equivalente a una ocupación de la oferta del 96,86%.

– Se recalca que esto corresponde a 136.875 Atenciones finalizadas, que incluyen los valores ex-
tremos planteados al inicio de este ejercicio de ejemplo. Y que esto deja 15.231 consultas cuya
duracion no se registró.

• Si las 152.106 consultas de 2022 hubiesen durado lo mismo que la oferta que les corresponde, sumarían
53.112 hrs, que correspondea una ocupación del 82,11%.

18
• Recordando que 110.483 citas son las que quedan después de descartar las valores faltantes y aquellos
menores a 0,4921 o mayores a 2,667 de la duración ofertada, si a estas 41.623 atenciones anómalas se
les aplicara un Ratio o factor de 1,00, esto sumaría 55.502 hrs, o a 85,81%
• En cambio, si se aplica la variable aleatoria, restringida por los límites 0,4921 o mayores a 2,667, la
duración agregada de las citas concretadas asciende a 59.788 hrs, lo que da una ocupación del 92,43%.

En definitiva, la ocupación de la oferta medida en horas, al depender del manejo adecuado de REMI, es muy
sensible. Es imposible que todas las citas duren exactamente lo planificado, y sustituir los valores erróneos
o anómalos parece la solución más simple, pero tampoco reflejan la realidad. Las dos alternativas restantes
se contrastan de esta forma:

• Ocupación de Oferta = 97%, pero con 10% de las citas cuya hora de inicio y término no fue marcada,
2% tiene duración menor a la cuarta parte de la duración programada, y 4,46% tiene una duración que
es al menos 3 veces la de la oferta. Es decir, al menos 17% de las citas que ocupán el 97% de
la oferta tiene registros erróneos.

• Ocupación de Oferta = 92%, forzando una corrección al 27% de las citas, al hacer más angosto el rango
de duración “creíble”.

– Y lo más importante, este rango para el Ratio dependería de las indicaciones de personal que
atiende a pacientes.

19
Análisis de Agendas Restantes

Por redactar. . .

20

También podría gustarte