Paquetes a utilizar
library(pacman)
p_load(rmdformats, readr, readxl, ggplot2, plotly, DT, xfun, gridExtra, leaflet, GGally, psych, corrplot, cluster)
Descarga los datos
- Descargar este documento:
xfun::embed_file("AE5UC2_16.Rmd")
- Descarga los datos
#xfun::embed_file("atlasapi.csv")
xfun::embed_file("EstadoProdMiel.csv")
Introducción a análisis de clustering con K-Means
Objetivo: tener datos que puedas medir, si son más cercanos pueden que se parezcan, mide la distancia de los datos para saber si se relacionan.
Introducción
Apicultura en diferentes estados de México, en este documento analizaremos datos de producción de miel de tres estados de México utilizando clustering con la técnica de análisis no supervisado K-Means.
Primer ejercicio de k-means
- Importando datos y paquetes
#atlas_api <- read.csv("atlasapi.csv", sep=",", header=TRUE)
#prodMielaux <- atlas_api
prodMiel <- read_csv("EstadoProdMiel.csv")
## Rows: 51 Columns: 3
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): Estado
## dbl (2): ProduccionMiel, Year
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
#View(prodMiel)
- visualizando los datos en tabla
datatable(prodMiel)
Visualización gráfica de los datos+
Para esto haremos un diagrama de dispersión o scatterplot
#prodMiel %>%
# pivot_longer(-YEAR, names_to = "Estados", values_to = "Produccion") %>%
#ggplot(aes(x = YEAR, y = Produccion, color = Estados)) +
# geom_line() +
# geom_point(size= 5)
ggplot(prodMiel, aes(Year, ProduccionMiel, color = Estado) ) +
geom_line()+
geom_point(size=4)
Podemos observar como las producciones de estos estados no se parecen casi en nada ya que cada estado parece organizar su apicultura diferente y a causa de esto parece ser que tienen una producción distinta a los otros estados.
Aunque parece que por el 2015 se empiezan a utilizar técnicas similares o métodos ya que se cómo los datos de la producción en los tres estados hacen ruido ese año ya que Yucatán por ese año su producción empezó superar el de los otros 2.
En la función k-means, es necesario establecer el centro, que es el número de grupos a los que queremos agrupar. En este caso, sabemos que este valor será 3. Establezcamos eso. Pero veamos cómo construiríamos el modelo si no lo supiéramos.
- Primer modelo de clusterización usando k medias
#prodMiel[,1:3], nomas toma en cuenta las columans de datos que queremos
#nstart el numero de interacciones aleatorias que intentara el codigo
set.seed(101)
prodMielCluster <- kmeans(prodMiel[,2], center= 3, nstart = 20)
prodMielCluster
## K-means clustering with 3 clusters of sizes 14, 17, 20
##
## Cluster means:
## ProduccionMiel
## 1 9485.879
## 2 2698.033
## 3 5860.918
##
## Clustering vector:
## [1] 1 1 3 1 1 1 1 1 1 1 1 1 1 3 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2
## [39] 2 2 2 2 2 2 2 2 2 2 2 2 2
##
## Within cluster sum of squares by cluster:
## [1] 19545446 4938183 10719279
## (between_SS / total_SS = 91.0 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Utilizando los datos cuantitativos (producción de miel por estado), vemos que tenemos tres clústeres/centroides, con valores de 8, 8 y 1 respectivamente.
Para los valores de 8 puede que sean pertenecientes a Yucatán y Quintana Roo debido a que tienen sus datos completos en el diagrama de dispersión, mientras que Jalisco pierde 1 de su montón.
valores de los clústeres: centroide 1: 10336.164, 5933.169, 2875.069 centroide 2: 8030.875, 5681.625, 2477.750 centroide 3: 4351.000, 5815.000, 3044.000
viendo como los centroides están tan separados podemos decir que no presentan una relación tan similar las distintas producciones de miel de los tres estados.
Comparando los clústeres con los datos originales
#prodEstadosMiel <- prodMiel %>%
# pivot_longer(-YEAR, names_to = "Estados", values_to = "Produccion")
#Verifica cuantas coincidencias tienen según los 3 clúster
#table(prodMielCluster$cluster, variable categórica (estados))
table(prodMielCluster$cluster, prodMiel$Estado)
##
## JALISCO QUINTANA_ROO YUCATAN
## 1 0 0 14
## 2 0 17 0
## 3 17 0 3
Aquí vemos como el análisis clúster sabe diferenciar entre las producciones de Jalisco y Quintana Roo, sin embargo, hace ruido cuando sus producciones bajan ya que es Yucatán quien de pronto produce más miel.
Representación gráfica de los clústeres modelados
clusplot(prodMiel, prodMielCluster$cluster, color= TRUE, shade= TRUE, lines=0)
Podemos ver que los datos de producción de miel de Yucatán y Jalisco están más o menos al mismo nivel mientras que el de Quintana Roo que produce más en su apicultura, se distingue un poco mejor, sin embargo, hay veces en la que su producción de miel recae y es por eso que hace ruido con los otros estados.
Como dije antes, no siempre tendremos los datos etiquetados. Si quisiéramos saber el número exacto de centros, deberíamos haber construido el método del codo o Elbow Method a fin de determinar dicho valor.
#EL 10 EN EL FOR ES EL LARGO QUE TU QUIERES, NO LA CANTIDAD DEL MUESTREO
tot.withinss <- vector(mode="character", length=15)
for (i in 1:15){
prodMielCluster <- kmeans(prodMiel[,2], center=i, nstart=20)
tot.withinss[i] <- prodMielCluster$tot.withinss
}
Vamos a visualizar el resultado
plot(1:15, tot.withinss, type = "b", pch=19)
Entonces resultado del método del codo a través de un bucle, tenemos que ciertamente el número de clúster es 3