Tarea 3

Apartado 1

Describe mediante un boxplot múltiple los porcentajes de votos a vox, pp, cs, psoe, masmadrid, podemos, otros y abstencion. Interpreta brevemente la gráfica. (Nota: si X es una tabla con múltiples columnas, boxplot(X) representa el diagrama de cajas de cada columna)

Antes de todo vamos a realizar una visualización preliminar con los datos de interés.

dat = read.table("madrid_2021.txt",header=TRUE)
dat2=dat[,3:10]
row.names(dat2)=dat$barrio
summary(dat2)
##        pp             psoe             cs             vox        
##  Min.   :15.10   Min.   : 3.00   Min.   :1.000   Min.   : 3.500  
##  1st Qu.:27.00   1st Qu.: 9.55   1st Qu.:2.100   1st Qu.: 5.100  
##  Median :33.10   Median :12.10   Median :2.800   Median : 5.800  
##  Mean   :35.57   Mean   :11.52   Mean   :2.853   Mean   : 6.453  
##  3rd Qu.:44.30   3rd Qu.:13.75   3rd Qu.:3.550   3rd Qu.: 7.300  
##  Max.   :66.20   Max.   :17.30   Max.   :5.400   Max.   :12.800  
##    masmadrid        podemos           otros        abstencion   
##  Min.   : 2.10   Min.   : 0.600   Min.   :0.50   Min.   :12.20  
##  1st Qu.:11.00   1st Qu.: 3.650   1st Qu.:1.15   1st Qu.:18.50  
##  Median :13.30   Median : 5.700   Median :1.30   Median :23.20  
##  Mean   :13.02   Mean   : 5.294   Mean   :1.31   Mean   :23.98  
##  3rd Qu.:15.20   3rd Qu.: 6.750   3rd Qu.:1.50   3rd Qu.:29.00  
##  Max.   :22.70   Max.   :12.200   Max.   :2.40   Max.   :46.10

Se ve perfectamente que las variables no tienen el mismo recorrido y sería necesario estandarizar los datos, no obstante, en el enunciado nos piden que trabajemos con los datos sin estandarizar.

bx1 = boxplot(dat2, col=c("dodgerblue1","firebrick2","darkorange1","chartreuse2","paleturquoise1","purple2","salmon1","seashell3"))

#if(length(bx1$out)!= 0){
  #out.rows <- sapply(1:length(bx1$out), function(i)
   # which(dat2[ ,bx1$group[i]] == bx1$out[i]))
 # text(bx1$group, bx1$out, rownames(dat2), pos=4, cex = 0.8)
#}
#esta instrucción es para poner el nombre de los barrios en los valores atípicos pero en este caso no lo he puesto ya que al haber tantos en el boxplot quedan los nombres solapados y no se entiende el gráfico

Al hacer el boxplot podemos observar que el partido que tiene mayor porcentaje de votos es el PP, seguido de las abstenciones, Más Madrid, PSOE, Vox, Podemos, Ciudadanos y finalmente el resto de partidos.

Apartado 2

Obten la matriz de correlaciones de las variables vox, pp, cs, psoe, masmadrid, podemos, otros y abstencion. Representa mediante gráficos de dispersión las relaciones entre las variables. Interpreta los resultados.

Para medir el grado de relación entre las variables se calcula la matriz de correlaciones (en este caso da igual si los datos están estandariados o no, puesto que la correlación es independiente de la escala de medida de las variables).

r=cor(dat2)
print(r,digits=3)
##                pp   psoe     cs    vox masmadrid podemos  otros abstencion
## pp          1.000 -0.877  0.620  0.858    -0.772  -0.910 -0.809     -0.830
## psoe       -0.877  1.000 -0.447 -0.842     0.729   0.809  0.785      0.605
## cs          0.620 -0.447  1.000  0.380    -0.118  -0.501 -0.348     -0.835
## vox         0.858 -0.842  0.380  1.000    -0.779  -0.843 -0.693     -0.637
## masmadrid  -0.772  0.729 -0.118 -0.779     1.000   0.854  0.707      0.316
## podemos    -0.910  0.809 -0.501 -0.843     0.854   1.000  0.706      0.619
## otros      -0.809  0.785 -0.348 -0.693     0.707   0.706  1.000      0.566
## abstencion -0.830  0.605 -0.835 -0.637     0.316   0.619  0.566      1.000
pairs(dat2,col="skyblue3")

library(car)
## Loading required package: carData
library(corrplot) 
## corrplot 0.90 loaded
corrplot(r,method = "ellipse")

Observando la matriz de correlaciones o el gráfico corrplot se puede ver que existen grandes correlaciones entre las variables. Por ejemplo, entre los votantes de Más Madrid y Podemos hay una correlación de 0.854, lo cual es esperable ya que ambos son partidos de izquierdas y les suele votar la gente que comparte la misma ideología.

Por otro lado, Podemos y PP también presentan una correlación alta (-0.910) pero en este caso es negativa, lo cual significa que presentan una fuerte relación pero en este caso es inversa. Esto tiene sentido puesto que la gente que vota a estos partidos tiene una ideología muy diferente.

Si consideramos que las correlaciones son suficientemente grandes pueden influir en la matriz de distancias y sería conveniente realizar un análisis de componentes primero.

Apartado 3

Realiza el dendrograma de los datos sin estandarizar, utilizando la distancia euclídea y el método de “ward.D2”. Según el árbol, obtén la solución con tres clusters. Indica el número de observaciones de cada cluster.

Si suponemos, inicialmente, que las correlaciones entre las variables de interés no son suficientemente elevadas como para realizar un análisis de componentes, realizaremos el análisis de clúster jerárquico con la distancia euclídea.

d =dist(dat2,method ="euclidean",diag =T,upper =T)
fit =hclust(d,method ="ward.D2")
plot(fit) 
j3 = cutree(fit, k=3) 
rect.hclust(fit, k=3, border="violetred3")

