Introducción

El análisis de componentes principales, a menudo abreviado PCA, es conocido com una técnica de aprendizaje automático no supervisado el cual busca encontrar componentes principales (combinaciones lineales de los predictores originales) que explican una gran parte de la variación en un conjunto de datos con menos variables que el conjunto de datos original. La reducción del número de variables de un conjunto de datos naturalmente se produce a expensas de la precisión, pero el truco en la reducción de la dimensionalidad es cambiar un poco de precisión por simplicidad. Porque los conjuntos de datos más pequeños son más fáciles de explorar y visualizar y hacen que el análisis de datos sea mucho más fácil y rápido para los algoritmos de aprendizaje automático sin variables extrañas para procesar. Entonces, para resumir, la idea de PCA es simple: reducir la cantidad de variables de un conjunto de datos, mientras se conserva la mayor cantidad de información posible.

Para realizar este análisis se van a necesitar los siguientes paquetes:

library(tidyverse) #Manipulación de los datos
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(cluster)  #Agrupación de algoritmos
library(factoextra) # Agrupacion de algoritmos y visualización
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Preparación de los datos

Para realizar un análisis de agrupamiento en R, por lo general, los datos deben prepararse de la siguiente manera: Las filas son observaciones (individuos) y las columnas son variables.

Cualquier valor que falte en los datos debe ser eliminado o estimado.

Los datos deben ser estandarizados (es decir, escalados) para que las variables sean comparables. Recordemos que la estandarización consiste en transformar las variables de forma que tengan una media cero y una desviación estándar uno

En este caso, utilizaremos el conjunto de datos incorporado en R (USArrests) que contiene estadísticas de arrestos por casa 100.000 residentes por agresión, asesinato y violación en cada uno de los 50 estados de EE.UU. en 1973. También incluye el porcentaje de la población que vive en zonas urbanas

df <- USArrests

Para remover cualquier valor que falte en los datos, se escribe lo siguiente:

df <- na.omit(df)

Como no queremos que el algoritmo de clustering dependa de una unidad variable arbitraria, empezamos por escalar/estandarizar los datos usando la función de R (scale):

df <- scale(df)
head(df)
##                Murder   Assault   UrbanPop         Rape
## Alabama    1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska     0.50786248 1.1068225 -1.2117642  2.484202941
## Arizona    0.07163341 1.4788032  0.9989801  1.042878388
## Arkansas   0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144  1.7589234  2.067820292
## Colorado   0.02571456 0.3988593  0.8608085  1.864967207

Medidas de distancia de agrupación

La clasificación de las observaciones en grupos requiere algunos métodos para calcular la distancia o la (des)similitud entre cada par de observaciones. El resultado de este cálculo se conoce como matriz de disimilitud o distancia. Hay muchos métodos para calcular esta información de distancia; la elección de las medidas de distancia es un paso crítico en la agrupación. Define cómo se calcula la similitud de dos elementos (x, y) e influirá en la forma de los grupos.

La elección de las medidas de distancia es un paso crítico en las agrupaciones. Define cómo se calcula la similitud de dos elementos (x, y) e influirá en la forma de los grupos. Los métodos clásicos para las medidas de distancia son las distancias euclidiana y de Manhattan, que se definen como sigue:

Distancia euclidiana

(1) d e u c ( x , y ) = i = 1 n ( x i y i ) 2

Distancia de Manhattan

(2) d m a n ( x , y ) = i = 1 n | ( x i y i ) |

Donde, x & y son dos vectores de longityd n.

Existen otras medidas de disimilitud, como las distancias basadas en la correlación, que se utilizan ampliamente para el análisis de datos de expresión génica. La distancia basada en la correlación se define restando el coeficiente de correlación de 1. Se pueden utilizar diferentes tipos de métodos de correlación como:

Distancia de correlación de Pearson:

(3) d c o r ( x , y ) = 1 i = 1 n ( x i x ¯ ) ( y i y ¯ ) i = 1 n ( x i x ¯ ) 2 i = 1 n ( y i y ¯ ) 2

Distancia de correlación de Spearman:

El método de correlación de Spearman calcula la correlación entre el rango de las variables x y el rango de las variables y.

(4) d s p e a r ( x , y ) = 1 i = 1 n ( x i x ¯ ) ( y i y ¯ ) i = 1 n ( x i x ¯ ) 2 i = 1 n ( y i y ¯ ) 2

