En este proyecto contamos con diferentes datos sobre los estados de la Republica. Consumo de alcohol per capita, población y temperatura promedio anual.
Con esto realizaré un agrupamiento para ver que tipo de similitudes comparten estos estados o que diferencias principales hay.
#install.packages("cluster") # Análisis de Agrupamiento
library(cluster)
#install.packages("ggplot2") #Graficar
library(ggplot2)
#install.packages("data.table") #Manejo de muchos datos
library(data.table)
#install.packages("factoextra") #Gráfico optimización de número de clusters
library(factoextra)
df1 <- read.csv("C:/Users/corsa/OneDrive - CORSA Transportes SA de CV/Escritorio/TEC/alcohol_mexico2.csv")
df1_numeric <- df1[,c("consumo_anual","poblacion","temp_prom")]
summary(df1_numeric)
## consumo_anual poblacion temp_prom
## Min. :2.100 Min. : 370769 Min. :14.50
## 1st Qu.:3.950 1st Qu.: 926140 1st Qu.:18.00
## Median :4.700 Median :1557615 Median :21.50
## Mean :4.812 Mean :2016895 Mean :21.48
## 3rd Qu.:5.500 3rd Qu.:2541349 3rd Qu.:25.25
## Max. :7.400 Max. :8741123 Max. :27.50
str(df1_numeric)
## 'data.frame': 32 obs. of 3 variables:
## $ consumo_anual: num 7.3 4.7 4.5 6.2 4.3 2.1 5.4 6.7 5.8 5.3 ...
## $ poblacion : int 728924 1868431 392568 471424 4805017 2837881 1888047 1583102 370769 927784 ...
## $ temp_prom : num 18 19.5 24 26.5 25 18 16 19.5 27 17 ...
# Solo si los datos no están en la misma escala
datos_escalados <- scale(df1_numeric)
# Siempre es un valor inicial "cualquiera", luego se optimiza.
plot(datos_escalados)
grupos1 <- 5
set.seed(123)
clusters1 <- kmeans(datos_escalados,grupos1)
clusters1
## K-means clustering with 5 clusters of sizes 12, 3, 5, 7, 5
##
## Cluster means:
## consumo_anual poblacion temp_prom
## 1 -0.04588495 -0.5708340 1.0110239
## 2 -0.57203243 2.3011991 0.4607362
## 3 1.59129021 0.2142330 -0.5443176
## 4 0.17960682 -0.2338498 -1.0284522
## 5 -1.38939641 0.1024388 -0.7187485
##
## Clustering vector:
## [1] 3 4 1 1 2 5 4 3 1 4 4 5 1 3 2 3 1 1 3 5 5 4 1 4 1 1 1 1 5 2 1 4
##
## Within cluster sum of squares by cluster:
## [1] 8.122385 5.723513 3.679083 2.975502 4.120859
## (between_SS / total_SS = 73.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
set.seed(123)
optimización <- clusGap(datos_escalados,FUN=kmeans,nstart=1,K.max=10)
#El K.max normalmente es 10, en este ejercicio al ser 8 datos se dejó en 7.
plot(optimización,xlab="Número de clusters k")
# Se selecciona como óptimo el primer númeor de clusters
fviz_cluster(clusters1,data=datos_escalados)
df1clusters <- cbind(df1,cluster = clusters1$cluster)
head(df1clusters)
## estado consumo_anual poblacion temp_prom cluster
## 1 Aguascalientes 7.3 728924 18.0 3
## 2 Baja California 4.7 1868431 19.5 4
## 3 Baja California Sur 4.5 392568 24.0 1
## 4 Campeche 6.2 471424 26.5 1
## 5 Ciudad de México 4.3 4805017 25.0 2
## 6 Chiapas 2.1 2837881 18.0 5
La técnica de clustering permite identificar patrones o grupos naturales en los datos sin necesidad de etiquetas previas.En este caso si fue necesario utilizar la escala de datos para poder trabajar con ellos durante el analisis y el agrupamiento de los clusters.