table(grupos=j3)
## grupos
##  1  2  3 
## 60 44 27

Al realizar el dendrograma con la distancia euclídea y el método “Ward.D2” y obteniendo la solución de 3 grupos obstenemos 60 barrios agrupados en el clúster 1, 44 barrios para el clúster 2 y 27 barrios para el clúster 3.

scatterplotMatrix(dat2,groups=j3)

Los gráficos de dispersión 2 a 2, también es una manera de visualizar las diferencias entre los tres grupos. Si nos fijamos en la diagonal del gráfico, se muestra una estimación “no-paramétricas” (suave) del histograma de cada componente para cada grupo. Se aprecia claramente la diferencia entre los grupos.

Apartado 4

Calcula las medias del porcentaje de votos a cada partido (vox, pp, cs, psoe, masmadrid, podemos, otros y abstencion) para cada cluster. Realiza un gráfico boxplot de los votos al pp para cada cluster. Lo mismo para psoe y abstencion. Asígnale un nombre a cada uno de los tres clusters y proporciona el nombre de los barrios del cluster con una media más alta de votos al PP. Utiliza la función fviz_cluster() del paquete factoextra para visualizar los tres grupos. En el gráfico identifica cada punto con el nombre del barrio.

A la hora de asignar nombre a cada cluster se ha denominado “medio” al clúster 1, ya que puede considerarse que la gente que vive en esos barrios tiene un ingreso medio. El clúster 2 se llamaría “bajo” porque se encuentran los barrios más humildes de clase obrera y el clúster 3 se denominaría “alto” ya que serían los barrios con unos ingresos más altos.

medio=rownames(dat2)[j3==1]
bajo=rownames(dat2)[j3==2]
alto=rownames(dat2)[j3==3]
j3_names=factor(j3,labels=c("Medio_j","Bajo_j","Alto_j")) #otra forma de asignar el nombre a los clusters, la letra j indica que son según el análisis jerárquico ya que más adelante se usará la letra k para indicar que son los resultados del k-means

Las medias del porcentaje de votos a cada partido para cada clúster son:

mu1 =sapply(dat2[j3==1,], mean)
mu2 =sapply(dat2[j3==2,], mean)
mu3 =sapply(dat2[j3==3,], mean)
cbind(medio=mu1,alto=mu3,bajo=mu2)
##                medio       alto      bajo
## pp         35.591667 53.8148148 24.331818
## psoe       12.073333  6.9777778 13.563636
## cs          3.285000  3.4814815  1.879545
## vox         6.226667  9.1000000  5.136364
## masmadrid  14.776667  7.0518519 14.295455
## podemos     5.448333  2.2296296  6.963636
## otros       1.350000  0.8814815  1.518182
## abstencion 21.240000 16.4740741 32.320455

Si realizamos un boxplot de los votos al PP, PSOE y abstenciones para cada clúster podemos observar que en el caso del PP, los barrios que más le votan son los del clúster 3, es decir los barrios más ricos. Los cuales son:

sort(alto)
##  [1] "Almagro"              "Aravaca"              "Atalaya"             
##  [4] "Castellana"           "Castilla"             "Castillejos"         
##  [7] "Ciudad Universitaria" "Corralejos"           "Costillares"         
## [10] "El Goloso"            "El Plantio"           "El Viso"             
## [13] "Estrella"             "Fuentelarreina"       "Goya"                
## [16] "Hispanoamerica"       "Jeronimos"            "Lista"               
## [19] "Mirasierra"           "Nino Jesus"           "Nueva Espana"        
## [22] "Palomas"              "Piovera"              "Recoletos"           
## [25] "Valdefuentes"         "Valdemarin"           "Vallehermoso"
#par(mfrow=c(3,1))
boxplot(dat2$pp~j3_names,col=c("khaki1","paleturquoise2","palevioletred1"),horizontal =T,xlab = "Votos al PP",
        ylab = "Grupos")

boxplot(dat2$psoe~j3_names,col=c("khaki1","paleturquoise2","palevioletred1"),horizontal =T,xlab = "Votos al PSOE",
        ylab = "Grupos")

boxplot(dat2$abstencion~j3_names,col=c("khaki1","paleturquoise2","palevioletred1"),horizontal =T,xlab = "Abstención",
        ylab = "Grupos")

#par(mfrow=c(1,1))

Por el contrario en el caso del PSOE, los barrios que más le votan son los del clúster 2 (bajo) y clúster 1 (medio). Mientras que los barrios que presentan mayor porcentaje de abstención son los del clúster 2 (bajo).

Una forma de visualizar el resultado del análisis clúster sería con el siguiente gráfico.

library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(list(data=dat2,cluster=j3_names))

Otro gráfico interesante es el siguiente:

scatterplot(dat2$pp,dat2$abstencion,
            groups = j3_names, 
            regLine = F, smooth = F, 
            ellipse = T, 
            col=c("pink1","darkseagreen1","skyblue1"), cex = 1.2)

Aquí se puede observar que hay tres regiones bien delimitadas para cada grupo con dos variables que he escogido (votos al PP y abstenciones) por tener las medias más altas en porcentaje de votos.

Los puntos azules son los que corresponen al cluster e los barrios con rentas altas y al estar a la derecha significa que votan más al PP y al estar abajo que tiene pocas abstenciones.

Los puntos verdes son los del cluster de los barrios con rentas bajas y al posicionarse en el gráfico arriba a la izquierda quiere decir que tienen más abstenciones frente a votos al PP.

Finalmente los puntos rojos, los del cluster de los barrios con rentas medias se situan en el gráfico en una zona media.

El solapamiento que puede haber entre los grupos no es importante, ya que en este gráfico tan solo están representadas dos variables y existen más que ayudan a diferenciar entre los tres grupos.

Apartado 5

