-
Notifications
You must be signed in to change notification settings - Fork 1
/
trabajo_1_salud.Rmd
537 lines (422 loc) · 28.1 KB
/
trabajo_1_salud.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
---
title: "Trabajo 1 TAE - Salud"
author: "Luis Daniel Chavarría"
date: "12/2/2020"
output:
html_document:
df_print: kable
fig_caption: yes
fig_height: 8
fig_width: 10
highlight: haddock
theme: spacelab
toc: yes
toc_float: true
toc_collapsed: true
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Preparación y lectura de datos
## Librerías
```{r, warning=FALSE, message=FALSE}
library(raster)
library(tidyverse)
library(data.table)
library(readxl)
library(GGally)
library(corrplot)
library(leaflet)
```
## Lectura de datos
```{r}
raw_encuesta <- fread("databases/calidad_vida_ok.csv", encoding = "UTF-8") %>%
as_tibble() %>% mutate(
encuesta_calidad.barrio = case_when(
encuesta_calidad.barrio == "CABECERA ALTAVISTA" ~ "ALTAVISTA",
encuesta_calidad.barrio == "CIUDADELA NUEVO OCCIDENTE" ~ "CABECERA URBANA CORREGIMIENTO SAN CRISTÓBAL",
encuesta_calidad.barrio == "AREA DE EXPANCION SAN CRISTOBAL" ~ "ÁREA DE EXPANSIÓN SAN CRISTÓBAL",
encuesta_calidad.barrio == "CABECERA SAN CRISTÓBAL" ~ "CABECERA URBANA CORREGIMIENTO SAN CRISTÓBAL",
encuesta_calidad.barrio == "SAN CRISTOBAL" ~ "CABECERA URBANA CORREGIMIENTO SAN CRISTÓBAL",
encuesta_calidad.barrio == "PROGRESO Nº 2" ~ "PROGRESO",
TRUE ~ encuesta_calidad.barrio
)
)
```
## Análisis de Discapacidad
Con base en la cantidad de dos, se concluye que éste está asociado al "No", dado que se espera, en general, que el número de personas discapacitadas sea considerablemente menor al de no discapacitadas.
```{r}
raw_encuesta %>%
dplyr::select(paste0("encuesta_calidad.p_", 50:57)) %>%
mutate_all(as_factor) %>%
summary()
preguntas_categoricas <- c("encuesta_calidad.p_266", "encuesta_calidad.p_326", "encuesta_calidad.p_329", "encuesta_calidad.p_332",
"encuesta_calidad.p_335", "encuesta_calidad.p_338", "encuesta_calidad.p_341")
```
## Limpieza de los nombres y one-hot encoding
```{r, message=FALSE}
encuesta_salud <- raw_encuesta %>%
mutate(discapacidad = case_when(encuesta_calidad.p_50 == 1 ~ 1,
encuesta_calidad.p_51 == 1 ~ 1,
encuesta_calidad.p_52 == 1 ~ 1,
encuesta_calidad.p_53 == 1 ~ 1,
encuesta_calidad.p_54 == 1 ~ 1,
encuesta_calidad.p_55 == 1 ~ 1,
encuesta_calidad.p_56 == 1 ~ 1,
encuesta_calidad.p_57 == 1 ~ 1,
TRUE ~ 0)) %>%
mutate_at(vars(preguntas_categoricas), as_factor) %>%
fastDummies::dummy_cols(remove_selected_columns = TRUE, select_columns = preguntas_categoricas) %>%
mutate(encuesta_calidad.barrio = str_replace(encuesta_calidad.barrio, "ANDALUCIA", "ANDALUCÍA") %>%
str_replace("Nº 2", "NO.2") %>%
str_replace("Nº 1", "NO.1") %>%
str_replace("Nº 3", "NO.3") %>%
str_replace("AREA EXPANSION", "ÁREA DE EXPANSIÓN") %>%
str_replace("EXPANCION", "EXPANSIÓN") %>%
str_replace("AREA", "ÁREA") %>%
str_replace("BOMBONA", "BOMBONÁ") %>%
str_replace("LA ASOMADERA", "ASOMADERA") %>%
str_replace("BELALCAZAR", "BELALCÁZAR") %>%
str_replace("CALAZANS", "CALASANZ") %>%
str_replace("COLON", "COLÓN") %>%
str_replace("MIRA FLORES", "MIRAFLORES") %>%
str_replace("BARRIO FACULTAD DE MINAS", "FACULTAD DE MINAS") %>%
str_replace("CABECERA SAN ANT DE PR.", "SAN ANTONIO DE PRADO") %>%
str_replace("CARLOS E RESTREPO", "CARLOS E. RESTREPO") %>%
str_replace("URQUITA", "URQUITÁ") %>%
str_replace("LOS CERROS EL VERJEL", "LOS CERROS EL VERGEL") %>%
str_replace("CAYCEDO", "CAICEDO") %>%
str_replace("VALDES", "VALDÉS") %>%
str_replace("CERRO EL VOLADOR", "B. CERRO EL VOLADOR") %>%
str_replace("MOSCU", "MOSCÚ") %>%
str_replace("JOSELA", "JOSÉ LA") %>%
str_replace("JOSE", "JOSÉ") %>%
str_replace("EL YOLOMBO", "YOLOMBO") %>%
str_replace("PIEDRAS BLANCAS", "PIEDRAS BLANCAS - MATASANO") %>%
str_replace("BASILIA", "BRASILIA") %>%
str_replace("VILLA TINA", "VILLATINA") %>%
str_replace("LILIAM", "LILLIAM") %>%
str_replace("BOLIVAR", "BOLÍVAR") %>%
str_replace("CORREGIMIENTO PALMITAS", "PALMITAS SECTOR CENTRAL") %>%
str_replace("INES", "INÉS") %>%
str_replace("FE", "FÉ") %>%
str_replace("LUCIA", "LUCÍA") %>%
str_replace("SABIO", "SAVIO") %>%
str_replace("BERMEJAL- LOS ÁLAMOS", "BERMEJAL-LOS ÁLAMOS") %>%
str_replace("BOLÍVARIANA", "BOLIVARIANA") %>%
str_replace("EL NOGAL - LOS ALMENDROS", "EL NOGAL-LOS ALMENDROS") %>%
str_replace("JUAN XXIII - LA QUIEBRA", "JUAN XXIII LA QUIEBRA") %>%
str_replace("PROGRESO Nº 2", "EL PROGRESO") %>%
str_replace("MARIA", "MARÍA") %>%
str_replace("PLAYÓN", "PLAYON") %>%
str_replace("EL SOCORRO / LA GABRIELA", "EL SOCORRO") %>%
str_replace("FÉRRINI", "FERRINI") %>%
str_replace("LA CANDE LARIA", "LA CANDELARIA") %>%
str_replace("EL PLAYON", "PLAYÓN") %>%
str_replace("IGUANA", "IGUANÁ") %>%
str_replace("MARÍA CANO - CARAMBOLAS", "MARÍA CANO-CARAMBOLAS") %>%
str_replace("DE ABURRA", "DEL ABURRÁ") %>%
str_replace("ALTAVISTA CENTRAL", "ALTAVISTA SECTOR CENTRAL") %>%
str_replace("SECTOR CENTRAL", "CENTRO ADMINISTRATIVO") %>%
str_replace("ALTAVISTA CENTRO ADMINISTRATIVO", "ALTAVISTA SECTOR CENTRAL") %>%
str_replace("SANTA ELENA CENTRO ADMINISTRATIVO", "SANTA ELENA SECTOR CENTRAL") %>%
str_replace("PALMITAS CENTRO ADMINISTRATIVO", "PALMITAS SECTOR CENTRAL") %>%
str_replace("PROGRESO", "EL PROGRESO")
)
```
# Construcción de la base de datos
```{r}
factors <- c("encuesta_calidad.barrio", "encuesta_calidad.comuna")
db_salud <- encuesta_salud %>%
group_by(encuesta_calidad.barrio, encuesta_calidad.comuna) %>%
dplyr::summarize(n = n(),
discapacidad = sum(discapacidad == 1, na.rm = TRUE)/sum(!is.na(discapacidad), na.rm = TRUE),
acceso_salud = mean(`encuesta_calidad.p_265`, na.rm = TRUE),
calidad_salud_1 = sum(`encuesta_calidad.p_266_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_266_1`), na.rm = TRUE),
calidad_salud_2 = sum(`encuesta_calidad.p_266_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_266_2`), na.rm = TRUE),
calidad_salud_3 = sum(`encuesta_calidad.p_266_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_266_3`), na.rm = TRUE),
calidad_salud_4 = sum(`encuesta_calidad.p_266_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_266_4`), na.rm = TRUE),
calidad_salud_5 = sum(`encuesta_calidad.p_266_5` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_266_5`), na.rm = TRUE),
morbilidad_30 = sum(`encuesta_calidad.p_324` == 1, na.rm = TRUE)/
sum(!is.na(`encuesta_calidad.p_324`), na.rm = TRUE),
motivo_negacion_1 = sum(`encuesta_calidad.p_326_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_1`), na.rm = TRUE),
motivo_negacion_2 = sum(`encuesta_calidad.p_326_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_2`), na.rm = TRUE),
motivo_negacion_3 = sum(`encuesta_calidad.p_326_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_3`), na.rm = TRUE),
motivo_negacion_4 = sum(`encuesta_calidad.p_326_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_4`), na.rm = TRUE),
motivo_negacion_5 = sum(`encuesta_calidad.p_326_5` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_5`), na.rm = TRUE),
motivo_negacion_6 = sum(`encuesta_calidad.p_326_6` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_6`), na.rm = TRUE),
motivo_negacion_7 = sum(`encuesta_calidad.p_326_7` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_7`), na.rm = TRUE),
motivo_negacion_8 = sum(`encuesta_calidad.p_326_8` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_8`), na.rm = TRUE),
motivo_negacion_9 = sum(`encuesta_calidad.p_326_9` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_326_9`), na.rm = TRUE),
conteo_prevencion = median(`encuesta_calidad.p_328`, na.rm = TRUE),
calidad_prevencion_1 = sum(`encuesta_calidad.p_329_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_329_1`), na.rm = TRUE),
calidad_prevencion_2 = sum(`encuesta_calidad.p_329_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_329_2`), na.rm = TRUE),
calidad_prevencion_3 = sum(`encuesta_calidad.p_329_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_329_3`), na.rm = TRUE),
calidad_prevencion_4 = sum(`encuesta_calidad.p_329_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_329_4`), na.rm = TRUE),
consulta_medico_general = mean(`encuesta_calidad.p_331`, na.rm = TRUE),
calidad_med_general_1 = sum(`encuesta_calidad.p_332_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_332_1`), na.rm = TRUE),
calidad_med_general_2 = sum(`encuesta_calidad.p_332_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_332_2`), na.rm = TRUE),
calidad_med_general_3 = sum(`encuesta_calidad.p_332_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_332_3`), na.rm = TRUE),
calidad_med_general_4 = sum(`encuesta_calidad.p_332_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_332_4`), na.rm = TRUE),
consulta_medico_especialista = mean(`encuesta_calidad.p_334`, na.rm = TRUE),
calidad_med_especial_1 = sum(`encuesta_calidad.p_335_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_335_1`), na.rm = TRUE),
calidad_med_especial_2 = sum(`encuesta_calidad.p_335_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_335_2`), na.rm = TRUE),
calidad_med_especial_3 = sum(`encuesta_calidad.p_335_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_335_3`), na.rm = TRUE),
calidad_med_especial_4 = sum(`encuesta_calidad.p_335_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_335_4`), na.rm = TRUE),
consulta_urgencias = mean(`encuesta_calidad.p_337`, na.rm = TRUE),
calidad_urgencias_1 = sum(`encuesta_calidad.p_338_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_338_1`), na.rm = TRUE),
calidad_urgencias_2 = sum(`encuesta_calidad.p_338_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_338_2`), na.rm = TRUE),
calidad_urgencias_3 = sum(`encuesta_calidad.p_338_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_338_3`), na.rm = TRUE),
calidad_urgencias_4 = sum(`encuesta_calidad.p_338_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_338_4`), na.rm = TRUE),
hospitalizacion = mean(`encuesta_calidad.p_340`, na.rm = TRUE),
calidad_hospitalizacion_1 = sum(`encuesta_calidad.p_341_1` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_341_1`), na.rm = TRUE),
calidad_hospitalizacion_2 = sum(`encuesta_calidad.p_341_2` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_341_2`), na.rm = TRUE),
calidad_hospitalizacion_3 = sum(`encuesta_calidad.p_341_3` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_341_3`), na.rm = TRUE),
calidad_hospitalizacion_4 = sum(`encuesta_calidad.p_341_4` == 1, na.rm = TRUE)/sum(!is.na(`encuesta_calidad.p_341_4`), na.rm = TRUE),
) %>% ungroup() %>%
mutate_all(~replace_na(., 0)) %>%
mutate_at(factors, as_factor) %>%
filter(encuesta_calidad.barrio != "DESCONOCIDO")
db_salud %>%
head()
```
# Descripción de las variables y análisis descriptivo de la base de datos construida
La base de datos se ha construido agrupando las encuestas individuales de acuerdo al barrio y la comuna en que fueron realizadas, de ésta manera, se obtiena una base de datos con 308 observaciones (barrios) y 45 variables.
## Descripción de las variables
* `encuesta_calidad.barrio`: barrio analizado - unidad de análisis.
* `encuesta_calidad.comuna`: comuna del barrio analizado.
* `n`: número de respuestas de la encuesta de calidad de vida en el barrio correspondiente.
* `discapacidad`: Proporción de personas encuestadas que presentan alguna discapacidad para caminar, usar brazos o manos, ver, si requiere aparatos especiales, hablar, entender o aprender, problemas emocionales o mentales o síndrome de down.
* `acceso_salud`: El promedio de calificación en una escala de 1 (peor) a 5 (mejor) de cómo perciben las personas de este barrio en su hogar el acceso a la salud.
* `calidad_salud (1-5)`: Estas variables son la proporción de personas en el barrio que seleccionaron diferentes categorías cuando les preguntaron por la calidad de los servicios de salud de la siguiente manera: Muy mala (1), Mala (2), Aceptable (3), Buena (4), Muy buena (5). La suma de las proporciones dentro de estas cinco variables siempre debe sumar 1 para cada barrio.
* `morbilidad_30`: Proporción de personas dentro del barrio que respondió "Sí" a la siguiente pregunta: ¿En los últimos 30 días, tuvo alguna enfermedad, accidente, problema odontológico, o algún otro problema de salud que no haya implicado hospitalización?
* `motivo_negacion (1-9)`: Proporción de personas encuestadas que respondió a la pregunta: Cuál fue la principal razón por la que no solicitó o no recibió atención por el problema de salud? con las categorías especificadas en la siguiente tabla:
categoría | descripción
--|------------------------
1 | El caso era leve
2 | No tuvo tiempo
3 | El centro de Atención en salud queda lejos
4 | Falta dinero
5 | Mal servicio o citas distanciadas en el tiempo
6 | No lo atendieron
7 | No confía en los médicos o personal de salud
8 | Consultó antes y no le resolvieron el problema
9 | Muchos trámites para la cita
* `conteo_prevencion`: Mediana dentro del barrio del número de veces que los encuestados utilizaron servicios de promoción y prevención.
* `calidad_prevencion (1-4)`: Estas variables son la proporción de personas en el barrio que seleccionaron diferentes categorías cuando les preguntaron por la calidad de los servicios de promoción y prevención de la siguiente manera: Mala (1), Regular (2), Buena (3), Excelente (4). La suma de las proporciones dentro de estas cinco variables siempre debe sumar 1 para cada barrio.
* `consulta_medico_general`: Promedio dentro del barrio del número de veces que los encuestados acudieron a consultas de medicina general.
* `calidad_med_general (1-4)`: Estas variables son la proporción de personas en el barrio que seleccionaron diferentes categorías cuando les preguntaron por la calidad de las consultas con médico general de la siguiente manera: Mala (1), Regular (2), Buena (3), Excelente (4). La suma de las proporciones dentro de estas cinco variables siempre debe sumar 1 para cada barrio.
* `consulta_medico_especial`: Promedio dentro del barrio del número de veces que los encuestados acudieron a consultas de medicina especializada.
* `calidad_med_especial (1-4)`: Estas variables son la proporción de personas en el barrio que seleccionaron diferentes categorías cuando les preguntaron por la calidad de las consultas con médico especialista de la siguiente manera: Mala (1), Regular (2), Buena (3), Excelente (4). La suma de las proporciones dentro de estas cinco variables siempre debe sumar 1 para cada barrio.
* `consulta_urgencias`: Promedio dentro del barrio del número de veces que los encuestados acudieron a los servicios de urgencias.
* `calidad_urgencias (1-4)`: Estas variables son la proporción de personas en el barrio que seleccionaron diferentes categorías cuando les preguntaron por la calidad de los servicios de urgencias de la siguiente manera: Mala (1), Regular (2), Buena (3), Excelente (4). La suma de las proporciones dentro de estas cinco variables siempre debe sumar 1 para cada barrio.
* `hospitalizacion`: Promedio dentro del barrio del número de veces que los encuestados acudieron a los servicios de urgencias.
* `calidad_hospitalizacion (1-4)`: Estas variables son la proporción de personas en el barrio que seleccionaron diferentes categorías cuando les preguntaron por la calidad de los servicios de hospitalización de la siguiente manera: Mala (1), Regular (2), Buena (3), Excelente (4). La suma de las proporciones dentro de estas cinco variables siempre debe sumar 1 para cada barrio.
## Resumen de medias y cuartiles
```{r}
summary(db_salud)
```
## Barrios con menor representación y notas en el tamaño de muestra
```{r}
db_salud %>%
arrange(n) %>%
head()
```
Luego de identificar los barrios con pocas observaciones, se asumirá que el muestreo fue realizado correctamente y por lo tanto consideramos inclusive las muestras con 4 observaciones como significativas, por lo que no se alterarán las conclusiones con respecto a los máximos y mínimos por cada variable.
## Análisis de correlación
```{r, fig.width=12, fig.height=10}
salud_cor <- db_salud %>%
select_if(is.numeric) %>%
dplyr::select(-n) %>%
.[complete.cases(.),] %>%
cor()
corrplot(salud_cor, type = "upper", order = "hclust", tl.col = "black", tl.srt = 45)
```
No se identifican gran cantidad de variables correlacionadas. Seleccionemos ahora las variables de interés a partir del gráfico de correlación para ver sus gráficos de dispersión y correlaciones exactas.
```{r, fig.width=12, fig.height=10}
ggpairs(data = db_salud %>%
dplyr::select(acceso_salud,
calidad_salud_1,
calidad_salud_3,
calidad_salud_4,
calidad_salud_5),
mapping = aes(alpha = 0.7))
```
De todas las proporciones graficadas, la calidad percibida de la salud es la más correlacionada con el acceso a ésta.
Este resultado es esperado ya que las preguntas son similares en el sentido de que ambas son calificaciones percibidas dadas por el encuestado.
## Escalamiento de datos
```{r}
salud_scaled <- db_salud %>%
mutate_at(vars(-n, -encuesta_calidad.barrio, -encuesta_calidad.comuna), scale)
```
# Agrupamiento mediante k-Means
Se utilizará la metodología de Elbow para identificar el k óptimo que ofreza una menor distancia entre clusters como medida de error `wss`.
```{r}
clustering_salud <- salud_scaled %>%
dplyr::select(-n, -encuesta_calidad.barrio, -encuesta_calidad.comuna)
k_maximo <- 15
wss <- sapply(1:k_maximo,
function(k) {
kmeans(clustering_salud, k, nstart = 10, iter.max = 15 )$tot.withinss
})
plot(1:k_maximo, wss,
type="b", pch = 19, frame = FALSE,
xlab="Número de grupos [K]",
ylab="Total de suma de cuadrados intra-grupos")
k_optimo_kmeans <- 10
k_seleccionado <- 5
```
Para favorecer la interpretabilidad y teniendo en cuenta que no hay agrupamientos incorrectos, se decide utilizar `r k_seleccionado` grupos y realizar su análisis descriptivo que permita llegar a conclusiones dicientes de los barrios analizados.
## Agrupamiento con $K$ seleccionado
Se fija la semilla de números aleatorios para garantizar la reproducibilidad de las conclusiones del agrupamiento, dado que el algoritmo k-Means toma grupos iniciales aleatorios para cada `n_start`.
```{r}
set.seed(3)
agrupamiento_kmeans <- kmeans(clustering_salud, centers = k_seleccionado, nstart = 10, iter.max = 15)
db_salud_kmeans <- bind_cols(db_salud, cluster = agrupamiento_kmeans$cluster)
```
## Mapa para el agrupamiento mediante K-means
```{r, fig.width=10, fig.height=9}
political <- shapefile("Barrio_Vereda/Barrio_Vereda.shp")
Encoding(political@data$NOMBRE) <- "UTF-8"
political$NOMBRE <- political$NOMBRE %>% toupper() %>% str_replace("DE MESA", "DE MESA")
grupos_barrios <- data.frame(barrio_nombre = db_salud$encuesta_calidad.barrio, grupo = agrupamiento_kmeans$cluster)
nombres_mapa <- data.frame(nombre_barrio = political$NOMBRE)
vector_nombres = c()
vector_grupos = c()
for(nombre_mapa in nombres_mapa$nombre_barrio) {
grupo <- grupos_barrios[grupos_barrios$barrio_nombre == nombre_mapa, 2][1]
vector_nombres <- c(vector_nombres, nombre_mapa)
vector_grupos <- c(vector_grupos, grupo)
}
factpal <- colorFactor(rainbow(k_seleccionado), vector_grupos)
mapa_grupos <- tibble(
nombre_barrio = vector_nombres,
grupo = vector_grupos,
color = factpal(grupo),
descripcion = case_when(
grupo == 1 ~ "Grupo 1: Alto uso de recursos, mayor discapacidad",
grupo == 2 ~ "Grupo 2: Bajo uso de recursos - Periferia",
grupo == 3 ~ "Grupo 3: Mayor calidad y acceso a salud",
grupo == 4 ~ "Grupo 4: Enfoque en Prevención",
grupo == 5 ~ "Grupo 5: Alta morbilidad y baja percepción de calidad",
TRUE ~ "Sin muestra representativa")
)
colores <- mapa_grupos %>%
dplyr::select(-nombre_barrio) %>%
distinct(color, .keep_all = TRUE) %>%
arrange(desc(grupo))
leaflet(data = political) %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap) %>%
addPolygons(fill = TRUE, stroke = TRUE, weight = 2, color = mapa_grupos$color,
label = as.character(political$NOMBRE),
popup = as.character(political$NOMBRE)) %>%
addLegend("bottomright", colors = colores$color, labels = as.character(colores$descripcion))
```
## Análisis descriptivo de los grupos obtenidos con k-means
Para este análisis se utiliza la siguiente convención de medidas descriptivas: media (desviación estándar)
```{r}
media_sd <- function(variable) {
paste0(round(mean(variable), 4), " (", round(sd(variable), 4), ")")
}
db_salud_kmeans %>%
dplyr::select(-encuesta_calidad.barrio, -encuesta_calidad.comuna, -n) %>%
group_by(cluster) %>%
summarise_all(~media_sd(.))
```
* <span style="color:`r colores$color[5]`">**Grupo 1: Alto uso de recursos, mayor discapacidad - 27 barrios**</span>
Es un grupo con alto uso de recursos dado que son los que más consultas y urgencias presentan, además de la más alta discapacidad (10.4%). En general, este grupo percibió que tiene un acceso a salud menor que los demás. Es un grupo que geográficamente se encuentra en la periferia del Valle de Aburrá y en algunos barrios del centro de la ciudad.
+ Mayor número de consultas 3.5932 (1.5984)
+ Mayor proporción de calidad de consulta buena 0.8653 (0.1567)
+ Grupo con mayor proporción de discapacidad, 0.1039 (0.0989)
+ Menor acceso a salud 2.7959 (0.2405)
+ Mayor percepción de la calidad de la salud mala 0.1141 (0.127)
+ Mayor negación de la atención por tramitología excesiva 0.1111 (0.3203)
+ Mayor uso de programas de prevención 2.3148 (2.4696)
+ Mayor número de asistencias a urgencias 2.341 (1.9364)
+ Mayor percepción de la calidad de urgencias buena 0.6575 (0.382)
* <span style="color:`r colores$color[4]`">**Grupo 2: Bajo uso de recursos - Periferia - 6 barrios**</span>
Es un grupo que en general hace un uso diferencialmente menor del sistema de salud, esto sustentado en que atienden menos a consultas, programas de prevención, urgencias y hospitalizaciones. Es un grupo que geográficamente está en la periferia del valle de Aburrá, por lo que probablemente hacen uso de los servicios de salud de otros municipios.
+ Menor uso de programas de prevención 0.1667 (0.4082)
+ Menor número de consultas 0.9375 (1.4572)
+ Menor número de asistencias a urgencias 0.3889 (0.9526)
+ Menor cantidad de hospitalizaciones 0.1667 (0.4082)
* <span style="color:`r colores$color[3]`">**Grupo 3: Mayor calidad y acceso a salud - 47 barrios**</span>
Es un grupo que se caracteriza por tener un acceso a la salud considerablemente mayor que los demás, además de que en general calificaron en proporciones altas la calidad de la atención recibida en servicios de consulta y hospitalizaciones como excelente, además de los servicios generales de salud. Es un grupo particularmente concentrado en la comuna 14 - El Poblado y la comuna 11 - Laureles-Estadio.
+ Mayor acceso a salud 3.1303 (0.2539)
+ Mayor percepción de la calidad de la salud excelente 0.1169 (0.0483)
+ Mayor proporción de calidad de consulta especilista excelente 0.2719 (0.1832)
+ Mayor proporción de calidad de las hospitalizaciones en nivel excelente 0.2186 (0.2335)
* <span style="color:`r colores$color[2]`">**Grupo 4: Enfoque en Prevención - 10 barrios**</span>
Es un grupo con un acceso a la salud ligeramente mayor a la media, con enfoque diferencial en el uso de programas de prevención, presenta las mayores negaciones de atenciones debido a la falta de dinero y la desconfianza en el personal médico, el 64.6% de éstos considera que sus programas de prevención son buneos y el 19% los considera excelentes. El 73.32% de este grupo considera que sus atenciones en consulta general han sido buenas.
+ Mayor negación de atención por falta de dinero 0.2065 (0.2006)
+ Mayor negación de atención por desconfianza del personal médico 0.5419 (0.2033)
+ Mayor percepción de la calidad de los programas de prevención excelentes 0.1903 (0.3005)
+ Segunda mayor percepción de la calidad de la consulta general buena 0.7332 (0.0672)
* <span style="color:`r colores$color[1]`">**Grupo 5: Alta morbilidad y baja percepción de calidad 218 barrios**</span>
Es el grupo con mayor porcentaje de morbilidad y con más barrios de la ciudad, la mayoría de éstos considera que los programas de prevención son buenos 79.02%. Sin embargo, padecen un mayor número de hospitalizaciones y atienden a más consultas con especialistas que el resto de los grupos.
+ Mayor morbilidad en los últimos 30 días 0.1541 (0.0535)
+ Mayor negación de atención porque el caso era leve 0.3791 (0.2817)
+ Mayor calidad de la prevención en nivel bueno 0.7902 (0.1376)
+ Mayor proporción de calidad de consulta general mala 0.0649 (0.0585)
+ Mayor número de consultas especialista 2.3941 (0.6001)
+ Mayor proporción de calidad urgencias mala 0.1942 (0.1009)
+ Mayor número de hospitalizaciones 1.5599 (0.5844)
# Agrupamiento Jerárquico
En general no se concluirá con respecto a los resultados del agrupamiento jerárquico, ya que éste no logró distinguir entre grupos de interés y asocia más de 270 barrios en una categoría a pesar de contar con características diferentes.
```{r}
cantidad_grupos_jerarquico <- 5
distancia <- dist(clustering_salud)
agrupamiento <- hclust(distancia, method = "complete")
arbol_corte <- cutree(agrupamiento, k = cantidad_grupos_jerarquico)
db_salud_jer <- bind_cols(db_salud, cluster = arbol_corte)
split_db_salud <- split(db_salud, arbol_corte)
```
## Mapa geográfico usando el agrupamiento jerárquico
```{r, echo=FALSE}
political <- shapefile("Barrio_Vereda/Barrio_Vereda.shp")
Encoding(political@data$NOMBRE) <- "UTF-8"
political$NOMBRE <- political$NOMBRE %>% toupper() %>% str_replace("DE MESA", "DE MESA")
grupos_barrios_jer <- data.frame(barrio_nombre = db_salud$encuesta_calidad.barrio, comuna_nombre = db_salud$encuesta_calidad.comuna, grupo = arbol_corte)
nombres_mapa_jer <- data.frame(nombre_barrio = political$NOMBRE)
vector_nombres_jer = c()
vector_grupos_jer = c()
for(nombre_mapa in nombres_mapa$nombre_barrio) {
grupo <- grupos_barrios_jer[grupos_barrios_jer$barrio_nombre == nombre_mapa, 3][1]
vector_nombres_jer <- c(vector_nombres_jer, nombre_mapa)
vector_grupos_jer <- c(vector_grupos_jer, grupo)
}
factpal_jer <- colorFactor(rainbow(cantidad_grupos_jerarquico), vector_grupos_jer)
mapa_grupos_jer <- tibble(
nombre_barrio = vector_nombres_jer,
grupo = vector_grupos_jer,
color = factpal_jer(grupo)
)
colores_jer <- mapa_grupos_jer %>%
distinct(color, .keep_all = TRUE) %>%
arrange(desc(grupo))
leaflet(data = political) %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap) %>%
addPolygons(fill = TRUE, stroke = TRUE, weight = 2, color = mapa_grupos_jer$color,
label = as.character(political$NOMBRE),
popup = as.character(political$NOMBRE)) %>%
addLegend("bottomright", colors = colores_jer$color, labels = as.character(colores_jer$grupo))
```
## Análisis descriptivo de los grupos obtenidos con el algoritmo jerárquico
Se presentan igualmente las medias y desviaciones estándar de cada grupo utilizando el agrupamiento jerárquico.
```{r, echo=FALSE}
media_sd <- function(variable) {
paste0(round(mean(variable), 4), " (", round(sd(variable), 4), ")")
}
db_salud_jer %>%
dplyr::select(-encuesta_calidad.barrio, -encuesta_calidad.comuna, -n) %>%
group_by(cluster) %>%
summarise_all(~media_sd(.))
```
```{r, include = F}
write_excel_csv2(db_salud, "databases/db_salud.csv")
write_excel_csv2(db_salud_kmeans, "databases/db_salud_kmeans.csv")
```