Donde y i = r a n k ( y i )

Distancia de correlación de Kendall:

El método de correlación de Kendall mide la correspondencia entre la clasificación de las variables x e y. El número total de emparejamientos posibles de las observaciones x con las y es n(n-1)/2,donde n es el tamaño de x e y. Comience ordenando los pares por los valores de x. Si x e y están correlacionados, entonces tendrían los mismos órdenes de clasificación relativos.La distancia de correlación de Kendall se define como sigue:

(5) d k e n d ( x , y ) = 1 n c n d 1 2 n ( n 1 )

La elección de las medidas de distancia es muy importante, ya que tiene una gran influencia en los resultados de la agrupación. En la mayoría de los programas de clustering, la medida de distancia por defecto es la distancia euclidiana. Sin embargo, dependiendo del tipo de datos y de las preguntas de la investigación, se pueden preferir otras medidas de disimilitud y se deben conocer las opciones. En R es sencillo calcular y visualizar la matriz de distancia utilizando las funciones (get_dist) y (fviz_dist) del paquete de R (factoextra) . Esto empieza a ilustrar qué estados tienen grandes disimilitudes (rojo) frente a los que parecen ser bastante similares (verde azulado).

(get_dist): Para calcular una matriz de distancia entre las filas de una matriz de datos. La distancia calculada por defecto es la euclidiana; sin embargo, (get_dist) también admite las distancias descritas en las ecuaciones 2-5 anteriores y otras. (fviz_dist): Para visualizar una matriz de distancia