Realiza el análisis cluster utilizando el método kmeans. Haz tres clusters (utiliza nstart=25). Se recomienda utilizar una semilla para inicializar el proceso de cálculo de manera que se puedan repetir las resultados. Proporciona el número de observaciones en cada cluster.

Ahora vamos a realizar el análisis cluster pero con el método de k-means. Con este método nos surgen dos problemas, el primero la selección de los centroides iniciales, que en este caso serán aleatorios y fijaremos una semilla para que se puedan repetir los resultados.

Otro problema es la elección del número de k grupos, para ello utilizaremos el siguiente gráfico de sedimentación.

set.seed(123) 
fviz_nbclust(dat2, kmeans, method = "wss")

En dicho gráfico podemos observar que se forma un codo en k=3 ó k=4. En este apartado realiaremos el análisis con k=3 y posteriormente realizaremos el análisis con k=4 y k=5.

k3 =kmeans(dat2,centers =3,nstart =25)
k3
## K-means clustering with 3 clusters of sizes 45, 48, 38
## 
## Cluster means:
##         pp      psoe       cs      vox masmadrid  podemos     otros abstencion
## 1 24.05111 13.680000 1.904444 5.060000 14.702222 7.077778 1.5066667   32.02889
## 2 34.03958 12.362500 3.189583 6.091667 15.239583 5.729167 1.4125000   21.92083
## 3 51.12895  7.910526 3.552632 8.557895  8.234211 2.631579 0.9473684   17.04737
## 
## Clustering vector:
##              Palacio          Embajadores               Cortes 
##                    2                    1                    2 
##             Justicia          Universidad                  Sol 
##                    2                    1                    1 
##             Imperial              Acacias              Chopera 
##                    2                    2                    2 
##              Legazpi             Delicias      Palos de Moguer 
##                    2                    2                    2 
##               Atocha             Pacifico              Adelfas 
##                    2                    2                    2 
##             Estrella                Ibiza            Jeronimos 
##                    3                    3                    3 
##           Nino Jesus            Recoletos                 Goya 
##                    3                    3                    3 
##     Fuente del Berro           Guindalera                Lista 
##                    2                    3                    3 
##           Castellana              El Viso          Prosperidad 
##                    3                    3                    3 
##        Ciudad Jardin       Hispanoamerica         Nueva Espana 
##                    2                    3                    3 
##             Castilla        Bellas Vistas       Cuatro Caminos 
##                    3                    1                    3 
##          Castillejos             Almenara        Valdeacederas 
##                    3                    1                    1 
##           Berruguete           Gaztambide             Arapiles 
##                    1                    3                    2 
##            Trafalgar              Almagro           Rios Rosas 
##                    2                    3                    3 
##         Vallehermoso             El Pardo       Fuentelarreina 
##                    3                    2                    3 
##          Pena Grande             El Pilar               La Paz 
##                    2                    2                    3 
##             Valverde           Mirasierra            El Goloso 
##                    2                    3                    3 
##        Casa de Campo            Arguelles Ciudad Universitaria 
##                    2                    3                    3 
##           Valdezarza           Valdemarin           El Plantio 
##                    2                    3                    3 
##              Aravaca         Los Carmenes     Puerta del Angel 
##                    3                    1                    1 
##               Lucero               Aluche           Campamento 
##                    1                    2                    2 
##       Cuatro Vientos          Las Aguilas             Comillas 
##                    2                    2                    1 
##               Opanel           San Isidro         Vista Alegre 
##                    1                    1                    1 
##        Puerta Bonita           Buenavista             Abrantes 
##                    1                    2                    1 
##            Orcasitas              Orcasur           San Fermin 
##                    1                    1                    1 
##          Almendrales             Moscardo                Zofio 
##                    1                    1                    1 
##           Pradolongo            Entrevias            San Diego 
##                    1                    1                    1 
##      Palomeras Bajas    Palomeras Sureste             Portazgo 
##                    1                    1                    1 
##             Numancia              Pavones              Horcajo 
##                    1                    1                    2 
##           Marroquina          Media Legua            Fontarron 
##                    2                    2                    1 
##            Vinateros               Ventas         Pueblo Nuevo 
##                    2                    1                    1 
##             Quintana           Concepcion          San Pascual 
##                    2                    2                    2 
##    San Juan Bautista               Colina              Atalaya 
##                    3                    3                    3 
##          Costillares              Palomas              Piovera 
##                    3                    3                    3 
##             Canillas        Pinar del Rey     Apostol Santiago 
##                    2                    2                    2 
##         Valdefuentes           San Andres        San Cristobal 
##                    3                    1                    1 
##             Butarque          Los Rosales          Los Angeles 
##                    1                    1                    1 
##           VallecasCH        Santa Eugenia      VallecasEnsanch 
##                    1                    2                    2 
##          VicalvaroCH               Ambroz          Valderrivas 
##                    1                    2                    2 
##            Canaveral             Simancas               Hellin 
##                    2                    1                    1 
##              Amposta                Arcos                Rosas 
##                    1                    1                    2 
##                Rejas           Canillejas          El Salvador 
##                    2                    2                    2 
##     Alameda de Osuna           Aeropuerto            BarajasCH 
##                    3                    1                    2 
##                Timon           Corralejos 
##                    2                    3 
## 
## Within cluster sum of squares by cluster:
## [1] 2170.760 2001.534 2189.758
##  (between_SS / total_SS =  78.3 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
k3$size #numero de observaciones para cada grupo
## [1] 45 48 38

Con este método el cluster 1 tendría 45 barrios, el cluster 2 tendría 48 barrios y el cluster 3 38 barrios. Más adelante denominaremos cada cluster según las rentas de los barrios como hicimos con los resultados del método jerárquico.

Apartado 6

Repite los pasos del apartado 4 y describe la solución obtenida de kmeans. Compara los resultados de los dos métodos: hclust y kmeans.

Las medias para cada cluster serían:

