La intención de este trabajo es conocer el número de distritos con menor cobertura de los programas sociales hasta diciembre del 2024. Para ello, se trabaja con un dataset obtenido del MIDIS en la Plataforma Nacional de Datos abiertos del Estado Peruano.
library(rio)library(dplyr)
Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
'data.frame': 1892 obs. of 16 variables:
$ CUNAMAS - Cuidado Diurno : int 96 NA 0 0 NA 0 0 0 0 0 ...
$ CUNAMAS - Acompañamiento de Familias : int 151 NA 19 10 NA 64 2 8 196 127 ...
$ JUNTOS - Hogares afiliados : int 494 14 106 37 59 191 29 31 658 229 ...
$ JUNTOS - Hogares abonados : int 473 11 100 36 56 190 29 31 648 222 ...
$ FONCODES - Nº usuarios estimados : int NA NA 1640 NA NA 1804 NA NA NA NA ...
$ FONCODES - N° proy. Culminados : int NA NA NA NA NA NA NA NA NA NA ...
$ FONCODES - N° proy. en ejecucion : int NA NA 1 NA NA 2 NA NA NA NA ...
$ FONCODES - N° Hog. Haku Winay -proyectos en ejecucion : int NA NA 400 NA NA 440 NA NA 0 NA ...
$ FONCODES - N° Hog. Haku Winay -proyectos culminados : int NA NA 0 NA NA 0 NA NA 448 NA ...
$ PENSION 65 - Usuarios : int 637 33 58 48 67 133 44 28 378 167 ...
$ QALI WARMA - N° de Niños y niñas atendidos : int 5234 18 252 70 73 372 49 36 1364 477 ...
$ QALI WARMA - N° de IIEE : int 34 4 15 5 9 22 4 2 30 15 ...
$ CONTIGO - Usuarios : int 250 4 16 16 5 23 7 3 83 60 ...
$ PAIS - N° de Tambos prestando servicios : int NA NA NA NA NA NA NA NA NA NA ...
$ PAIS - N° de Atenciones realizadas a través de los Tambos : int NA NA NA NA NA NA NA NA NA NA ...
$ PAIS - N° de Beneficiarios atendidos a través de los Tambos: int NA NA NA NA NA NA NA NA NA NA ...
Los modelos son sensibles a datos perdidos, por lo que es importante identificarlos y tratarlos.
library(naniar)data2|>vis_miss()
colSums(is.na(data2))
CUNAMAS - Cuidado Diurno
397
CUNAMAS - Acompañamiento de Familias
397
JUNTOS - Hogares afiliados
8
JUNTOS - Hogares abonados
10
FONCODES - Nº usuarios estimados
1453
FONCODES - N° proy. Culminados
1703
FONCODES - N° proy. en ejecucion
1583
FONCODES - N° Hog. Haku Winay -proyectos en ejecucion
1124
FONCODES - N° Hog. Haku Winay -proyectos culminados
1124
PENSION 65 - Usuarios
1
QALI WARMA - N° de Niños y niñas atendidos
3
QALI WARMA - N° de IIEE
3
CONTIGO - Usuarios
57
PAIS - N° de Tambos prestando servicios
1491
PAIS - N° de Atenciones realizadas a través de los Tambos
1494
PAIS - N° de Beneficiarios atendidos a través de los Tambos
1494
Los programas que contienen demasiados valores perdidos son PAIS y FONCONDES. Por ello, se procede a retirarlos del dataset.
data2 <-select(data2, -`PAIS - N° de Atenciones realizadas a través de los Tambos`, -`PAIS - N° de Beneficiarios atendidos a través de los Tambos`,-`PAIS - N° de Tambos prestando servicios`, -`PAIS - N° de Tambos prestando servicios`,-`FONCODES - Nº usuarios estimados`,-`FONCODES - N° proy. Culminados`, -`FONCODES - N° proy. en ejecucion`,-`FONCODES - N° Hog. Haku Winay -proyectos en ejecucion`, -`FONCODES - N° Hog. Haku Winay -proyectos culminados`)
Se vuelve a verificar aquellos programas que aún contienen perdidos
library(naniar)data2|>vis_miss()
Para que no existan tantos perdidos, se decide imputar la data.
library(mice)
Warning: package 'mice' was built under R version 4.5.2
Adjuntando el paquete: 'mice'
The following object is masked from 'package:stats':
filter
The following objects are masked from 'package:base':
cbind, rbind
[1] "Frey index : No clustering structure in this data set"
*** : The Hubert index is a graphical method of determining the number of clusters.
In the plot of Hubert index, we seek a significant knee that corresponds to a
significant increase of the value of the measure i.e the significant peak in Hubert
index second differences plot.
*** : The D index is a graphical method of determining the number of clusters.
In the plot of D index, we seek a significant knee (the significant peak in Dindex
second differences plot) that corresponds to a significant increase of the value of
the measure.
*******************************************************************
* Among all indices:
* 8 proposed 2 as the best number of clusters
* 9 proposed 3 as the best number of clusters
* 2 proposed 4 as the best number of clusters
* 4 proposed 5 as the best number of clusters
***** Conclusion *****
* According to the majority rule, the best number of clusters is 3
*******************************************************************
El resultado arroja que la mejor opción es trabajas con 3 clusters.
Ahora trabajamos propiamente con k means, con tres centros, 100 interacciones máximas y 15 puntos iniciales:
Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
ℹ Please use tidy evaluation idioms with `aes()`.
ℹ See also `vignette("ggplot2-in-packages")` for more information.
ℹ The deprecated feature was likely used in the factoextra package.
Please report the issue at <https://github.com/kassambara/factoextra/issues>.
Retomamos la recomendación arrojada por NbClust en K-means y trabajamos con 3 clusters.
aglomerativo =hcut(x = distancias, k =3, hc_func='agnes', hc_method ="ward.D")
Exploramos el cluster creado
fviz_dend(aglomerativo, rect =TRUE, cex =0.5)
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
ℹ The deprecated feature was likely used in the factoextra package.
Please report the issue at <https://github.com/kassambara/factoextra/issues>.
Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
of ggplot2 3.3.4.
ℹ The deprecated feature was likely used in the factoextra package.
Please report the issue at <https://github.com/kassambara/factoextra/issues>.
El coeficiente de aglomeración (ac) es de 0.996. Esto es un buen indicador. De la misma manera, si se compara el coeficiente de Silhouette (avd.width), este es de 0.533.
Decisión final
Método
Coeficiente de Silhouette promedio
K-means
0.551
Jerárquico
0.533
En base a los resultados del coeficiente de Silhouette, el el método que mejor agrupo los datos fue k-means.
Análisis final
Se procede a incluir los resultados de k-means en la data final y
data2<-data2 %>%mutate(cluster=km$cluster) data2%>%group_by(cluster) %>%summarise(`CUNAMAS - Cuidado Diurno`=mean(`CUNAMAS - Cuidado Diurno`),`CUNAMAS - Acompañamiento de Familias`=mean(`CUNAMAS - Acompañamiento de Familias`), `JUNTOS - Hogares afiliados`=mean(`JUNTOS - Hogares afiliados`), `JUNTOS - Hogares abonados`=mean(`JUNTOS - Hogares abonados`), `PENSION 65 - Usuarios`=mean(`PENSION 65 - Usuarios`), `QALI WARMA - N° de Niños y niñas atendidos`=mean(`QALI WARMA - N° de Niños y niñas atendidos`), `QALI WARMA - N° de IIEE`=mean(`QALI WARMA - N° de IIEE`), `CONTIGO - Usuarios`=mean(`CONTIGO - Usuarios`))
Resultado: El grupo de distritos con menos acceso a los programas sociales es el grupo 3 ya que sus promedios son inferiores a la media en cada una de las variables observadas. Esto es alarmante ya que a su vez este es el grupo con mayor número de casos (1424), lo que quiere indicar que la mayor parte de distritos no acceden a estos programas.