Consulta el proyecto completo

CONEVAL-Índice de rezago social publicado en Datos Abiertos, México

K-medias

datos = read.csv(ruta,header = T)
datos = datos[-1,]
datos = datos[1:32,-1]
rownames(datos) = datos$ent
datos = datos[,c(-1,-2,-17)]
head(datos[,14])
## [1] "Muy bajo" "Bajo"     "Bajo"     "Medio"    "Muy bajo" "Bajo"
datos$grs = factor(datos$grs)
clasificacion = datos$grs
levels(clasificacion)
## [1] "Alto"     "Bajo"     "Medio"    "Muy alto" "Muy bajo"
datos = datos[,-14]
dim(datos)
## [1] 32 13
str(datos)
## 'data.frame':    32 obs. of  13 variables:
##  $ pob_tot   : int  1425607 3769020 798447 928363 3146771 731391 5543828 3741869 9209944 1832650 ...
##  $ i_analf   : num  2.11 1.82 2.33 5.85 1.67 ...
##  $ i_asistesc: num  5.01 6.51 4.23 6.4 4.98 ...
##  $ i_edbasinc: num  23.5 24.6 23.9 29.7 21.3 ...
##  $ i_sdsalud : num  18.4 22.2 16.2 21.9 19 ...
##  $ i_ptierra : num  0.751 1.973 4.693 2.748 0.808 ...
##  $ i_nosan   : num  0.623 0.659 1.25 3.617 0.709 ...
##  $ i_noagua  : num  0.554 2.082 5.002 3.975 0.976 ...
##  $ i_nodren  : num  0.616 3.473 2.578 5.103 1.248 ...
##  $ i_noelec  : num  0.313 0.782 1.181 1.351 0.266 ...
##  $ i_nolav   : num  13 17.3 31.5 22.7 13.4 ...
##  $ i_noref   : num  5.39 5.07 8.17 15.98 3.26 ...
##  $ irs       : num  -1.102 -0.642 -0.317 0.245 -1.148 ...
clasificacion
##  [1] Muy bajo Bajo     Bajo     Medio    Muy bajo Bajo     Muy alto Bajo    
##  [9] Muy bajo Medio    Bajo     Muy alto Alto     Bajo     Bajo     Alto    
## [17] Bajo     Medio    Muy bajo Muy alto Alto     Bajo     Bajo     Alto    
## [25] Bajo     Bajo     Medio    Bajo     Medio    Muy alto Medio    Bajo    
## Levels: Alto Bajo Medio Muy alto Muy bajo
#DATOS SIN ESTANDARIZAR Y SIN LA VARIABLE POBLACION
sndatos = datos[,-1]
boxplot(sndatos)

Observamos a través de los gráficos de cajas y alambres como todas las variables presentan datos que se alejan considerablemente de sus rangos.

# Distancia euclídiana 
distancias = get_dist(sndatos,method = "euclidean")
fviz_dist(distancias,gradient = list(low ="blue",
                                     mid = "white",
                                     high = "red"))

fviz_nbclust(x = sndatos, FUNcluster = kmeans, method = "wss", k.max = 10, diss = get_dist(sndatos, method = "euclidean"), nstart = 32) 

Información de los centroides

set.seed(123) 

km_clusters <- kmeans(x = sndatos, centers = 3, nstart = 32) 
k3 <- kmeans(sndatos, centers = 3, nstart = 32) 

# Comparativa de los indicadores vs clústers
table(clasificacion,k3$cluster) 
##              
## clasificacion  1  2  3
##      Alto      0  3  1
##      Bajo      0  2 12
##      Medio     0  2  4
##      Muy alto  3  1  0
##      Muy bajo  0  0  4
fviz_cluster(k3, data = sndatos) 

Análisis Jerárquico

datos = read.csv(ruta,header = T) 

datos<-filter(datos,anio == 2020) 

datos<- datos[-1,]
rownames(datos)<-paste(datos$ent) 

datos<-datos[ ,-c(1:4)] 

sum(is.na(datos)) 
## [1] 0
datos<-datos[ ,-c(13:14)] 

datos<- na.omit(datos) 
# Enlace completo-distancia euclidiana
hccompleto<- hclust (dist(datos), method="complete") 
# Enlace promedio
hcmedio <- hclust(dist(datos), method="average") 
 # Enlace simple
hcsimple <- hclust(dist(datos), method="single") 
# Enlace centroide
hccentro <-hclust(dist(datos), method="centroid") 
# Enlace Ward
hcward <-hclust(dist(datos), method = "ward.D") 
# Dendograma
plot(hccompleto,main="Complete Linkage ", xlab="", sub="",cex=.9)
rect.hclust(hccompleto, k=3, border=3)

plot(hcmedio,main="Average Linkage ", xlab="", sub="",cex=.9)
rect.hclust(hcmedio, k=3, border=3) 

plot(hcsimple,main="Single Linkage ", xlab="", sub="",cex=.9)
rect.hclust(hcsimple, k=3, border=3)

plot(hccentro,main="Centroide Linkage ", xlab="", sub="",cex=.9)
rect.hclust(hccentro, k=3, border=3) 

plot(hcward,main="Ward Linkage ", xlab="", sub="",cex=.9)
rect.hclust(hcward, k=3, border=3) 

fviz_dend(x = hcward, k = 3, rect = TRUE, cex = 0.6, palette = "lancet") + labs(title = "Ward Linkage", subtitle = "Distancia euclídea, Lincage Ward, K=3") 

# Visualizar clúster

D <- cutree(hcward, k=3) 

fviz_cluster(list(data=datos, cluster=D))