mk3=k3$centers #medias
print(mk3,digits=4)
##      pp   psoe    cs   vox masmadrid podemos  otros abstencion
## 1 24.05 13.680 1.904 5.060    14.702   7.078 1.5067      32.03
## 2 34.04 12.362 3.190 6.092    15.240   5.729 1.4125      21.92
## 3 51.13  7.911 3.553 8.558     8.234   2.632 0.9474      17.05

A la hora de asignar nombres en este caso el cluster 1 serían los barrios de rentas bajas, el cluster 2 los barrios de clase media y el cluster 3 los barrios de clase alta. (Para diferenciarlos de los grupos obtenidos en el análisis jerárquico, los del k-means los hemos designado con la letra “k” al final).

k3_names = factor(k3$cluster, labels = c("Bajo_k","Medio_k","Alto_k"))
boxplot(dat2$pp~k3_names,col=c("khaki1","paleturquoise2","palevioletred1"),horizontal =T,xlab = "Votos al PP",
        ylab = "Grupos")

Los gráficos box-plot del método k-means salen similares a los del método jerárquico. En el caso de votos al PP, el cluster que presenta una media de votos más alta es el de los barrios de clase alta. Estos barrios son:

(sel = which(k3_names =="Alto_k"))
##  [1]  16  17  18  19  20  21  23  24  25  26  27  29  30  31  33  34  38  41  42
## [20]  43  45  48  50  51  53  54  56  57  58  97  98  99 100 101 102 106 127 131
dat[sel,"barrio"]
##  [1] "Estrella"             "Ibiza"                "Jeronimos"           
##  [4] "Nino Jesus"           "Recoletos"            "Goya"                
##  [7] "Guindalera"           "Lista"                "Castellana"          
## [10] "El Viso"              "Prosperidad"          "Hispanoamerica"      
## [13] "Nueva Espana"         "Castilla"             "Cuatro Caminos"      
## [16] "Castillejos"          "Gaztambide"           "Almagro"             
## [19] "Rios Rosas"           "Vallehermoso"         "Fuentelarreina"      
## [22] "La Paz"               "Mirasierra"           "El Goloso"           
## [25] "Arguelles"            "Ciudad Universitaria" "Valdemarin"          
## [28] "El Plantio"           "Aravaca"              "San Juan Bautista"   
## [31] "Colina"               "Atalaya"              "Costillares"         
## [34] "Palomas"              "Piovera"              "Valdefuentes"        
## [37] "Alameda de Osuna"     "Corralejos"
boxplot(dat2$psoe~k3_names,col=c("khaki1","paleturquoise2","palevioletred1"),horizontal =T,xlab = "Votos al PSOE",
        ylab = "Grupos")

boxplot(dat2$abstencion~k3_names,col=c("khaki1","paleturquoise2","palevioletred1"),horizontal =T,xlab = "Abstención",
        ylab = "Grupos")

Por el contrario en el caso del PSOE los barrios que más le votan son los del cluster 1 (los barrios de rentas bajas). Al igual que las abstenciones que la media más alta también la tiene el cluster de los barrios de clase baja.

Si utilizamos la función fviz_cluster para visualizar los clusters el gráfico sería:

fviz_cluster(k3, dat2, ellipse.type = "convex", palette = "rainbow_hcl")

Para comparar los resultados obtenidos con el método jerárquico y el k-means vamos a realizar una tabla para visualizar cuantos barrios se clasifican en el mismo cluster y cuantos se clasificarían en otro.

j3_names = relevel(j3_names,ref="Alto_j")
table(Grupos_J=j3_names,Grupos_K=k3_names)
##          Grupos_K
## Grupos_J  Bajo_k Medio_k Alto_k
##   Alto_j       0       0     27
##   Medio_j      4      45     11
##   Bajo_j      41       3      0

En la tabla podemos comparar las diferencias de los resultados obtenidos con el método jerárquico y el método k-means. Por un lado, de los 27 barrios que el método jerárquico clasificaba como los de las rentas altas con el método k-means también los clasifica como barrios de renta alta. En el caso de los 44 barrios de renta baja que clasificaba el método jerárquico, el método k-means coincide con 41, pero hay 3 barrios que los clasifica en los de renta media, los cuales son:

(sel1 = which(k3_names =="Medio_k" & j3_names == "Bajo_j"))
## [1]  94 125 129
dat[sel1,"barrio"]
## [1] "Quintana"   "Canillejas" "BarajasCH"

Lo cual es esperable ya que estos barrios podrían ser considerados de renta baja o de renta media.

En el caso de los barrios que el método jerárquico clasifica como de renta media hay un poco más de discrepancia. De los 60 barrios que el método jerárquico clasifica en renta media, el método k-means coincide en 45. Sin embargo hay 4 barrios que clasifica como de reta baja, los cuales son:

(sel2 = which(k3_names =="Bajo_k" & j3_names == "Medio_j"))
## [1]   5  86 109 111
dat[sel2,"barrio"]
## [1] "Universidad" "Pavones"     "Butarque"    "Los Angeles"

Y hay otros 11 barrios que el método k-means los clasificaría como renta alta, los cuales son:

(sel3 = which(k3_names =="Alto_k" & j3_names == "Medio_j"))
##  [1]  17  23  27  33  38  42  48  53  97  98 127
dat[sel3,"barrio"]
##  [1] "Ibiza"             "Guindalera"        "Prosperidad"      
##  [4] "Cuatro Caminos"    "Gaztambide"        "Rios Rosas"       
##  [7] "La Paz"            "Arguelles"         "San Juan Bautista"
## [10] "Colina"            "Alameda de Osuna"

Apartado 7

Obten la solución de kmeans con 3, 4 y 5 grupos. Representa las tres soluciones utilizando la función fviz_clsuter() e interpreta los resultados.

La solución para k=3 sería la que se ha obtenido en el apartado 5 y 6

