Cargar librerias

library(tibble)
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
# install.packages("factoextra")
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Cargando paquete requerido: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cluster)
# install.packages("clustertend")
library(clustertend)
## Package `clustertend` is deprecated.  Use package `hopkins` instead.
# install.packages("NbClust")
library(NbClust)
library(ggplot2)
# Se carga la base de datos USArrests, que contiene tasas de crímenes por estado en EE. UU., y se visualizan las primeras filas (6x4)
data("USArrests")
df <- na.omit(USArrests)
head(df)
##            Murder Assault UrbanPop Rape
## Alabama      13.2     236       58 21.2
## Alaska       10.0     263       48 44.5
## Arizona       8.1     294       80 31.0
## Arkansas      8.8     190       50 19.5
## California    9.0     276       91 40.6
## Colorado      7.9     204       78 38.7

Escalar los datos

df_scaled <- scale(df)
# Se normalizo los datos para que todas las variables tengan el mismo peso al calcular distancias.

Estadístico de Hopkins para viabilidad de clustering

El valor del estadístico de Hopkins fue menor a 0.5, lo que sugiere que existe una estructura de agrupación en los datos. Esto valida la viabilidad de aplicar técnicas de clustering como K-means.

set.seed(123)
hopkins_stat <- hopkins(df_scaled, n = nrow(df_scaled) - 1)
## Warning in hopkins(df_scaled, n = nrow(df_scaled) - 1): Package `clustertend`
## is deprecated.  Use package `hopkins` instead.
hopkins_stat  
## $H
## [1] 0.3886088
# Este valor nos dice si tiene sentido aplicar clustering. Un valor menor a 0.5 indica que sí hay estructura de grupos en los datos. Resultado 0.3886088

Matriz de similitud - Distancia Manhattan

La matriz de distancias usando la métrica Manhattan muestra qué tan similares o diferentes son los estados entre sí. En el gráfico, las zonas más claras representan pares de estados muy similares, mientras que las zonas más oscuras indican diferencias mayores. Este análisis es útil para observar patrones de similitud previos al clustering.

La matriz de distancias Manhattan refleja qué tan similares o diferentes son los estados en función de sus tasas de crimen escaladas. Los colores claros (blanco/azul) indican alta similitud entre estados, mientras que los rojos indican diferencias marcadas. Se observan bloques de tonalidades similares, lo que sugiere que existen patrones y posibles agrupamientos en los datos, lo cual justifica el uso de técnicas de clustering.

distance_matrix <- get_dist(df_scaled, method = "manhattan")

fviz_dist(distance_matrix, gradient = list(low = "white", mid = "blue", high = "red"))

# Se calcula que tan diferentes/similiares son los estados entre sí usando distancia Manhattan. Los colores indican el nivel de similitud

Determinar número óptimo de clusters con WSS

El gráfico del método del codo indica que al aumentar el número de clusters de 1 a 4, la variabilidad dentro de los grupos disminuye considerablemente. A partir de 4 clusters, esta mejora se estabiliza. Por lo tanto, se considera que k = 4 es el número óptimo de clusters, ya que es el punto donde se alcanza un equilibrio entre simplicidad del modelo y calidad de agrupación.

El gráfico del método del codo muestra una disminución pronunciada en la suma de cuadrados dentro del grupo hasta que el número de clusters llega a 4. A partir de ese punto, la mejora se vuelve marginal. Por eso, se concluye que 4 es un número adecuado de clusters para este conjunto de datos.

fviz_nbclust(df_scaled, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2) +
  labs(subtitle = "Número óptimo de clusters según el metodo de WSS")

#  Se utiliza el método de WSS o del codo para identificar cuántos grupos son ideales. En este analisis se encontro que el numero de optimo a usar son 4 cluster. 

Crear los clusters con K-means (k = 4)

Se aplicó el algoritmo K-means con 4 centros. Cada estado fue asignado a uno de los cuatro clusters basados en sus niveles relativos de asesinato, asalto, urbanización y violación. El análisis de estos clusters permitirá identificar patrones comunes entre los estados dentro de cada grupo. 25)

set.seed(123)
km <- kmeans(df_scaled, centers = 4, nstart = 25)

Visualización de clusters

La visualización final muestra cómo se distribuyen los estados dentro de los 4 clusters formados por el algoritmo K-means. Las áreas coloreadas reflejan la separación entre los grupos. Se aprecia una buena diferenciación entre los clusters, lo que confirma que el modelo logró capturar patrones estructurados dentro del conjunto de datos. ellipse.type = “norm”, geom = “point”)

fviz_cluster(km, data = df_scaled, ellipse.type = "norm", geom = "point")

# Se creo una gráfica que representan estados, donde cada circulor de color indica el grupo al que pertenecen. Las elipses o circulo agrupan los estados similares.

Agregar resultado de cluster a datos

df_clustered <- as.data.frame(df_scaled) %>% 
  mutate(Cluster = as.factor(km$cluster))
head(df_clustered)
##                Murder   Assault   UrbanPop         Rape Cluster
## Alabama    1.24256408 0.7828393 -0.5209066 -0.003416473       1
## Alaska     0.50786248 1.1068225 -1.2117642  2.484202941       4
## Arizona    0.07163341 1.4788032  0.9989801  1.042878388       4
## Arkansas   0.23234938 0.2308680 -1.0735927 -0.184916602       1
## California 0.27826823 1.2628144  1.7589234  2.067820292       4
## Colorado   0.02571456 0.3988593  0.8608085  1.864967207       4

Conclusiones

-El valor de Hopkins 0.388 nos indica una fuerte estructura de conglomerados en los datos, validando el análisis de agrupamiento.

-Al usar distancia Manhattan, se observaron diferencias en criminalidad entre estados, con grupos bien definidos.

-El análisis del codo WSS indicó que 4 clusters es el número óptimo. K-means con k=4 segmentó los estados en grupos con características delictivas similares, facilitando su interpretación.

-La visualización mostró patrones regionales en los niveles de criminalidad, con algunos estados con altos y otros con bajos índices.