distance <- get_dist(df)
fviz_dist(distance, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

Agrupación de K-means

La agrupación de K-means es el algoritmo de aprendizaje automático no supervisado más utilizado para dividir un conjunto de datos dado en un conjunto de k grupos (es decir, k clusters), donde k representa el número de grupos preestablecido por el analista. Clasifica los objetos en múltiples grupos (es decir, clusters), de forma que los objetos de un mismo cluster sean lo más parecidos posible (es decir, alta similitud intraclase), mientras que los objetos de diferentes clusters sean lo más disímiles posible (es decir, baja similitud interclase). En el clustering de k-means, cada cluster está representado por su centro (es decir, el centroide) que corresponde a la media de los puntos asignados al cluster.

La idea básica

La idea básica de la agrupación de k-means consiste en definir los clusters de forma que la variación total intraclúster (conocida como variación total dentro del clúster) se minimice. Existen varios algoritmos de k-means. El algoritmo estándar es el de Hartigan-Wong (1979), que define la variación total dentro del clúster como la suma de las distancias euclidianas al cuadrado entre los elementos y el centroide correspondiente:

(6) W ( C k ) = x i C k ( x i μ k ) 2

Donde: Xi: es un punto de dato que pertenece al cluster Ck. Uk: es el valor medio de los puntos asignados al cluster Ck. Cada observación ( x i ) se asigna a un clúster determinado tal que la distancia de la suma de cuadrados (SS) de la observación a sus centros de clúster asignados ( μ k ) se minimice. Definimos la variación total dentro del clúster como sigue:

(7) t o t . w i t h i n e s s = k = 1 k W ( C k ) = k = 1 k x i C k ( x i μ k ) 2

La suma total de cuadrados dentro del cluster mide la compacidad (es decir, la bondad) de la agrupación y queremos que sea lo más pequeña posible.

Algoritmo K-means

El primer paso al utilizar el clustering de k-means es indicar el número de clusters (k) que se generarán en la solución final. El algoritmo comienza seleccionando aleatoriamente k objetos del conjunto de datos que servirán como centros iniciales para los clusters. Los objetos seleccionados también se conocen como medios o centroides de los clusters. A continuación, cada uno de los objetos restantes se asigna a su centroide más cercano, donde el más cercano se define utilizando la distancia euclidiana (ecuación 1) entre el objeto y la media del clúster. Este paso se denomina “paso de asignación de clusters”. Después del paso de asignación, el algoritmo calcula el nuevo valor medio de cada cluster. El término “actualización del centroide del cluster” se utiliza para designar este paso. Ahora que se han recalculado los centros, se comprueba de nuevo cada observación para ver si puede estar más cerca de un cluster diferente. Todos los objetos se reasignan de nuevo utilizando los medios de cluster actualizados. Los pasos de asignación de clusters y actualización de centros se repiten de forma iterativa hasta que las asignaciones de clusters dejan de cambiar (es decir, hasta que se alcanza la convergencia). Es decir, los clusters formados en la iteración actual son los mismos que los obtenidos en la iteración anterior.

El algoritmo K-means puede ser resumido como lo siguiente:

  1. Especifique el número de clusters (K) que se crearán (por el analista)

  2. Seleccionar aleatoriamente k objetos del conjunto de datos como centros de cluster iniciales o medios

  3. Asigna cada observación a su centroide más cercano, basándose en la distancia euclidiana entre el objeto y el centroide

  4. Para cada uno de los k clusters, actualice el centroide del cluster calculando los nuevos valores medios de todos los puntos de datos del cluster. El centroide de un kº cluster es un vector de longitud p que contiene las medias de todas las variables para las observaciones del kº cluster; p es el número de variables.

  5. Minimizar iterativamente el total dentro de la suma de cuadrados (Ecuación 7). Es decir, iterar los pasos 3 y 4 hasta que las asignaciones de cluster dejen de cambiar o se alcance el número máximo de iteraciones. Por defecto, el software R utiliza 10 como valor por defecto para el número máximo de iteraciones.

Cálculo de la agrupación de k-means en R

Podemos calcular k-means en R con la función (kmeans). Aquí se agrupan los datos en dos clusters (centros = 2). La función (kmeans) también tiene una opción (nstart) que intenta múltiples configuraciones iniciales e informa sobre la mejor. Por ejemplo, añadir (nstart = 25) generará 25 configuraciones iniciales. Este enfoque se recomienda a menudo

k2 <- kmeans(df, centers = 2, nstart = 25)
str(k2)
## List of 9
##  $ cluster     : Named int [1:50] 2 2 2 1 2 2 1 1 2 2 ...
##   ..- attr(*, "names")= chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
##  $ centers     : num [1:2, 1:4] -0.67 1.005 -0.676 1.014 -0.132 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:2] "1" "2"
##   .. ..$ : chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
##  $ totss       : num 196
##  $ withinss    : num [1:2] 56.1 46.7
##  $ tot.withinss: num 103
##  $ betweenss   : num 93.1
##  $ size        : int [1:2] 30 20
##  $ iter        : int 1
##  $ ifault      : int 0
##  - attr(*, "class")= chr "kmeans"

La salida de (kmeans) es una lista con varios datos. La más importante es: (Cluster): Un vector de enteros (de 1:k) que indica el cluster al que se asigna cada punto. (centros): Una matriz de centros de cluster. (totss): La suma total de cuadrados. (withinss): Vector de la suma de cuadrados dentro del clúster, un componente por clúster. (tot.withinss): La suma total de cuadrados dentro del clúster, es decir, sum(withinss). (betweenss): La suma de cuadrados entre grupos, es decir, \(totss-tot.withinss\). (tamaño): El número de puntos en cada cluster.

Si imprimimos los resultados veremos que nuestras agrupaciones dieron lugar a 2 tamaños de cluster de 30 y 20. Vemos los centros de cluster (medias) para los dos grupos a través de las cuatro variables (Asesinato, Asalto, UrbanPop, Violación). También obtenemos la asignación de clúster para cada observación (es decir, Alabama se asignó al clúster 2, Arkansas se asignó al clúster 1, etc.).

k2
## K-means clustering with 2 clusters of sizes 30, 20
## 
## Cluster means:
##      Murder    Assault   UrbanPop       Rape
## 1 -0.669956 -0.6758849 -0.1317235 -0.5646433
## 2  1.004934  1.0138274  0.1975853  0.8469650
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              2              2              2              1              2 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              2              1              1              2              2 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              1              1              2              1              1 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              1              1              2              1              2 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              1              2              1              2              2 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              1              1              2              1              1 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              2              2              2              1              1 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              1              1              1              1              2 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              1              2              2              1              1 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              1              1              1              1              1 
## 
## Within cluster sum of squares by cluster:
## [1] 56.11445 46.74796
##  (between_SS / total_SS =  47.5 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

También podemos ver nuestros resultados utilizando (fviz_cluster). Esto proporciona una bonita ilustración de los clusters. Si hay más de dos dimensiones (variables) (fviz_cluster) realizará un análisis de componentes principales (PCA) y trazará los puntos de datos según los dos primeros componentes principales que explican la mayoría de la varianza.

fviz_cluster(k2, data = df)

Como alternativa, puede utilizar los gráficos de dispersión estándar por pares para ilustrar los clusters en comparación con las variables originales

df %>%
  as_tibble() %>%
  mutate(cluster = k2$cluster,
         state = row.names(USArrests)) %>%
  ggplot(aes(UrbanPop, Murder, color = factor(cluster), label = state)) +
  geom_text()

Dado que el número de conglomerados (k) debe fijarse antes de iniciar el algoritmo, a menudo resulta ventajoso utilizar varios valores diferentes de k y examinar las diferencias en los resultados. Podemos ejecutar el mismo proceso para 3, 4 y 5 clusters, y los resultados se muestran en la figura:

k3 <- kmeans(df, centers = 3, nstart = 25)
k4 <- kmeans(df, centers = 4, nstart = 25)
k5 <- kmeans(df, centers = 5, nstart = 25)

# plots to compare
p1 <- fviz_cluster(k2, geom = "point", data = df) + ggtitle("k = 2")
p2 <- fviz_cluster(k3, geom = "point",  data = df) + ggtitle("k = 3")
p3 <- fviz_cluster(k4, geom = "point",  data = df) + ggtitle("k = 4")
p4 <- fviz_cluster(k5, geom = "point",  data = df) + ggtitle("k = 5")

library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
grid.arrange(p1, p2, p3, p4, nrow = 2)

Aunque esta evaluación visual nos indica dónde se producen verdaderas dilataciones (o no se producen, como los clusters 2 y 4 en el gráfico k = 5) entre los clusters, no nos dice cuál es el número óptimo de clusters.

Determinación de las agrupaciones óptimas

Como se recordará, el analista especifica el número de conglomerados que debe utilizar; preferentemente, el analista desearía utilizar el número óptimo de conglomerados. Para ayudar al analista, a continuación se explican los tres métodos más populares para determinar los conglomerados óptimos, que incluyen: 1. Método del codo 2. Método de la silueta 3. Estadística de la brecha

Método del codo

Recordemos que la idea básica de los métodos de partición de clusters, como el clustering de k-means, es definir los clusters de forma que se minimice la variación total intra-cluster (conocida como variación total dentro del cluster o suma total de cuadrados dentro del cluster):

(8) m i n i m i z e ( k = 1 k W ( C k ) )

Donde Ck es el Kº cluster y W(Ck) es la variación dentro del cluster. La suma cuadrada total dentro del cluster (wss) mide la compacidad de la agrupación y queremos que sea lo más pequeña posible. Así, podemos utilizar el siguiente algoritmo para definir los clusters óptimos: 1. Calcule el algoritmo de clustering (por ejemplo, el clustering de k-means) para diferentes valores de k. Por ejemplo, variando k de 1 a 10 clusters 2. Para cada k, calcule la suma total de cuadrados dentro del clúster (wss) 3. Trazar la curva de wss en función del número de clusters k. 4. La ubicación de una curva (rodilla) en la parcela se considera generalmente como un indicador del número apropiado de agrupaciones.

Podemos implementar esto en R con el siguiente código. Los resultados sugieren que 4 es el número óptimo de clusters, ya que parece ser la curva de la rodilla (o del codo).

set.seed(123)

# para calcular la suma total de cuadrados dentro del clúster  
wss <- function(k) {
  kmeans(df, k, nstart = 10 )$tot.withinss
}

# Calcule y grafique el wss de k = 1 a k = 15
k.values <- 1:15

# extraer wss para 2-15 clusters
wss_values <- map_dbl(k.values, wss)

plot(k.values, wss_values,
       type="b", pch = 19, frame = FALSE, 
       xlab="Number of clusters K",
       ylab="Total within-clusters sum of squares")

Afortunadamente, este proceso para calcular el “método del codo” se ha englobado en una única función (fviz_nbclust):

set.seed(123)

fviz_nbclust(df, kmeans, method = "wss")

Método de la silueta media

En resumen, el enfoque de la silueta media mide la calidad de una agrupación. Es decir, determina lo bien que se encuentra cada objeto dentro de su cluster. Una anchura media de la silueta elevada indica una buena agrupación. El método de la silueta media calcula la silueta media de las observaciones para diferentes valores de k. El número óptimo de conglomerados k es el que maximiza la silueta media en un rango de valores posibles para k.

Podemos utilizar la función de silueta del paquete de clústeres para calcular la anchura media de la silueta. El siguiente código calcula esta aproximación para 1-15 clusters. Los resultados muestran que 2 clusters maximizan los valores de la silueta media y que 4 clusters son el segundo número óptimo de clusters

# función para calcular la silueta media de k clusters
avg_sil <- function(k) {
  km.res <- kmeans(df, centers = k, nstart = 25)
  ss <- silhouette(km.res$cluster, dist(df))
  mean(ss[, 3])
}

# Calcule y grafique el wss para k = 2 a k = 15
k.values <- 2:15

# extraer la silueta media para 2-15 clusters
avg_sil_values <- map_dbl(k.values, avg_sil)

plot(k.values, avg_sil_values,
       type = "b", pch = 19, frame = FALSE, 
       xlab = "Number of clusters K",
       ylab = "Average Silhouettes")

Al igual que en el método del codo, este proceso para calcular el “método de la silhoutte media” se ha englobado en una única función (fviz_nbclust):

fviz_nbclust(df, kmeans, method = "silhouette")

Método de la estadística de la brecha

La estadística de la brecha ha sido publicada por R. Tibshirani, G. Walther y T. Hastie (Standford University, 2001). El enfoque puede aplicarse a cualquier método de clustering (por ejemplo, clustering de K-means, clustering jerárquico). El estadístico de brecha compara la variación total intraclúster para diferentes valores de k con sus valores esperados bajo una distribución de referencia nula de los datos (es decir, una distribución sin clustering evidente). El conjunto de datos de referencia se genera mediante simulaciones de Monte Carlo del proceso de muestreo. Es decir, para cada variable (xi) en el conjunto de datos, calculamos su rango [min(xi), max(xj)] y generar valores para los n puntos de manera uniforme desde el intervalo min a max.

Para los datos observados y los datos de referencia, se calcula la variación total intraclúster utilizando diferentes valores de k. El estadístico de brecha para un k dado se define como sigue:

(9) G a p n ( k ) = E n l o g ( W k ) l o g ( W k )

Donde En denota la expectativa bajo un tamaño de muestra n de la distribución de referencia. En se define mediante bootstrapping (B) generando B copias de los conjuntos de datos de referencia y, calculando la media log(W∗k). El estadístico de brecha mide la desviación de la distribución observada Wk observado con respecto a su valor esperado bajo la hipótesis nula. La estimación de las agrupaciones óptimas (k) será el valor que maximice Gapn(k). Esto significa que la estructura de agrupación se aleja de la distribución uniforme de puntos.

En resumen, el algoritmo implica los siguientes pasos:

  1. Agrupar los datos observados, variando el número de clusters de k=1,…, kmax y calcular la correspondiente Wk. 2.Generar B conjuntos de datos de referencia y agrupar cada uno de ellos con un número variable de clusters k=1,…, kmax . Calcule las estadísticas de brecha estimadas que se presentan en la ec. 9.
    1. Dejemos ecuación w ¯ = ( 1 / B ) b l o g ( W k b ) , calculamos la desviación estándar s d ( k ) = ( 1 / b ) b ( l o g ( W k b ) w ¯ ) 2 y definimos s k = s d k × 1 + 1 / B
    2. Se escoge el número de clusters como el k más pequeño tal que G a p ( k ) G a p ( k + 1 ) s k + 1

Para calcular el método del estadístico de la brecha podemos utilizar la función (clusGap) que proporciona el estadístico de la brecha y el error estándar para una salida.

# calcular la estadística de la brecha
set.seed(123)
gap_stat <- clusGap(df, FUN = kmeans, nstart = 25,
                    K.max = 10, B = 50)
# Imprimir el resultado
print(gap_stat, method = "firstmax")
## Clustering Gap statistic ["clusGap"] from call:
## clusGap(x = df, FUNcluster = kmeans, K.max = 10, B = 50, nstart = 25)
## B=50 simulated reference sets, k = 1..10; spaceH0="scaledPCA"
##  --> Number of clusters (method 'firstmax'): 4
##           logW   E.logW       gap     SE.sim
##  [1,] 3.458369 3.640154 0.1817845 0.04422857
##  [2,] 3.135112 3.372283 0.2371717 0.03559601
##  [3,] 2.977727 3.233771 0.2560446 0.03749193
##  [4,] 2.826221 3.119172 0.2929511 0.04067348
##  [5,] 2.738868 3.019965 0.2810969 0.04185469
##  [6,] 2.666967 2.930002 0.2630347 0.04105040
##  [7,] 2.609895 2.852152 0.2422572 0.04184725
##  [8,] 2.539156 2.778562 0.2394054 0.04292750
##  [9,] 2.468162 2.711752 0.2435901 0.04344197
## [10,] 2.407265 2.647595 0.2403307 0.04548446

Podemos visualizar los resultados con (fviz_gap_stat) que sugiere cuatro clusters como el número óptimo de clusters.

fviz_gap_stat(gap_stat)

Además de estos enfoques comúnmente utilizados, el paquete NbClust, publicado por Charrad et al., 2014, proporciona 30 índices para determinar el número relevante de clusters y propone a los usuarios el mejor esquema de clustering a partir de los diferentes resultados obtenidos variando todas las combinaciones de número de clusters, medidas de distancia y métodos de clustering.

Extracción de resultados

Dado que la mayoría de estos enfoques sugieren 4 como número de clusters óptimos, podemos realizar el análisis final y extraer los resultados utilizando 4 clusters.

# Calcular la agrupación de K-means con k = 4
set.seed(123)
final <- kmeans(df, 4, nstart = 25)
print(final)
## K-means clustering with 4 clusters of sizes 8, 13, 16, 13
## 
## Cluster means:
##       Murder    Assault   UrbanPop        Rape
## 1  1.4118898  0.8743346 -0.8145211  0.01927104
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 -0.4894375 -0.3826001  0.5758298 -0.26165379
## 4  0.6950701  1.0394414  0.7226370  1.27693964
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              1              4              4              1              4 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              4              3              3              4              1 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              3              2              4              3              2 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              3              2              1              2              4 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              3              4              2              1              4 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              2              2              4              2              3 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              4              4              1              2              3 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              3              3              3              3              1 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              2              1              4              3              2 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              3              3              2              2              3 
## 
## Within cluster sum of squares by cluster:
## [1]  8.316061 11.952463 16.212213 19.922437
##  (between_SS / total_SS =  71.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Podemos visualizar los resultados usando (fviz_cluster):

fviz_cluster(final, data = df)

Y podemos extraer los clusters y añadirlos a nuestros datos iniciales para hacer algunas estadísticas descriptivas a nivel de cluster:

USArrests %>%
  mutate(Cluster = final$cluster) %>%
  group_by(Cluster) %>%
  summarise_all("mean")
## # A tibble: 4 × 5
##   Cluster Murder Assault UrbanPop  Rape
##     <int>  <dbl>   <dbl>    <dbl> <dbl>
## 1       1  13.9    244.      53.8  21.4
## 2       2   3.6     78.5     52.1  12.2
## 3       3   5.66   139.      73.9  18.8
## 4       4  10.8    257.      76    33.2

Comentarios adicionales

El clustering de K-means es un algoritmo muy sencillo y rápido. Además, puede tratar eficazmente conjuntos de datos muy grandes. Sin embargo, el enfoque de k-means tiene algunos puntos débiles.

Una de las desventajas potenciales del clustering de K-means es que requiere que especifiquemos previamente el número de clusters. El clustering jerárquico es un enfoque alternativo que no requiere que nos comprometamos con una elección concreta de clusters. El clustering jerárquico tiene una ventaja añadida sobre el clustering de K-means, ya que da lugar a una atractiva representación de las observaciones en forma de árbol, denominada dendrograma. Un futuro tutorial ilustrará el enfoque de clustering jerárquico.

Una desventaja adicional de K-means es que es sensible a los valores atípicos y pueden producirse resultados diferentes si se cambia el orden de los datos. El enfoque de clustering Partitioning Around Medoids (PAM) es menos sensible a los valores atípicos y proporciona una alternativa robusta a k-means para hacer frente a estas situaciones. Un futuro tutorial ilustrará el enfoque de clustering PAM.

Conclusiones

A manera de conclusión, La realización de este informe nos sirvió como aporte para desarrollar nuevos conocimientos y manejar una mejor terminología acerca de las temáticas tratadas, con el fin de poder aplicar estos conceptos a lo largo, ya sea de nuestra vida académica o laboral, añadiendo así la utilización del software Rstudio como ese canal para tomar esos datos, traducirlos e implementarlos ya sea por medio de funciones o algoritmos y que sean mostrados de una manera mucho más sencilla y que sean entendidos correctamente.