#k3 =kmeans(dat2,centers =3,nstart =25)
#k3
#la solución para k=3 ya se ha realizado en los apartados 5 y 6
k4 =kmeans(dat2,centers =4,nstart =25)
k4
## K-means clustering with 4 clusters of sizes 27, 50, 31, 23
## 
## Cluster means:
##         pp      psoe       cs      vox masmadrid  podemos    otros abstencion
## 1 42.73333 10.381481 3.514815 7.285185 11.559259 3.966667 1.170370   19.38519
## 2 31.05000 12.840000 2.906000 5.654000 15.820000 6.286000 1.428000   24.01000
## 3 22.25161 13.967742 1.703226 4.935484 14.538710 7.270968 1.564516   33.77742
## 4 54.91304  6.708696 3.513043 9.256522  6.617391 2.030435 0.873913   16.10000
## 
## Clustering vector:
##              Palacio          Embajadores               Cortes 
##                    2                    3                    2 
##             Justicia          Universidad                  Sol 
##                    2                    2                    2 
##             Imperial              Acacias              Chopera 
##                    2                    2                    2 
##              Legazpi             Delicias      Palos de Moguer 
##                    2                    2                    2 
##               Atocha             Pacifico              Adelfas 
##                    2                    1                    1 
##             Estrella                Ibiza            Jeronimos 
##                    1                    1                    1 
##           Nino Jesus            Recoletos                 Goya 
##                    4                    4                    4 
##     Fuente del Berro           Guindalera                Lista 
##                    1                    1                    4 
##           Castellana              El Viso          Prosperidad 
##                    4                    4                    1 
##        Ciudad Jardin       Hispanoamerica         Nueva Espana 
##                    1                    4                    4 
##             Castilla        Bellas Vistas       Cuatro Caminos 
##                    4                    2                    1 
##          Castillejos             Almenara        Valdeacederas 
##                    1                    2                    3 
##           Berruguete           Gaztambide             Arapiles 
##                    3                    1                    1 
##            Trafalgar              Almagro           Rios Rosas 
##                    1                    4                    1 
##         Vallehermoso             El Pardo       Fuentelarreina 
##                    4                    1                    4 
##          Pena Grande             El Pilar               La Paz 
##                    1                    2                    1 
##             Valverde           Mirasierra            El Goloso 
##                    1                    4                    4 
##        Casa de Campo            Arguelles Ciudad Universitaria 
##                    2                    1                    1 
##           Valdezarza           Valdemarin           El Plantio 
##                    2                    4                    4 
##              Aravaca         Los Carmenes     Puerta del Angel 
##                    4                    2                    3 
##               Lucero               Aluche           Campamento 
##                    2                    2                    1 
##       Cuatro Vientos          Las Aguilas             Comillas 
##                    2                    2                    2 
##               Opanel           San Isidro         Vista Alegre 
##                    2                    3                    3 
##        Puerta Bonita           Buenavista             Abrantes 
##                    3                    2                    3 
##            Orcasitas              Orcasur           San Fermin 
##                    3                    3                    3 
##          Almendrales             Moscardo                Zofio 
##                    3                    3                    3 
##           Pradolongo            Entrevias            San Diego 
##                    3                    3                    3 
##      Palomeras Bajas    Palomeras Sureste             Portazgo 
##                    3                    3                    3 
##             Numancia              Pavones              Horcajo 
##                    3                    2                    2 
##           Marroquina          Media Legua            Fontarron 
##                    2                    2                    3 
##            Vinateros               Ventas         Pueblo Nuevo 
##                    2                    2                    2 
##             Quintana           Concepcion          San Pascual 
##                    2                    2                    1 
##    San Juan Bautista               Colina              Atalaya 
##                    1                    1                    4 
##          Costillares              Palomas              Piovera 
##                    4                    4                    4 
##             Canillas        Pinar del Rey     Apostol Santiago 
##                    2                    2                    2 
##         Valdefuentes           San Andres        San Cristobal 
##                    4                    3                    3 
##             Butarque          Los Rosales          Los Angeles 
##                    2                    3                    2 
##           VallecasCH        Santa Eugenia      VallecasEnsanch 
##                    3                    2                    2 
##          VicalvaroCH               Ambroz          Valderrivas 
##                    3                    2                    2 
##            Canaveral             Simancas               Hellin 
##                    2                    2                    3 
##              Amposta                Arcos                Rosas 
##                    3                    3                    2 
##                Rejas           Canillejas          El Salvador 
##                    2                    2                    1 
##     Alameda de Osuna           Aeropuerto            BarajasCH 
##                    1                    3                    2 
##                Timon           Corralejos 
##                    2                    4 
## 
## Within cluster sum of squares by cluster:
## [1]  655.2844 1857.5234 1335.4484  844.2130
##  (between_SS / total_SS =  84.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
k5 =kmeans(dat2,centers =5,nstart =25)
k5
## K-means clustering with 5 clusters of sizes 27, 24, 31, 37, 12
## 
## Cluster means:
##         pp      psoe       cs       vox masmadrid  podemos    otros abstencion
## 1 47.54444  8.977778 3.662963  8.000000  9.688889 3.159259 1.055556   17.92222
## 2 20.91250 14.291667 1.604167  4.870833 14.675000 7.525000 1.595833   34.54167
## 3 35.95161 12.054839 3.570968  6.174194 15.000000 5.332258 1.367742   20.53226
## 4 28.62432 13.075676 2.381081  5.394595 15.359459 6.608108 1.451351   27.10541
## 5 58.32500  5.558333 3.133333 10.116667  4.908333 1.483333 0.725000   15.75000
## 
## Clustering vector:
##              Palacio          Embajadores               Cortes 
##                    4                    2                    4 
##             Justicia          Universidad                  Sol 
##                    3                    4                    4 
##             Imperial              Acacias              Chopera 
##                    3                    3                    4 
##              Legazpi             Delicias      Palos de Moguer 
##                    3                    3                    4 
##               Atocha             Pacifico              Adelfas 
##                    3                    3                    3 
##             Estrella                Ibiza            Jeronimos 
##                    1                    1                    1 
##           Nino Jesus            Recoletos                 Goya 
##                    1                    5                    1 
##     Fuente del Berro           Guindalera                Lista 
##                    3                    1                    1 
##           Castellana              El Viso          Prosperidad 
##                    5                    5                    1 
##        Ciudad Jardin       Hispanoamerica         Nueva Espana 
##                    3                    5                    5 
##             Castilla        Bellas Vistas       Cuatro Caminos 
##                    1                    4                    1 
##          Castillejos             Almenara        Valdeacederas 
##                    1                    4                    4 
##           Berruguete           Gaztambide             Arapiles 
##                    4                    1                    3 
##            Trafalgar              Almagro           Rios Rosas 
##                    3                    5                    1 
##         Vallehermoso             El Pardo       Fuentelarreina 
##                    1                    1                    5 
##          Pena Grande             El Pilar               La Paz 
##                    3                    3                    1 
##             Valverde           Mirasierra            El Goloso 
##                    3                    1                    1 
##        Casa de Campo            Arguelles Ciudad Universitaria 
##                    3                    1                    1 
##           Valdezarza           Valdemarin           El Plantio 
##                    3                    5                    5 
##              Aravaca         Los Carmenes     Puerta del Angel 
##                    1                    4                    4 
##               Lucero               Aluche           Campamento 
##                    4                    4                    3 
##       Cuatro Vientos          Las Aguilas             Comillas 
##                    4                    4                    4 
##               Opanel           San Isidro         Vista Alegre 
##                    4                    2                    4 
##        Puerta Bonita           Buenavista             Abrantes 
##                    2                    4                    4 
##            Orcasitas              Orcasur           San Fermin 
##                    2                    2                    2 
##          Almendrales             Moscardo                Zofio 
##                    2                    2                    2 
##           Pradolongo            Entrevias            San Diego 
##                    2                    2                    2 
##      Palomeras Bajas    Palomeras Sureste             Portazgo 
##                    2                    2                    2 
##             Numancia              Pavones              Horcajo 
##                    2                    4                    3 
##           Marroquina          Media Legua            Fontarron 
##                    3                    3                    4 
##            Vinateros               Ventas         Pueblo Nuevo 
##                    4                    4                    4 
##             Quintana           Concepcion          San Pascual 
##                    4                    3                    3 
##    San Juan Bautista               Colina              Atalaya 
##                    1                    1                    1 
##          Costillares              Palomas              Piovera 
##                    5                    5                    5 
##             Canillas        Pinar del Rey     Apostol Santiago 
##                    3                    4                    3 
##         Valdefuentes           San Andres        San Cristobal 
##                    1                    2                    2 
##             Butarque          Los Rosales          Los Angeles 
##                    4                    2                    4 
##           VallecasCH        Santa Eugenia      VallecasEnsanch 
##                    2                    4                    4 
##          VicalvaroCH               Ambroz          Valderrivas 
##                    2                    4                    3 
##            Canaveral             Simancas               Hellin 
##                    3                    4                    2 
##              Amposta                Arcos                Rosas 
##                    2                    4                    3 
##                Rejas           Canillejas          El Salvador 
##                    3                    4                    3 
##     Alameda de Osuna           Aeropuerto            BarajasCH 
##                    1                    2                    4 
##                Timon           Corralejos 
##                    3                    1 
## 
## Within cluster sum of squares by cluster:
## [1]  724.1015 1028.3017  868.3206  896.7400  297.3333
##  (between_SS / total_SS =  87.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
#fviz_cluster(k3, dat2, ellipse.type = "convex", palette = "rainbow_hcl")
#Este gráfico ya se ha realizado en el apartado 6
fviz_cluster(k4, dat2, ellipse.type = "convex", palette = "rainbow_hcl")

fviz_cluster(k5, dat2, ellipse.type = "convex", palette = "rainbow_hcl")

Los barrios que pertenecen a cada cluster según el análisis k-means con k=4 serían:

(sel41 = which(k4$cluster ==1)) 
##             Pacifico              Adelfas             Estrella 
##                   14                   15                   16 
##                Ibiza            Jeronimos     Fuente del Berro 
##                   17                   18                   22 
##           Guindalera          Prosperidad        Ciudad Jardin 
##                   23                   27                   28 
##       Cuatro Caminos          Castillejos           Gaztambide 
##                   33                   34                   38 
##             Arapiles            Trafalgar           Rios Rosas 
##                   39                   40                   42 
##             El Pardo          Pena Grande               La Paz 
##                   44                   46                   48 
##             Valverde            Arguelles Ciudad Universitaria 
##                   49                   53                   54 
##           Campamento          San Pascual    San Juan Bautista 
##                   63                   96                   97 
##               Colina          El Salvador     Alameda de Osuna 
##                   98                  126                  127
(sel42 = which(k4$cluster ==2))
##          Palacio           Cortes         Justicia      Universidad 
##                1                3                4                5 
##              Sol         Imperial          Acacias          Chopera 
##                6                7                8                9 
##          Legazpi         Delicias  Palos de Moguer           Atocha 
##               10               11               12               13 
##    Bellas Vistas         Almenara         El Pilar    Casa de Campo 
##               32               35               47               52 
##       Valdezarza     Los Carmenes           Lucero           Aluche 
##               55               59               61               62 
##   Cuatro Vientos      Las Aguilas         Comillas           Opanel 
##               64               65               66               67 
##       Buenavista          Pavones          Horcajo       Marroquina 
##               71               86               87               88 
##      Media Legua        Vinateros           Ventas     Pueblo Nuevo 
##               89               91               92               93 
##         Quintana       Concepcion         Canillas    Pinar del Rey 
##               94               95              103              104 
## Apostol Santiago         Butarque      Los Angeles    Santa Eugenia 
##              105              109              111              113 
##  VallecasEnsanch           Ambroz      Valderrivas        Canaveral 
##              114              116              117              118 
##         Simancas            Rosas            Rejas       Canillejas 
##              119              123              124              125 
##        BarajasCH            Timon 
##              129              130
(sel43 = which(k4$cluster ==3))
##       Embajadores     Valdeacederas        Berruguete  Puerta del Angel 
##                 2                36                37                60 
##        San Isidro      Vista Alegre     Puerta Bonita          Abrantes 
##                68                69                70                72 
##         Orcasitas           Orcasur        San Fermin       Almendrales 
##                73                74                75                76 
##          Moscardo             Zofio        Pradolongo         Entrevias 
##                77                78                79                80 
##         San Diego   Palomeras Bajas Palomeras Sureste          Portazgo 
##                81                82                83                84 
##          Numancia         Fontarron        San Andres     San Cristobal 
##                85                90               107               108 
##       Los Rosales        VallecasCH       VicalvaroCH            Hellin 
##               110               112               115               120 
##           Amposta             Arcos        Aeropuerto 
##               121               122               128
(sel44 = which(k4$cluster ==4))
##     Nino Jesus      Recoletos           Goya          Lista     Castellana 
##             19             20             21             24             25 
##        El Viso Hispanoamerica   Nueva Espana       Castilla        Almagro 
##             26             29             30             31             41 
##   Vallehermoso Fuentelarreina     Mirasierra      El Goloso     Valdemarin 
##             43             45             50             51             56 
##     El Plantio        Aravaca        Atalaya    Costillares        Palomas 
##             57             58             99            100            101 
##        Piovera   Valdefuentes     Corralejos 
##            102            106            131

Se puede ver que dentro de cada grupo los barrios tienen rentas similares (más adelante en el apartado 8 haremos un plot del mapa de madrid donde se observa que geográficamente están en la misma zona).

Los barrios que pertenecen a cada cluster según el análisis k-means con k=5 serían:

(sel51 = which(k5$cluster ==1))
##             Estrella                Ibiza            Jeronimos 
##                   16                   17                   18 
##           Nino Jesus                 Goya           Guindalera 
##                   19                   21                   23 
##                Lista          Prosperidad             Castilla 
##                   24                   27                   31 
##       Cuatro Caminos          Castillejos           Gaztambide 
##                   33                   34                   38 
##           Rios Rosas         Vallehermoso             El Pardo 
##                   42                   43                   44 
##               La Paz           Mirasierra            El Goloso 
##                   48                   50                   51 
##            Arguelles Ciudad Universitaria              Aravaca 
##                   53                   54                   58 
##    San Juan Bautista               Colina              Atalaya 
##                   97                   98                   99 
##         Valdefuentes     Alameda de Osuna           Corralejos 
##                  106                  127                  131
(sel52 = which(k5$cluster ==2))
##       Embajadores        San Isidro     Puerta Bonita         Orcasitas 
##                 2                68                70                73 
##           Orcasur        San Fermin       Almendrales          Moscardo 
##                74                75                76                77 
##             Zofio        Pradolongo         Entrevias         San Diego 
##                78                79                80                81 
##   Palomeras Bajas Palomeras Sureste          Portazgo          Numancia 
##                82                83                84                85 
##        San Andres     San Cristobal       Los Rosales        VallecasCH 
##               107               108               110               112 
##       VicalvaroCH            Hellin           Amposta        Aeropuerto 
##               115               120               121               128
(sel53 = which(k5$cluster ==3))
##         Justicia         Imperial          Acacias          Legazpi 
##                4                7                8               10 
##         Delicias           Atocha         Pacifico          Adelfas 
##               11               13               14               15 
## Fuente del Berro    Ciudad Jardin         Arapiles        Trafalgar 
##               22               28               39               40 
##      Pena Grande         El Pilar         Valverde    Casa de Campo 
##               46               47               49               52 
##       Valdezarza       Campamento          Horcajo       Marroquina 
##               55               63               87               88 
##      Media Legua       Concepcion      San Pascual         Canillas 
##               89               95               96              103 
## Apostol Santiago      Valderrivas        Canaveral            Rosas 
##              105              117              118              123 
##            Rejas      El Salvador            Timon 
##              124              126              130
(sel54 = which(k5$cluster ==4))
##          Palacio           Cortes      Universidad              Sol 
##                1                3                5                6 
##          Chopera  Palos de Moguer    Bellas Vistas         Almenara 
##                9               12               32               35 
##    Valdeacederas       Berruguete     Los Carmenes Puerta del Angel 
##               36               37               59               60 
##           Lucero           Aluche   Cuatro Vientos      Las Aguilas 
##               61               62               64               65 
##         Comillas           Opanel     Vista Alegre       Buenavista 
##               66               67               69               71 
##         Abrantes          Pavones        Fontarron        Vinateros 
##               72               86               90               91 
##           Ventas     Pueblo Nuevo         Quintana    Pinar del Rey 
##               92               93               94              104 
##         Butarque      Los Angeles    Santa Eugenia  VallecasEnsanch 
##              109              111              113              114 
##           Ambroz         Simancas            Arcos       Canillejas 
##              116              119              122              125 
##        BarajasCH 
##              129
(sel55 = which(k5$cluster ==5))
##      Recoletos     Castellana        El Viso Hispanoamerica   Nueva Espana 
##             20             25             26             29             30 
##        Almagro Fuentelarreina     Valdemarin     El Plantio    Costillares 
##             41             45             56             57            100 
##        Palomas        Piovera 
##            101            102

También dentro de cada grupo se ve que los barrios tienen rentas similares.

Apartado 8

Resume brevemente las conclusiones del análisis cluster realizado en los apartados anteriores. Completa el análisis con aquello que te parezca interesante.

Aplicando los dos métodos de análisis cluster (jerárquico y k-means) se obtienen soluciones parecidas con muy pocas variaciones. Hay 11 barrios que el método k-means clasifica como de renta alta, pero el método jerárquico los clasifica como renta media, no obstante, son barrios que podrían considerarse de renta media-alta.

De los cuatro barrios que el método jerárquico clasifica como renta media y el k-means como renta baja, pasa similar, pero en este caso se considerarían barrios de clase media-baja; y los tres barrios que el método jerárquico clasifica como renta baja y el k-means como renta media también serían de clase media-baja.

Solo habría que preocuparse si uno de los métodos clasificase un barrio como clase alta y el otro método lo clasificase como clase baja. Pero esto no ocurre.

Para finalizar me gustaría hacer un plot del mapa de los barrios de Madrid coloreados según el cluster al cual pertenece cada barrio pues con la función fviz_cluster no se aprecia donde se sitúan geográficamente cada barrio y creo que sería interesante puesto que los barrios con rentas similares suelen estar lindantes unos de otros y se aprecia claramente la diagonal de la desigualdad de Madrid.

library(sp)
library(rgeos)
## rgeos version: 0.5-8, (SVN revision 679)
##  GEOS runtime version: 3.9.1-CAPI-1.14.2 
##  Please note that rgeos will be retired by the end of 2023,
## plan transition to sf functions using GEOS at your earliest convenience.
##  GEOS using OverlayNG
##  Linking to sp version: 1.4-5 
##  Polygon checking: TRUE
library(maptools)
## Checking rgeos availability: TRUE
## Please note that 'maptools' will be retired by the end of 2023,
## plan transition at your earliest convenience;
## some functionality will be moved to 'sp'.
getinfo.shape("200001882.shp") #hemos cargado el archivo shape con el mapa de los barrios
## Shapefile type: Polygon, (5), # of Shapes: 131
barriosMadrid <- readShapePoly("200001882.shp")
## Warning: readShapePoly is deprecated; use rgdal::readOGR or sf::st_read
str(barriosMadrid, max.level = 2)
## Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
##   ..@ data       :'data.frame':  131 obs. of  3 variables:
##   .. ..- attr(*, "data_types")= chr [1:3] "N" "C" "C"
##   ..@ polygons   :List of 131
##   ..@ plotOrder  : int [1:131] 44 112 51 115 128 52 106 130 54 118 ...
##   ..@ bbox       : num [1:2, 1:2] 424754 4462566 456033 4499365
##   .. ..- attr(*, "dimnames")=List of 2
##   ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
##   ..$ comment: chr "FALSE"
barriosMadrid@bbox
##         min       max
## x  424753.5  456033.3
## y 4462566.0 4499365.4
barriosMadrid$DESBDT <- iconv(barriosMadrid$DESBDT, "latin1", "UTF-8")

barriosNamesCodes <- strsplit(sub(" ", "\\.", barriosMadrid$DESBDT), "\\.")

barriosNamesCodes <- do.call(rbind, barriosNamesCodes)

barriosMadrid$BarrioCod <- barriosNamesCodes[, 1]
barriosMadrid$Barrio <- barriosNamesCodes[, 2]


barriosCluster=cbind(barriosNamesCodes,j3,k3$cluster,k4$cluster,k5$cluster) #tabla con los barrios de madrid y en que cluster se clasifican según el analísis jerárquico y k-means para k=3, k=4 y k=5
plot(barriosMadrid, col = j3)

Mapa de los barrios de Madrid según el análisis jerárquico. En verde los barrios de rentas altas, en negro los de ingresos medios y en rosa de renta baja.

En el mapa según la clasificación por el método jerárquico los barrios de clase baja (en rosa) se encuentran en sureste, mientras que los de clase alta (verde) están más hacia el norte, y los barrios de clase media (negro) están más o menos dispersos por el territorio.

plot(barriosMadrid, col = k3$cluster)

Mapa de los barrios de Madrid según el análisis k-means con k=3 En verde los barrios con rentas altas, en rosa los barrios con ingresos medios y en negro los barrios de clase baja.

En el mapa según la clasificación por el método k-means con k=3 los barrios de clase baja (negro) también se encuentran al sureste. Sin embargo, con este método tanto los barrios de clase alta (verde) como los de clase media (rosa) están mayoritariamente por encima de la diagonal de desigualdad, y dentro de esa partición los de clase alta están en el centro mientras que los de clase media en la periferia.

plot(barriosMadrid, col = k4$cluster)

Mapa de los barrios de Madrid según el análisis k-means con k=4 En negro los barrios clasificados en el cluster 1, en rosa los barrios clasificados en el cluster 2, en verde los barrios clasificados en el cluster 3 y en azul oscuro los barrios clasificados en el cluster 4.

En este mapa se puede observar que los barrios del cluster 1 (negro) y el cluster 4 (azul) se encuentran mayoritariamente al noreste. Los grupos del cluster 2 (rosa) estarían más o menos sobre la diagonal de desigualdad y los barrios del cluster 3 (verde) estarían más hacia el sur (excepto el barrio de Aeropuerto y otros dos atípicos que están en el centro).

plot(barriosMadrid, col = k5$cluster)

Mapa de los barrios de Madrid según el análisis k-means con k=5 En negro los barrios clasificados en el cluster 1, en rosa los barrios clasificados en el cluster 2, en verde los barrios clasificados en el cluster 3, en azul oscuro los barrios clasificados en el cluster 4 y en azul cyan los barrios clasificados en el cluster 5.

En este mapa los barrios del cluster 1 (negro) se encontrarían por encima de la diagonal de desigualdad. Los del cluster 2 (rosa) se hallarían más o menos por debajo de la diagonal. Mientras que los clusters 3 (verde), 4 (azul oscuro) y 5 (cyan) se encontrarían sobre la diagonal, aunque los del cluster 5 estarán más céntricos, y los clusters 3 y 4 más periféricos.