Portada

UNIVERSIDAD DE EL SALVADOR
FACULTAD DE CIENCIAS ECONÓMICAS
ESCUELA DE ECONOMÍA
MÉTODOS PARA EL ANÁLISIS ECONÓMICO
CICLO II-2023

GT02

TEMA A INVESTIGAR:

“ANÁLISIS DE CLÚSTER (CONGLOMERADOS)”

INTEGRANTES:

Nombre Cárne
Nicole Saraí Aguilar Hernández AH20030
Yasmin Azucena Calderón García CG19041
Carlos David Deleón Molina DM19001
Cecilia Guadalupe Mejía López ML20003
DOCENTE:

Carlos Ademir Pérez Alas

Ciudad Universitaria, San Salvador, 7 de enero del 2024.

1. Explique en que consiste el análisis de conglomerados.

El Análisis de conglomerados (o Análisis de Clusters) es una técnica de análisis exploratorio de datos para resolver problemas de clasificación. Su objeto consiste en ordenar objetos (personas, cosas, animales, plantas, variables, etc, …) en grupos (conglomerados o clusters) de forma que el grado de asociación o similitud entre miembros del mismo cluster sea más fuerte que el grado de asociación/similitud entre miembros de diferentes clusters por lo que cada cluster se describe como la clase a la que sus miembros pertenecen.

Este método permite descubrir asociaciones y estructuras en los datos que no son evidentes a priori pero que pueden ser útiles una vez que se han encontrado. Los resultados de un Análisis de Clusters pueden contribuir a la definición formal de un esquema de clasificación tal como una taxonomía para un conjunto de objetos, a sugerir modelos estadísticos para describir poblaciones, a asignar nuevos individuos a las clases para diagnóstico e identificación, etc.

Podemos encontrarnos dos tipos fundamentales de métodos de clasificación: - Jerárquicos: . En este método la clasificación resultante tiene un número creciente de clases anidadas, la agrupación Jerárquica no requieren Pre especificar el número de clústeres que se producirán.

El método jerárquico se puede subdividir en dos tipos: - Aglomerativa: Cada observación se considera inicialmente como un racimo propio (hoja). Luego, los clústeres más similares se fusionan sucesivamente hasta que haya un solo gran clúster (raíz), esta agrupación es conocida como Dendrograma. - divisivos: Una inversión de la agrupación aglomerativa, comienza con la raíz, en que todos los objetos están incluidos en un grupo. Entonces el más heterogéneo de los conglomerados se dividen sucesivamente hasta que todas las observaciones están en su propio conglomerado. (Kassambara 2017, pág. 65)

  • No Jerárquicos: En este método la clasificación resultante tiene un número creciente de clases que no son anidadas. Este método se utiliza para clasificar observaciones dentro de un conjunto de datos en varios grupos en función de su similitud. Los algoritmos requieren analista para especificar el número de conglomerados que se generarán.

El método no jerárquico se puede incluir: - Agrupación de K-medias: Cada agrupación está representada por el centro o por medio de los puntos de datos pertenecientes al clúster. El método de las K-medias es sensible a puntos de datos anómalos y valores atípicos. - Agrupación de K-medoides o Partición alrededor de medoides: Cada grupo está representado por uno de los objetos en el racimo y esta agrupación es menos sensible a valores atípicos en comparación con el método de k-medias. - Algoritmo de Agrupación de aplicaciones grandes: Con sus siglas en ingles CLARA, es una extensión del método Partición alrededor de medoides (PAM), adaptado para grandes conjuntos de datos.(Kassambara 2017, pág. 35)

2. Resumen del Análisis de Clúster.

Análisis.Cluster Técnicas.disponibles Ventajas Desventajas
Jerárquico:
Tienen por objetivo agrupar clusters para formar uno nuevo o bien separar alguno ya existente para dar origen a otros dos, de tal forma que se minimice alguna función distancia o bien se maximice alguna medida de similitud.
Métodos aglomerativos:
- Método del amalgamamiento simple.
- Método del amalgamamiento completo.
- Método del promedio entre grupos.
- Método del centroide.
- Método de la mediana.
- Método de Ward.
Métodos Disociativos:
Destacan, además de los anteriores:
- El análisis de asociación
- El detector automático de interacción
Puede encontrar agrupaciones de cualquier forma.
Tiene la capacidad de identificar valores atípicos.
No es necesario especificar el número de clusters de antemano, ya que, el método jerárquico insinúa el número.
Fácil interpretación visual a través de dendrograma.
El clustering jerárquico es de fácil implementación lo que nos permite identificar agrupaciones de cualquier forma.
La interpretación con conjuntos de datos grandes puede volverse complicada.
Al momento en que se asigna un elemento a un grupo, no se le permite pertenecer a otro.
La asignación de elementos a grupos puede no ser siempre ideal.
La falta de un número predefinido puede hacer que la elección sea subjetiva y dificulte la interpretación.
No se pueden corregir o ajustar los resultados.
No jerárquico:
También conocidos como partitivos o de optimización, tienen por objetivo realizar una sola partición de los individuos en K grupos. Ello implica que el investigador debe especificar a priori los grupos que deben ser formados, siendo ésta, posiblemente, la principal diferencia respecto de los métodos jerárquicos.
1. Métodos de resignación:
- El método K-medias.
- El Quick-Cluster análisis.
- El método de Forgy.
- El método de las nubes dinámicas.
2. Métodos de búsqueda de la densidad:
-Aproximación tipológica:
- El análisis modal de Wishart.
- El método Taxmap.
- El método de Fortin.
Aproximación porbabilística:
- Método de Wolf.
3. Métodos directos: El algoritmo más conocido dentro de este grupo es el Block-Clustering.
4. Métodos de reducción de dimensiones: Análisis Factorial tipo Q.
Los algoritmos no jerárquicos como K-means y K-medoids son conocidos por su simplicidad y fácil implementación.
De manera efectiva puede trabajar bien con un conjunto de datos grandes.
K-medoids utiliza medoides que lo hace más robusto y adecuado para outliers.
Tiene simplicidad y rapidez en la formación de clústeres.
Tanto en K-means como en K-medoids es necesario que se especifique el número de clústeres.
La presencia de outliers puede afectar la calidad de los clusters obtenidos.
La elección inicial de semillas puede afectar los resultados de los clústeres.
En K-means hay problemas de robustez y tasas de convergencia variables.
Algoritmos como K-means no son apropiados para tratar datos nominales.

Fuente: Elaboración propia con base en Kassambara (2017) y Cluster-g.pdf.

3. Técnicas disponibles para realizar el análisis de clúster.

Métodos Jerárquicos:

Aglomerativo

Este método considera cada elemento como un clúster individual y luego fusiona progresivamente los pares de clústeres hasta formar un clúster grande que engloba todos los elementos. Como resultado, se obtiene un diagrama en forma de árbol, conocido como dendrograma, que representa la agrupación de estos elementos de manera “de abajo hacia arriba”. En otras palabras, inicialmente, cada elemento se trata como un grupo separado (una hoja), y en cada iteración del algoritmo, los dos grupos más similares se combinan en un nuevo grupo más grande (nodos), repitiendo este proceso hasta que todos los puntos forman parte de un clúster principal (raíz). Este enfoque aglomerativo es útil para identificar agrupaciones más pequeñas dentro de un conjunto de datos.

Métodos:

  • Simple Linkage (Vecino más cercano): Primero se calculan las distancias entre todos los pares de individuos para luego identificar aquellos que presentan la menor distancia o mayor similitud entre ellos. Estos individuos que cumplen con esta condición se agrupan formando un conjunto que permanece unido a lo largo del proceso.

  • Complete Linkage (Vecino más lejano): El agrupamiento de enlaces completos es la distancia entre los elementos más distantes en cada grupo.

  • Average Linkage (Promedio entre grupos): Este método presenta la ventaja de que aprovecha la información de todos los miembros de los conglomerados que se comparan uniéndolos previamente. La distancia entre dos conglomerados se calcula como la distancia promedio existente entre todos los miembros del conglomerado unión de ambos.

  • Método del Centroide: Este método es espacio-conservativo, pero presenta el inconveniente de dejarse influir excesivamente por los grupos de mayor tamaño.

  • Método de la Mediana: Tambien conocido como método del centroide, la mayor desventaja de este método es que si se fusionan dos grupos de diferente tamaño, el centroide del nuevo grupo queda más cerca del grupo de mayor tamaño y más alejado del de menor tamaño en proporción a sus diferencias de tamaño. Esto trae como consecuencia que durante el proceso aglomerativo de fusión se van perdiendo paulatinamente las propiedades de los grupos pequeños. Para evitar esto, puede suponerse, con independencia del tamaño que tengan los grupos en realidad, que los grupos son de igual tamaño.

Llevando a cabo esta estrategia, la distancia entre un individuo o grupo K de centroide k y el grupo formado por la fusión de los grupos I y J de centroides i y j viene dada por la mediana del triángulo i,j, k. Razón por la cual Gower propuso el nombre de método (distancia) de la mediana.

Este método es, como el del centroide, espacio-conservativo, aunque también como él no resulta ser invariante ante transformaciones monótonas de la distancia empleada, cosa que sí ocurría con los tres primeros métodos.

  • Método de Ward: Ward propuso que la pérdida de información que se produce al integrar los distintos individuos en clusters puede medirse a través de la suma total de los cuadrados de las desviaciones entre cada punto (individuo) y la media del cluster en el que se integra. Para que el proceso de clusterización resulte óptimo, en el sentido de que los grupos formados no distorsionen los datos originales, proponía la siguiente estrategia: En cada paso del análisis se debe considerar la posibilidad de la unión de cada par de grupos y optar por la fusión de dos grupos que menos incrementen la suma de los cuadrados de las desviaciones al unirse.

El método de Ward es uno de los más utilizados en la práctica; posee casi todas las ventajas del método de la media y suele ser más discriminativo en la determinación de los niveles de agrupación .Una investigación llevada a cabo por Kuiper y Fisher probó que este método era capaz de acertar mejor con la clasificación óptima que otros métodos (mínimo, máximo, media y centroide).

Disociativa/Divisivo

Por otro lado, la inversa de la agrupación aglomerativa es la agrupación divisiva que también es conocida como DIANA (Divise Analysis) y funciona de “arriba hacía abajo”. Comienza con el root, en el que todos los objetos se incluyen en un solo clúster. En cada paso de la iteración, el grupo más heterogéneo se divide en dos. El proceso se repite hasta que todos los objetos están en su propio grupo. Esta agrupación divisiva es buena para identificar grandes agrupaciones.

Pasos a seguir.

Preparar los datos.

Calcular información de (des) similitud entre cada par de objetos en los datos a colocar.

Uso de la función de vinculación para agrupar objetos en un árbol de clúster jerárquico, según la información de distancia generada en el paso 1. Objetos/grupos que están cerca aproximadamente se vinculan entre sí mediante la función de vinculación.

Determinar dónde cortar el árbol jerárquico en grupos. Esto crea un partición de los datos.

Usando método de Linkage
library(cluster)
library(factoextra)
data("USArrests")
df <- scale(USArrests)
res.dist <- dist(df, method = "euclidean")
as.matrix(res.dist)[1:6, 1:6]
##             Alabama   Alaska  Arizona Arkansas California Colorado
## Alabama    0.000000 2.703754 2.293520 1.289810   3.263110 2.651067
## Alaska     2.703754 0.000000 2.700643 2.826039   3.012541 2.326519
## Arizona    2.293520 2.700643 0.000000 2.717758   1.310484 1.365031
## Arkansas   1.289810 2.826039 2.717758 0.000000   3.763641 2.831051
## California 3.263110 3.012541 1.310484 3.763641   0.000000 1.287619
## Colorado   2.651067 2.326519 1.365031 2.831051   1.287619 0.000000
res.hc <- hclust(d = res.dist, method = "ward.D2")
fviz_dend(res.hc, cex = 0.5)

Métodos no Jerárquicos

  • Reasignación: Este método permite que un individuo asignado a un grupo en un determinado paso del proceso sea reasignado a otro grupo en un paso posterior, si esto optimiza el criterio de selección. El proceso termina cuando no quedan individuos cuya reasignación permita optimizar el resultado que se ha conseguido. Algunos de los algoritmos más conocidos dentro de estos métodos son el método K-means (o K-medias) de McQueen (1967), el Quick Cluster Analysis y el método de Forgy, los cuales se suelen agrupar bajo el nombre de métodos centroides o centros de gravedad.

  • K-means Clustering: Este método necesita como dato de entrada el número de grupos en los que se va a segmentar la población. A partir de este número k de clusters, el algoritmo coloca primero k puntos aleatorios (centroides), luego asigna a cualquiera de esos puntos todas las muestras con las distancias más pequeñas.A continuación, el punto se desplaza a la media de las muestras más cercanas, lo cual generará una nueva asignación de muestras, ya que algunas muestras están ahora más cerca de otro centroide. Este proceso se repite de forma iterativa y los grupos se van ajustando hasta que la asignación no cambia más moviendo los puntos. Este resultado final representa el ajuste que maximiza la distancia entre los distintos grupos y minimiza la distancia intragrupo.

  • K-medoides o PAM: Este algoritmo es n enfoque de agrupación relacionado con la agrupación de k-medias para dividir un conjunto de datos en k grupos o agrupaciones. En la agrupación de k-medoides, cada grupo está representado por uno de los puntos de datos en el grupo. Estos puntos se denominan medoides de racimo.

Cuando decimos medoide nos referimos al objeto dentro de un grupo para el cual la disimilitud promedio entre él y todos los demás miembros del grupo es mínima. Corresponde a el punto más céntrico del grupo. Estos objetos (uno por grupo) se pueden considerar como un ejemplo representativo de los miembros de ese grupo que puede ser útil en algunas situaciones. Recuerde que, en la agrupación de k-medias, el centro de un grupo dado se calcula como el valor medio de todos los puntos de datos en el grupo.

K-medoid es una alternativa sólida al agrupamiento de k-medias. Esto significa que el algoritmo es menos sensible al ruido y valores atípicos, en comparación con k-medias, porque usa medoides como centros de clúster en lugar de medias (usado en k-medias).

El algoritmo k-medoids requiere que el usuario especifique k, el número de clusters que se generarán (como en el clustering de k-means). Un enfoque útil para determinar el número óptimo de conglomerados es el método de silueta, que se describe en las siguientes secciones. El método de agrupamiento de k-medoides más común es el algoritmo PAM (Partitioning Around Medoids, Kaufman & Rousseeuw, 1990).

  • CLARA: Este método puede manejar conjuntos de datos mucho más grandes. Internamente, esto se logra considerando subconjuntos de datos de tamaño fijo ( sampsize) de modo que los requisitos de tiempo y almacenamiento se vuelvan lineales en n en lugar de cuadrático

Cada subconjunto de datos se divide en k grupos utilizando el mismo algoritmo que en PAM. Una vez que se han seleccionado objetos representativos del subconjunto de datos, cada observación de todo el conjunto de datos se asigna al medoide más cercano. La media (equivalente a la suma) de las diferencias de las observaciones con su medoide más cercano se usa como una medida de la calidad de la agrupación. Se retiene el subconjunto de datos para el cual la media (o suma) es mínima.

  • Nubes Dinámicas: Se basa en que cada clúster debe tener una representación llamada núcleo o centroide de clúster para, posteriormente, hacer una búsqueda iterada de centroides y de clúster, por lo que cada clase estará repsentada por un núcleo, que será un elemento representativo de todos los que intefran la misma. Es decir, que en lugar de elegir como referencia de clase un sólo punto que constituye su centro y reasignar los puntos por proximidad a ese centro, se eligen varios puntos “h” para representar cada clase, siendo estos puntos el “núcleo” de la clase.

  • Búsqueda de densidad: Este método presenta una aproximación tipológica y una aproximación probabilística. En la primera aproximación, los grupos se forman buscando las zonas en las cuales se da una mayor concentración de individuos. Entre los algoritmos más conocidos dentro de estos métodos están el análisis modal de Wishart, el método de Taxmap de Carmichael y Sneath, y el método de Fortin. En la segunda aproximación, se parte del postulado de que las variables siguen una ley de probabilidad según la cual los parámetros varían de un grupo a otro. Se trata de encontrar los individuos que pertenecen a la misma distribución. Destaca en esta aproximación el método de las combinaciones de Wolf.

  • Métodos Directos: Los métodos directos permiten clasificar simultáneamente a los individuos y a las variables. Las entidades agrupadas, ya no son los individuos o las variables, sino que son las observaciones, es decir, los cruces que configuran la matriz de datos.

  • Block - Clustering: El obejtivo de este método es encontrar sub-matrices con filas y columnas con una alta correlación, pero uno de los problemas que plantean es que el número de clúster a calcular debe ser suministrado previamente al cálculo del algoritmo. Sin embargo, estas estrategias sólo pueden ser realizadas utilizando algoritmos de una vía y existe una falta de enroque claro para conseguir el mejor número de clústers en algoritmos de “Block-Clustering.”

  • Métodos Reductivos: Consisten en la busqueda de unos factores en el espacio de los individuos que contiene la matriz de datos, donde cada factor corresponde a un clúster y se les cononoce como “Analisis Factorial tipo Q”

  • Análisis Factorial tipo Q: El objetivo consiste en encontrar grupos de individuos con valores semejantes en las variables con la finalidad de determinar un número reducido de clúster de los que se espera que los individuos contenidos en cada uno de ellos tengan algún tipo de propiedad común.

El método parte de la matriz de correlaciones entre individuios y somete los factores econtrados a una roación ortogonal, el problema es que los individuos pueden pertenecer a varios y, por tanto, los clústers pueden presentar solapamiento, resultando una compleja interpretación.

Fuente: Elaboración en base a Cuellar (n.d.).

4.Desarrollando ejemplos

Capitulo 4

El agrupamiento de K-medias (MacQueen, 1967) es el método no supervisado más utilizado, es un algoritmo de aprendizaje automático para dividir un conjunto de datos determinado en un conjunto de k grupos, donde k representa el número de grupos preespecificados por el analista. Se clasifica objetos en múltiples grupos (clústeres) de modo que los objetos dentro del mismo grupo son lo más similares posible (es decir, alta similitud dentro de la clase), mientras que los objetos de diferentes grupos son lo más diferentes posible (es decir, baja similitud entre clases). En la agrupación de k-medias, cada grupo está representado por su centro (es decir, centroide), que Corresponde a la media de puntos asignados al cluster.

4.1 Ideas básicas de k-medias

La idea básica detrás de la agrupación de k-medias consiste en definir agrupaciones de modo que en el total se minimiza la variación dentro del grupo. Hay varios algoritmos de k-medias disponibles. El algoritmo estándar es el algoritmo de Hartigan-Wong (1979), que define la variación total dentro del grupo como la suma de las distancias al cuadrado de las distancias euclidianas entre elementos y las distancias correspondientes.

4.2 Algoritmo de k-medias

El primer paso al utilizar la agrupación de k-medias es indicar el número de agrupaciones (k) que se generará en la solución final. El algoritmo comienza seleccionando aleatoriamente k objetos del conjunto de datos para que sirvan como base o centros iniciales de los clusters. Los objetos seleccionados también se conocen como medios de clúster o centroides. A continuación, cada uno de los objetos restantes se asigna a su centroide más cercano, donde el más cercano es definido utilizando la distancia euclidiana entre el objeto y el grupo significar. Este paso se denomina “paso de asignación de clústeres”. Para utilizar la correlación distancia, los datos se ingresan como puntuaciones z.

Después del paso de asignación, el algoritmo calcula el nuevo valor medio de cada grupo. El término “actualización de centroide” del grupo se utiliza para diseñar este paso, ahora que los centros han sido recalculados, cada observación se verifica nuevamente para ver si podría estar más cerca a un grupo diferente; todos los objetos se reasignan nuevamente utilizando el clúster actualizado.

4.3 Calculando la agrupación de k-medias.

4.3.1 Datos

Cargando el conjunto de datos, data (“USArrests”)

data("USArrests") # Cargando el conjunto de datos
df <- scale(USArrests) # Scaling the data
# Ver las primeras 3 filas de datos
head(df, n = 3)
##             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

4.3.2 Paquetes y funciones de R requeridos

La función R estándar para la agrupación en clústeres de k-medias es k significa() [estadisticas paquete], cuyo formato simplificado es el siguiente: k significa(x, centros, iter.max = 10, nstart = 1)

  • X: matriz numérica, marco de datos numéricos o un vector numérico • centros: Los valores posibles son el número de conglomerados (k) o un conjunto de centros de conglomerados iniciales (distintos). Si es un número, se elige un conjunto aleatorio de filas (distintas) en x como centros iniciales. • iter.max: El número máximo de iteraciones permitidas. El valor predeterminado es 10. • nstart: El número de particiones iniciales aleatorias cuando los centros son un número. A menudo se recomienda probar nstart> 1.

Para crear un gráfico más estetico de los clústeres generados con el k significa() función, se utilizará el paquete factoextra.

4.3.3 Estimación del número óptimo de conglomerados

La agrupación de k-means requiere que los usuarios especifiquen el número de agrupaciones que se generarán.

La idea es calcular la agrupación de k-medias utilizando diferentes valores de las agrupaciones k. A continuación, se dibuja el wss (dentro de la suma del cuadrado) de acuerdo con el número de grupos. La ubicación de una curva (rodilla) en la parcela se considera generalmente como un indicador del número apropiado de grupos.

La función R fviz_nbclust() [en factoextra paquete] proporciona una solución conveniente para estimar el número óptimo de clústeres.

library(factoextra)
fviz_nbclust(df, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2)

El gráfico anterior representa la varianza dentro de los grupos. Disminuye a medida que k aumenta, pero se puede ver una curva (o “codo”) en k = 4. Esta curva indica que los grupos adicionales más allá del cuarto tienen poco valor. En la siguiente sección, clasificaremos las observaciones en 4 racimos.

4.3.4 Cálculo de la agrupación en clústeres de k-medias

Como el algoritmo de agrupamiento de k-medias comienza con k centroides seleccionados al azar, siempre se recomienda usar el set.seed () función con el fin de establecer una semilla para R es aleatorio generador de números. El objetivo es hacer reproducibles los resultados, de modo que el lector de este artículo obtenga exactamente los mismos resultados que se muestran a continuación.

El siguiente código R funciona agrupación de k-medias con k = 4:

# Calculando k-medias con k = 4
set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)
# Imprime los resultados
print(km.res)
## 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"

La salida impresa muestra: • las medias o centros del conglomerado: una matriz, cuyas filas son el número de conglomerados (1 a 4) y las columnas son variables • el vector de agrupamiento: un vector de números enteros (de 1: k) que indica el grupo al que se asigna cada punto.

Es posible calcular la media de cada variable por conglomerados utilizando los datos originales:

aggregate(USArrests, by = list(cluster = km.res$cluster), mean)
##   cluster   Murder   Assault UrbanPop     Rape
## 1       1 13.93750 243.62500 53.75000 21.41250
## 2       2  3.60000  78.53846 52.07692 12.17692
## 3       3  5.65625 138.87500 73.87500 18.78125
## 4       4 10.81538 257.38462 76.00000 33.19231

Si desea agregar las clasificaciones de puntos a los datos originales, use esto:

dd <- cbind(USArrests, cluster = km.res$cluster)
head(dd)
##            Murder Assault UrbanPop Rape cluster
## Alabama      13.2     236       58 21.2       1
## Alaska       10.0     263       48 44.5       4
## Arizona       8.1     294       80 31.0       4
## Arkansas      8.8     190       50 19.5       1
## California    9.0     276       91 40.6       4
## Colorado      7.9     204       78 38.7       4

4.3.5 Acceso a los resultados de la función kmeans ()

kmeans () La función devuelve una lista de componentes, que incluye:

  • grupo: Un vector de números enteros (de 1: k) que indica el grupo al que se asigna cada punto.
  • centros: Una matriz de centros de conglomerados (medias de conglomerados).
  • totss: La suma total de cuadrados (TSS), es decir (XI ≠ x̄)2. TSS mide la varianza total en los datos.
  • dentro: Vector de suma de cuadrados dentro del conglomerado, un componente por conglomerado.
  • tot.withinss: Suma total de cuadrados dentro del conglomerado, es decir suma(dentro).
  • entre: La suma de cuadrados entre grupos, es decir totss ≠ tot.withinss.
  • Talla: El número de observaciones en cada grupo.

Se puede acceder a los componentes de la siguiente manera:

# Número de conglomerado para cada una de las observaciones
km.res$cluster
##        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
head(km.res$cluster, 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        4        4        1
# Tamaño de cluster
km.res$size
## [1]  8 13 16 13
# Clúster significa
km.res$centers
##       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

4.3.6 Visualización de clústeres de k-medias

Es una buena idea trazar los resultados del clúster. Estos se pueden utilizar para evaluar la elección del número de conglomerados, así como para comparar dos análisis de conglomerados diferentes. Ahora, queremos visualizar los datos en un diagrama de dispersión coloreando cada punto de datos de acuerdo con su asignación de grupo. El problema es que los datos contienen más de 2 variables y la pregunta es qué variables elegir para el diagrama de dispersión xy.

Una solución es reducir el número de dimensiones aplicando un algoritmo de reducción de dimensionalidad, como Análisis de componentes principales (PCA), que opera sobre las cuatro variables y genera dos nuevas variables (que representan las variables originales) que puede usar para hacer el gráfico. En otras palabras, si tenemos un conjunto de datos multidimensionales, una solución es realizar un análisis de componentes principales (PCA) y trazar puntos de datos de acuerdo con las dos primeras coordenadas de los componentes principales.

La función fviz_cluster() [factoextra paquete] se puede utilizar para visualizar fácilmente los clústeres de kmedias. Toma los resultados de k-medias y los datos originales como argumentos. En la gráfica resultante, las observaciones se representan mediante puntos, utilizando componentes principales si el número de variables es mayor que 2. También es posible dibujar una elipse de concentración alrededor de cada grupo.

fviz_cluster(
  km.res,
  data = df,
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "euclid",
  # Concentration ellipse
  star.plot = TRUE,
  # Add segments from centroids to items
  repel = TRUE,
  # Avoid label overplotting (slow)
  ggtheme = theme_minimal()
)

Capitulo 5

k-medioides

El algoritmo k-medoides es un enfoque de agrupación relacionado con la agrupación de k-medias para dividir un conjunto de datos en k grupos o clusters. En la agrupación de k-medoides cada grupo está representado por uno de los puntos de datos del grupo. Estos puntos sonllamados medoides del racimo.

5.1 Concepto PAM

El uso de medias implica que la agrupación de k medias es muy sensible a los valores atípicos. Esto puede afectar gravemente la asignación de observaciones a los conglomerados. Un algoritmo más robusto es proporcionado por elPAM algoritmo.

5.2 Algoritmo PAM

El algoritmo PAM se basa en la búsqueda de k objetos representativos o medoides entre las observaciones del conjunto de datos. Después de encontrar un conjunto de k medoides, los grupos se construyen asignando cada observación al medoide más cercano.

A continuación, se intercambian cada medoide my cada punto de datos no medoide seleccionado y se calcula la función objetivo. La función objetivo corresponde a la suma de las diferencias de todos los objetos con su medoide más cercano.

El paso SWAP intenta mejorar la calidad de la agrupación mediante el intercambio de objetos seleccionados (medoides) y objetos no seleccionados. Si la función objetivo se puede reducir intercambiando un objeto seleccionado con un objeto no seleccionado, entonces se lleva a cabo el intercambio. Esto se continúa hasta que la función objetivo ya no se puede reducir. El objetivo es encontrar k objetos representativos que minimicen la suma de las diferencias de las observaciones con su objeto representativo más cercano.

5.3 Calculo de PAM

5.3.1 Datos

Usaremos los conjuntos de datos de demostración “USArrests,” usando la función R escala() de la siguiente manera:

data("USArrests") # Cargar el conjunto de datos
df <- scale(USArrests) # Escala los datos
head(df, n = 3) # Ver las primeras 3 filas de datos
##             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

5.3.3 Estimación del número óptimo de conglomerados

library(factoextra)
library(cluster)
fviz_nbclust(df, pam, method = "silhouette") +
  theme_classic()

5.3.2 Paquetes y funciones de R requeridos

La función pam() [grupo paquete] y pamk () [fpc paquete] se puede utilizar para calcular PAM. La función pamk() no requiere que el usuario decida el número de clústeres K. En los siguientes ejemplos, describiremos solo la función pam(), cuyo formato simplificado es: \[pam(x, k, métrica = “euclidiana,” stand = FALSO)\] - X: los valores posibles incluyen: • Matriz de datos numéricos o marco de datos numéricos: cada fila corresponde a una observación y cada columna corresponde a una variable. • Matriz de disimilitud: en este caso x es típicamente el resultado de margarita() o dist () - k: El número de clústeres - métrico: las métricas de distancia que se utilizarán. Las opciones disponibles son “euclidiana” y “manhattan.” - pararse: valor lógico; si es verdadero, las variables (columnas) en x se estandarizan antes de calcular las diferencias. Se ignora cuando x es una matriz de disimilitudes. Para crear un hermoso gráfico de los clústeres generados con el pam() función, utilizará lalibreria factoextra.

5.3.3 Estimando el número óptimo de clústeres

Para estimar el número óptimo de conglomerados, usaremos el método de silueta promedio. La idea es calcular el algoritmo PAM utilizando diferentes valores de los grupos k. A continuación, se dibuja la silueta de los conglomerados promedio de acuerdo con el número de conglomerados. La silueta promedio mide la calidad de un agrupamiento. Un ancho de silueta medio alto indicauna buena agrupación. El número óptimo de conglomerados k es el que maximiza la siluet a promedio sobre un rango de valores posibles para k (Kaufman y Rousseeuw [1990]).

La función R fviz_nbclust() [factoextra paquete] proporciona una solución conveniente para estimar el número óptimo de clústeres.

library(cluster)
library(factoextra)
fviz_nbclust(df, pam, method = "silhouette") +
  theme_classic()

A partir de la gráfica, el número sugerido de grupos es 2. En la siguiente sección, clasificaremos las observaciones en 2 grupos.

5.3.4 Cálculo de la agrupación en clústeres PAM

El siguiente código R calcula el algoritmo PAM con k = 2:

pam.res <- pam(df, 2)
print(pam.res)
## Medoids:
##            ID     Murder    Assault   UrbanPop       Rape
## New Mexico 31  0.8292944  1.3708088  0.3081225  1.1603196
## Nebraska   27 -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              1              1              1              2              1 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              1              2              2              1              1 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              2              2              1              2              2 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              2              2              1              2              1 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              2              1              2              1              1 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              2              2              1              2              2 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              1              1              1              2              2 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              2              2              2              2              1 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              2              1              1              2              2 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              2              2              2              2              2 
## Objective function:
##    build     swap 
## 1.441358 1.368969 
## 
## Available components:
##  [1] "medoids"    "id.med"     "clustering" "objective"  "isolation" 
##  [6] "clusinfo"   "silinfo"    "diss"       "call"       "data"

La salida impresa muestra: • los medoides del clúster: una matriz, cuyas filas son los medoides y las columnas son variables • el vector de agrupamiento: un vector de números enteros (de 1: k) que indica el grupo al que se asigna cada punto.

Si desea agregar las clasificaciones de puntos a los datos originales, use esto:

dd <- cbind(USArrests, cluster = pam.res$cluster)
head(dd, n = 3)
##         Murder Assault UrbanPop Rape cluster
## Alabama   13.2     236       58 21.2       1
## Alaska    10.0     263       48 44.5       1
## Arizona    8.1     294       80 31.0       1

5.3.5 Acceder a los resultados de la función pam ()

La función pam () devuelve un objeto de clase pam cuyos componentes incluyen: - medoides : objetos que representan grupos - agrupación : un vector que contiene el número de agrupación de cada objeto

Se puede acceder a estos componentes de la siguiente manera:

# Medoides de racimo: Nuevo México, Nebraska
pam.res$medoids
##                Murder    Assault   UrbanPop       Rape
## New Mexico  0.8292944  1.3708088  0.3081225  1.1603196
## Nebraska   -0.8008247 -0.8250772 -0.2445636 -0.5052109
# Números de clúster
head(pam.res$clustering)
##    Alabama     Alaska    Arizona   Arkansas California   Colorado 
##          1          1          1          2          1          1

5.3.6 Visualización de clústeres PAM

Para visualizar los resultados de la partición, usaremos la función fviz_cluster () [paquete factoextra]. Dibuja un diagrama de dispersión de puntos de datos coloreados por números de grupo. Si los datos contiene más de 2 variables, el algoritmo de análisis de componentes principales (PCA), se utiliza para reducir la dimensionalidad de los datos. En este caso, los dos primeros principales las dimensiones se utilizan para graficar los datos.

fviz_cluster(
  pam.res,
  palette = c("#00AFBB", "#FC4E07"),
  # color palette
  ellipse.type = "t",
  # Concentration ellipse
  repel = TRUE,
  # Avoid label overplotting (slow)
  ggtheme = theme_classic()
)

Capitulo 6

CLARA - Agrupación de grandes aplicaciones

CLARA (Clustering Large Applications, Kaufman y Rousseeuw (1990)) es una extensión de los métodos k-medoids (Capítulo 5) para tratar datos que contienen un gran número de objetos (más de varios miles de observaciones) con el fin de reducir el tiempo de cálculo y el problema de almacenamiento RAM. Para ello se utiliza el método de muestreo.

6.1 Concepto CLARA

En lugar de encontrar medoides para todo el conjunto de datos, CLARA considera una pequeña muestra de los datos con tamaño fijo (sampsize) y aplica el algoritmo PAM (Capítulo 5) para generar un conjunto óptimo de medoides para la muestra. La calidad de los medoides resultantes se mide por la disimilitud promedio entre cada objeto en todo el conjunto de datos y el medoide de su grupo, definido como la función de costo. CLARA repite los procesos de muestreo y agrupamiento un número preestablecido de veces para minimizar el sesgo de muestreo. Los resultados finales de agrupamiento corresponden al conjunto de medoides con el costo mínimo. El algoritmo CLARA se resume en la siguiente sección.

6.2 Algoritmo CLARA

El algoritmo es el siguiente:

1. Divida aleatoriamente los conjuntos de datos en varios subconjuntos con tamaño fijo (tamaño de muestra)

2. Calcule el algoritmo PAM en cada subconjunto y elija los k objetos representativos correspondientes (medoides). Asigne cada observación de todo el conjunto de datos al medoide más cercano.

3. Calcule la media (o la suma) de las diferencias de las observaciones con su medoide más cercano. Esto se usa como una medida de la bondad de la agrupación.

4. Conserve el subconjunto de datos para el que la media (o la suma) es mínima. Se lleva a cabo un análisis adicional en la partición final.

Tenga en cuenta que cada subconjunto de datos está obligado a contener los medoides obtenidos del mejor subconjunto de datos hasta ese momento. Las observaciones extraídas al azar se agregan a este conjunto hasta que se alcanza el tamaño de muestra.

6.3 Calcular CLARA en R

6.3.1 Formato y preparación de los datos

Para calcular el algoritmo CLARA en R, generaremos el uso de un conjunto de datos aleatorios. Para que el resultado sea reproducible, comenzamos utilizando la función set.seed ().

set.seed(1234)
# Genera 500 objetos, divididos en 2 grupos
df <- rbind(cbind(rnorm(200, 0, 8), rnorm(200, 0, 8)),
            cbind(rnorm(300, 50, 8), rnorm(300, 50, 8)))
# Especificar nombres de filas y columnas
colnames(df) <- c("x", "y")
rownames(df) <- paste0("S", 1:nrow(df))
# Vista previa de los datos
head(df, nrow = 6)
##             x        y
## S1  -9.656526 3.881815
## S2   2.219434 5.574150
## S3   8.675529 1.484111
## S4 -18.765582 5.605868
## S5   3.432998 2.493448
## S6   4.048447 6.083699

6.3.2 Paquetes y funciones de R requeridos

La función clara() [grupo paquete] se puede utilizar para calcular CLARA. El formato simplificado es el siguiente: clara(x, k, métrica = “euclidiana,” stand = FALSO, muestras = 5, pamLike = FALSO)

  • X: una matriz de datos numéricos o un marco de datos, cada fila corresponde a una observación y cada columna corresponde a una variable. Se permiten valores perdidos (NA).

  • k: el número de clústeres.

  • metric: las métricas de distancia que se utilizarán. Las opciones disponibles son “euclidiana” y “manhattan.” Las distancias euclidianas son la raíz de la suma de cuadrados de las diferencias y las distancias de Manhattan son la suma de las diferencias absolutas. Lea más sobre medidas de distancia (Capítulo 3). Tenga en cuenta que la distancia de Manhattan es menos sensible a los valores atípicos.

  • stand: valor lógico; si es verdadero, las variables (columnas) en x se estandarizan antes de calcular las diferencias. Tenga en cuenta que se recomienda estandarizar las variables antes de agruparlas.

  • samples: número de muestras que se extraerán del conjunto de datos. El valor predeterminado es 5, pero se recomienda un valor mucho mayor.

  • pamLike: lógico que indica si se debe utilizar el mismo algoritmo de la función pam(). Debe ser siempre verdadero.

Para crear un hermoso gráfico de los clústeres generados con el pam() función, utilizará la libreria factoextra.

Se requiere cargar los paquetes:

library(cluster)
library(factoextra)

6.3.3 Estimación del número óptimo de conglomerados

Para estimar el número óptimo de clústeres en sus datos, es posible utilizar el método de silueta promedio como se describe en el capítulo de agrupamiento de PAM (Capítulo 5). El r function fviz_nbclust () [paquete factoextra] proporciona una solución para facilitar este paso

fviz_nbclust(df, clara, method = "silhouette") +
  theme_classic()

A partir del gráfico, el número de conglomerados sugerido es 2. En la siguiente sección, clasificaremos las observaciones en 2 conglomerados.

6.3.4 Computación CLARA

El siguiente código R calcula el algoritmo PAM con k = 2:

# Calcular CLARA
clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
# Imprimir componentes de clara.res
print(clara.res)
## Call:     clara(x = df, k = 2, samples = 50, pamLike = TRUE) 
## Medoids:
##              x         y
## S121 -1.531137  1.145057
## S455 48.357304 50.233499
## Objective function:   9.87862
## Clustering vector:    Named int [1:500] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, "names")= chr [1:500] "S1" "S2" "S3" "S4" "S5" "S6" "S7" ...
## Cluster sizes:            200 300 
## Best sample:
##  [1] S37  S49  S54  S63  S68  S71  S76  S80  S82  S101 S103 S108 S109 S118 S121
## [16] S128 S132 S138 S144 S162 S203 S210 S216 S231 S234 S249 S260 S261 S286 S299
## [31] S304 S305 S312 S315 S322 S350 S403 S450 S454 S455 S456 S465 S488 S497
## 
## Available components:
##  [1] "sample"     "medoids"    "i.med"      "clustering" "objective" 
##  [6] "clusinfo"   "diss"       "call"       "silinfo"    "data"

La salida de la función clara() incluye los siguientes componentes:

  • medoids: Objetos que representan grupos
  • clustering: un vector que contiene el número de grupo de cada objeto
  • sample: etiquetas o números de caso de las observaciones en la mejor muestra, es decir, la muestra utilizada por el algoritmo clara para la partición final.

Si desea agregar las clasificaciones de puntos a los datos originales, use esto:

dd <- cbind(df, cluster = clara.res$cluster)
head(dd, n = 4)
##             x        y cluster
## S1  -9.656526 3.881815       1
## S2   2.219434 5.574150       1
## S3   8.675529 1.484111       1
## S4 -18.765582 5.605868       1

Puede acceder a los resultados devueltos por clara () de la siguiente manera:

# Medoides
clara.res$medoids
##              x         y
## S121 -1.531137  1.145057
## S455 48.357304 50.233499
# Agrupación
head(clara.res$clustering, 10)
##  S1  S2  S3  S4  S5  S6  S7  S8  S9 S10 
##   1   1   1   1   1   1   1   1   1   1

Los medoides son S121, S455.

6.3.5 Visualización de clústeres CLARA

Para visualizar los resultados de la partición, usaremos la función fviz_cluster () [ el paquete factoextra]. Dibuja un diagrama de dispersión de puntos de datos coloreados por números de grupo.

fviz_cluster(
  clara.res,
  palette = c("#00AFBB", "#FC4E07"),
  # color palette
  ellipse.type = "t",
  # Concentration ellipse
  geom = "point",
  pointsize = 1,
  ggtheme = theme_classic()
)

6.4 Resumen

El algoritmo CLARA (Clustering Large Applications) es una extensión del método de clustering PAM (Partitioning Around Medoids) para grandes conjuntos de datos. Su objetivo es reducir el tiempo de cálculo en el caso de grandes conjuntos de datos.

Como casi todos los algoritmos de particionamiento, requiere que el usuario especifique el número adecuado de conglomerados que se van a producir. Esto puede estimarse utilizando la función fviz_nbclust [en el paquete R factoextra].

La función de R clara() [paquete cluster] puede utilizarse para calcular el algoritmo CLARA. El formato simplificado es clara(x, k, pamLike = TRUE), donde “x” son los datos y k es el número de clusters a generar.

Después de calcular CLARA, se puede utilizar la función de R fviz_cluster() [paquete factoextra] para visualizar los resultados. El formato es fviz_cluster(clara.res), donde clara.res son los resultados de CLARA.

Nota: Traducción realizada con la versión gratuita del traductor DeepL.com

Capitulo 7

Agrupación aglomerativalos agrupamiento aglomerativo es el tipo más común de agrupamiento jerárquico que se utiliza para agrupar objetos en grupos en función de su similitud. También se conoce comoINÉS(Anidación aglomerativa). El algoritmo comienza tratando cada objeto como un grupo único. A continuación, los pares de grupos se fusionan sucesivamente hasta que todos los grupos se fusionan en un grupo grande que contiene todos los objetos. El resultado es una representación basada en árbol de los objetos, denominadadendrograma.

7.1 Algoritmo

La agrupación aglomerativa funciona de forma “de abajo hacia arriba.” Es decir, cada objeto se considera inicialmente como un grupo de un solo elemento (hoja). En cada paso del algoritmo, los dos grupos que son más similares se combinan en un nuevo grupo más grande (nodos). Este procedimiento se repite hasta que todos los puntos son miembros de un solo gran clúster (raíz) (consulte la figura siguiente). La inversa de la agrupación aglomerativa es agrupamiento divisivo, que también se conoce como DIANA (Análisis de división) y funciona de manera “de arriba hacia abajo.” Comienza con la raíz, en la que todos los objetos se incluyen en un solo clúster. En cada paso de la iteración, el grupo más heterogéneo se divide en dos. El proceso se repite hasta que todos los objetos están en su propio clúster.

Tenga en cuenta que la agrupación aglomerativa es buena para identificar agrupaciones pequeñas. La agrupación en clústeres divisoria es buena para identificar grandes agrupaciones. En este artículo, nos centraremos principalmente en la agrupación jerárquica aglomerativa.

7.2 Pasos para la agrupación jerárquica aglomerativa

7.2.1 Estructura y preparación de datos

Los datos deben ser una matriz numérica con: filas que representan observaciones (individuos); y columnas que representan variables, usaremos los conjuntos de datos de USArrests base R. Tenga en cuenta que, en general, se recomienda estandarizar las variables en el conjunto de datos antes de realizar un análisis posterior. La estandarización hace que las variables sean comparables cuando se miden en diferentes escalas. Por ejemplo, una variable puede medir la altura en metros y otra variable puede medir el peso en kg. La función Rescala() se puede utilizar para la estandarización, consulte la documentación de la escala

# Cargar los datos
data("USArrests")
# Estandarizar los datos
df <- scale(USArrests)
# Mostrar las primeras 6 filas
head(df, nrow = 6)
##                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

7.2.2 Medidas de similitud

Para decidir qué objetos / grupos deben combinarse o dividirse, necesitamos métodos para medir la similitud entre objetos.

Hay muchos métodos para calcular la (dis) similitud de la información, incluyendo Eu-distancias clidean y manhattan (capítulo 3). En el software R, puede utilizar la función dist () para calcular la distancia entre cada par de objetos en un conjunto de datos. Los resultados de este cálculo se conoce como matriz de distancia o disimilitud.

Por defecto, la función dist () calcula la distancia euclidiana entre objetos; sin embargo, es posible indicar otras métricas usando el método de argumento. See? . Por ejemplo, considere el conjunto de datos base R USArrests, puede calcular la distancia matriz de la siguiente manera:

# Calcule la matriz de disimilitud
# df = los datos estandarizados
res.dist <- dist(df, method = "euclidean")

Tenga en cuenta que la función dist() calcula la distancia entre las filas de una matriz de datos utilizando el método de medición de distancia especificado.

Para ver fácilmente la información de distancia entre objetos, reformateamos los resultados de la función dist() en una matriz usando el como.matriz() función. En esta matriz, el valor en la celda formada por la fila i, la columna j, representa la distancia entre el objeto i y el objeto j en el conjunto de datos original. Por ejemplo, el elemento 1,1 representa la distancia entre el objeto 1 y él mismo (que es cero). El elemento 1,2 representa la distancia entre el objeto 1 y el objeto 2, y así sucesivamente.

El siguiente código R muestra las primeras 6 filas y columnas de la matriz de distancia:

as.matrix(res.dist)[1:6, 1:6]
##             Alabama   Alaska  Arizona Arkansas California Colorado
## Alabama    0.000000 2.703754 2.293520 1.289810   3.263110 2.651067
## Alaska     2.703754 0.000000 2.700643 2.826039   3.012541 2.326519
## Arizona    2.293520 2.700643 0.000000 2.717758   1.310484 1.365031
## Arkansas   1.289810 2.826039 2.717758 0.000000   3.763641 2.831051
## California 3.263110 3.012541 1.310484 3.763641   0.000000 1.287619
## Colorado   2.651067 2.326519 1.365031 2.831051   1.287619 0.000000

7.2.3 Vinculación

La función de vinculación toma la información de distancia, devuelta por la función dist (), y agrupa pares de objetos en grupos según su similitud. A continuación, estos nuevos Los grupos formados están vinculados entre sí para crear grupos más grandes. Este proceso es iterado hasta que todos los objetos en el conjunto de datos original están vinculados juntos en una jerarquía árbol.

Por ejemplo, dada una matriz de distancia “res.dist” generada por la función dist (), el La función base de R hclust () se puede utilizar para crear el árbol jerárquico.

hclust () se puede utilizar de la siguiente manera:

res.hc <- hclust(d = res.dist, method = "ward.D2")
  • D: una estructura de disimilitud producida por el dist () función.

  • método: El método de aglomeración (enlace) que se utilizará para calcular la distancia entre conglomerados. Los valores permitidos son “ward.D,” “ward.D2,” “single,” “complete,” “average,” “mcquitty,” “median” o “centroide.”

Hay muchos métodos de aglomeración de conglomerados (es decir, métodos de enlace). Los métodos de vinculación más comunes se describen a continuación.

  • Máximo o vinculación completa: La distancia entre dos conglomerados se define como el valor máximo de todas las distancias por pares entre los elementos del conglomerado 1 y los elementos del conglomerado 2. Tiende a producir conglomerados más compactos.

  • Mínimo o enlace único: La distancia entre dos conglomerados se define como el valor mínimo de todas las distancias por pares entre los elementos del conglomerado 1 y los elementos del conglomerado 2. Tiende a producir conglomerados largos y “sueltos.”

  • Significa o vinculación promedio: La distancia entre dos conglomerados se define como la distancia media entre los elementos del conglomerado 1 y los elementos del conglomerado 2.

  • Enlace centroide: La distancia entre dos conglomerados se define como la distancia entre el centroide del conglomerado 1 (un vector medio de variables de longitud p) y el centroide del conglomerado 2.

  • Método de variación mínima de Ward: Minimiza la varianza total dentro del conglomerado. En cada paso, se fusiona el par de grupos con una distancia mínima entre grupos.

Tenga en cuenta que, en cada etapa del proceso de agrupamiento, los dos grupos, que tienen la distancia de enlace más pequeña, están vinculados entre sí.

Generalmente se prefieren el enlace completo y el método de Ward.

  • Dendrograma Los dendrogramas corresponden a la representación gráfica del árbol jerárquico generado por la función hclust (). El dendrograma se puede producir en R usando el gráfico de función base (res.hc), donde res.hc es la salida de hclust (). Aquí, usaremos el función fviz_dend () [en el paquete factoextra R] para producir un hermoso dendrograma.

Visualizar el dendrograma de la siguiente manera:

#  cex: tamaño de etiqueta
library("factoextra")
fviz_dend(res.hc, cex = 0.5)

En el dendrograma que se muestra arriba, cada hoja corresponde a un objeto. A medida que subimos por el árbol, los objetos que son similares entre sí se combinan en ramas, que a su vez se fusionan a una altura mayor.

La altura de la fusión, proporcionada en el eje vertical, indica la (dis) similitud / distancia entre dos objetos / grupos. Cuanto mayor sea la altura de la fusión, menos similares serán los objetos. Esta altura se conoce comodistancia cofenética entre los dos objetos.

Tenga en cuenta que las conclusiones sobre la proximidad de dos objetos solo se pueden extraer en función de la altura en la que se fusionan las ramas que contienen esos dos objetos primero. No podemos utilizar la proximidad de dos objetos a lo largo del eje horizontal como criterio de su similitud.

Para identificar subgrupos, podemos cortar el dendrograma a una cierta altura como se describe en las siguientes secciones.

7.3 Verificar el árbol del clúster

Después de vincular los objetos de un conjunto de datos en un árbol de clúster jerárquico, es posible que desee para evaluar que las distancias (es decir, las alturas) en el árbol reflejan las distancias originales precisamente.

Una forma de medir qué tan bien el árbol de clúster generado por la función hclust () refleja sus datos es calcular la correlación entre las distancias cofenéticas y los datos de distancia originales generados por la función dist (). Si el agrupamiento es válido, la vinculación de objetos en el árbol del clúster debe tener una fuerte correlación con el distancias entre objetos en la matriz de distancias original.

Cuanto más se acerque el valor del coeficiente de correlación a 1, con mayor precisión será La solución de agrupamiento refleja sus datos. Se considera que los valores superiores a 0,75 son buenos. Los El método de vinculación “promedio” parece producir valores altos de esta estadística. Esto puede ser una de las razones por las que es tan popular.

La función de base R cophenetic () se puede utilizar para calcular las distancias cofenéticas para agrupación jerárquica.

# Calcule la distancia cophentic
res.coph <- cophenetic(res.hc)
# Correlación entre distancia cofenética y
# la distancia original
cor(res.dist, res.coph)
## [1] 0.6975266

Ejecute la función hclust () nuevamente usando el método de vinculación promedio. A continuación, llame cophenetic () para evaluar la solución de agrupamiento.

res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382

El coeficiente de correlación muestra que el uso de un método de vinculación diferente crea un árbol que representa las distancias originales un poco mejor.

7.4 Cortar el dendrograma en diferentes grupos

Uno de los problemas con la agrupación jerárquica es que no nos dice cuántos racimos que hay, o donde cortar el dendrograma para formar grupos.

Puede cortar el árbol jerárquico a una altura determinada para dividir sus datos en grupos. La función base R cutree () se puede utilizar para cortar un árbol, generado por la función hclust (), en varios grupos especificando el número deseado de grupos o la altura de corte. Devuelve un vector que contiene el número de clúster de cada observación.

# Cortar el árbol en 4 grupos
grp <- cutree(res.hc, k = 4)
head(grp, n = 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        2        2        3
# Número de miembros en cada grupo
table(grp)
## grp
##  1  2  3  4 
##  7 12 19 12
# Obtenga los nombres de los miembros del clúster 1
rownames(df)[grp == 1]
## [1] "Alabama"        "Georgia"        "Louisiana"      "Mississippi"   
## [5] "North Carolina" "South Carolina" "Tennessee"

El resultado de los cortes se puede visualizar fácilmente usando la función fviz_dend () [en factoextra]:

#  Cortar en 4 grupos y colorear por grupos
fviz_dend(
  res.hc,
  k = 4,
  # Cut in four groups
  cex = 0.5,
  # label size
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  # color labels by groups
  rect = TRUE # Add rectangle around groups
)

Usando la función fviz_cluster () [in factoextra], también podemos visualizar el resultado en un diagrama de dispersión. Las observaciones están representadas por puntos en la gráfica, usando el método de componentes principales. Se dibuja un marco alrededor de cada grupo.

fviz_cluster(
  list(data = df, cluster = grp),
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "convex",
  # Elipse de concentración
  repel = TRUE,
  # # Evite el trazado excesivo de etiquetas (lento)
  show.clust.cent = FALSE,
  ggtheme = theme_minimal()
)

7.5 Paquete Cluster R

El clúster de paquetes R facilita la realización de análisis de clústeres en R. Proporciona la función agnes () y diana () para calcular la agrupación aglomerativa y divisiva, respectivamente. Estas funciones realizan todos los pasos necesarios para usted. No necesitas para ejecutar las funciones scale (), dist () y hclust () por separado.

Las funciones se pueden ejecutar de la siguiente manera

library("cluster")
# Anidación aglomerativa (agrupación jerárquica)
res.agnes <- agnes(
  x = USArrests,
  # matriz de datos
  stand = TRUE,
  # Estandarizar los datos
  metric = "euclidean",
  # métrica para matriz de distancia
  method = "ward" # Método de vinculación
)

# Agrupación de análisis de análisis visual
res.diana <- diana(x = USArrests, # matriz de datos
                   stand = TRUE, # estandarizar los datos
                   metric = "euclidean" # métrica para matriz de distancia
                   )

Después de ejecutar agnes () y diana (), puede usar la función fviz_dend () [in factoextra] para visualizar la salida:

fviz_dend(res.agnes, cex = 0.6, k = 4)

Capitulo 8

Después de haber mostrado como realiza la agrupación jerárquica en el capítulo anterior, es este capitulo se busca describir como comparar 2 dendrogramas usando el paquete de R llamada “dendextend”.

8.1. Preparación de los datos

Se usara una base de datos ya dentro de R llamada “USArrests”, trabajando con una pequeña porción de los datos, seleccionando aleatoriamente 10 de las 10 observaciones dentro del data set:

df.1 <- scale(USArrests)
set.seed(123)
ss.1 <- sample(1:50, 10)
df.1 <- df.1 [ss.1,]

8.2 Comparación de dendrogramas

Se comienza creando una lista con dos dendrogramas realizando la agrupación jerárquica utilizando dos formas diferentes de enlazarlos (usando “average” y “ward.D”), posteriormente, se transforma el resultado a un dendrograma y se crea la lista que los contenga.

library(dendextend)

#Calcular la distancia de la matrix
res.dist <- dist(df.1, method = "euclidean")

#Calculas las 2 agrupaciones gerarquicas
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")

#Crear los dos dendogramas
den1 <- as.dendrogram(hc1)
den2 <- as.dendrogram(hc2)

#Crear la lista que contenga los dendogramas
dend_list <- dendlist(den1, den2)

8.2.1. Comparación visual

Para comparar ambos dendrogramas, se utilizara la función “tanglegram()”, dentro de la librería “dendextend” y esta función muestra ambos dendrogramas, una al lado del otro con sus etiquetas conectadas por líneas.

La calidad del alineamiento de ambos “arboles” puede ser medida usando la función “entanglement()”. El enredo se mide entre 1 (completamente enredado) y 0 (sin enredo); un nivel bajo de enredo corresponde a un buen alineamiento.

tanglegram(den1,den2)

tanglegram(den1, den2,
           highlight_distinct_edges = FALSE,
           common_subtrees_color_lines = FALSE,
           common_subtrees_color_branches = TRUE,
           main = paste("entanglement =",
                        round(entanglement(dend_list),2)))

8.2.2. Matriz de correlación entre una lista de dendrogramas

#Matriz de correlación cofénica
cor.dendlist(dend_list, method = "cophenetic")
##           [,1]      [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
#Matriz de correlación de Baker
cor.dendlist(dend_list, method = "baker")
##           [,1]      [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000

La correlación entre ambos “arboles” puede calcularse como:

#Matriz de correlación cofénica
cor_cophenetic(den1, den2)
## [1] 0.9925544
#Matriz de correlación de Baker
cor_bakers_gamma(den1, den2)
## [1] 0.9895528

También es posible comparar simultáneamente múltiples dendrogramas. Un operador de cadena %>% es usado para correr múltiples funciones al mismo tiempo.

# Create multiple dendrograms by chaining
dend1 <- df.1 %>% dist %>% hclust("complete") %>% as.dendrogram
dend2 <- df.1 %>% dist %>% hclust("single") %>% as.dendrogram
dend3 <- df.1 %>% dist %>% hclust("average") %>% as.dendrogram
dend4 <- df.1 %>% dist %>% hclust("centroid") %>% as.dendrogram
# Compute correlation matrix
dend_list <- dendlist("Complete" = dend1, "Single" = dend2,
"Average" = dend3, "Centroid" = dend4)
cors <- cor.dendlist(dend_list)
# Print correlation matrix
round(cors, 2)
##          Complete Single Average Centroid
## Complete     1.00   0.46    0.45     0.30
## Single       0.46   1.00    0.23     0.17
## Average      0.45   0.23    1.00     0.31
## Centroid     0.30   0.17    0.31     1.00
#Visualización de la matriz de correlación usando paquete de corrplot
library(corrplot)
corrplot(cors, "pie", "lower")

Capitulo 9

Como se ha descrito en los capítulos anteriores, un dendrograma es una representación basada en un diagrama de árbol de un grupo de datos usando la agrupación jerárquica. En este capítulo, se obtendrá un código de R para ver y editar dendrpgramas.

Se comenzará calculando agrupación jerárquica usando la base de datos “USArrests”:

#Cargado de la data
data(USArrests)

#Calculo de las distancias y la agrupación jerarquica
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

9.1. Vista de los dendrogramas

library(factoextra)

#Creación de un dendrograma básico
fviz_dend(hc, cex = 0.5,
          main = "dendrograma-ward.D2",
          xlab = "Objetos", ylab = "Distancia", sub = "")

#Creación de un dendrograma horizontal
fviz_dend(hc, cex = 0.5, horiz = TRUE)

También es posible cortar el árbol a cierta altura, dividiendo los datos en múltiples grupos como se describió en el capítulo 7 (Agrupación Jerárquica), también es posible aplicar color a cada grupo y agregar un rectángulo al rededor de cada grupo:

fviz_dend(hc,
          k = 4,
          cex = 0.5,
          k_colors = c("#AF7AC5","#48C9B0","#F5B041","#58D68D"),
          color_labels_by_k = TRUE,
          rect = TRUE,
          rect_fill = TRUE)

También se puede cambiar el tema, utilizando los temas que se encuentran dentro de el paquete de ggplot2, algunos de estos se llaman: theme_gray(), theme_bw(), theme_minimal(), theme_classic(), theme_void().

fviz_dend(hc,
          k = 4,
          cex = 0.5,
          k_colors = c("#AF7AC5","#48C9B0","#F5B041","#58D68D"),
          color_labels_by_k = TRUE,
          ggtheme = theme_gray()
          )

Permitiendo los valores para k_color se incluyen algunas paletas del paquete RColorBrewer además de paletas de colores de revista científica del paquete ggsci.

fviz_dend(hc,
          k = 4,
          cex = 0.5,
          k_colors = "jco")

Si se quiere un diagrama horizontal con rectángulos en las agrupaciones, se usa:

fviz_dend(hc,
          k = 4,
          cex = 0.5,
          horiz = TRUE,
          k_colors = "jco",
          rect = TRUE,
          rect_border = "jco",
          rect_fill =TRUE)

Adicional, también se puede presentar un dendrograma circular utilizando la opción “type =”

fviz_dend(hc,
          k = 4,
          cex = 0.5,
          k_colors = "jco",
          type = "circula")

Para presentar un árbol de tipo filogénico se usa en “type=”phylogenic” y también “repel = TRUE” para evitar que los niveles se superposicionen. Esta opción requiere de un paquete llamado “igraph”.

fviz_dend(hc,
          k = 4,
          cex = 0.5,
          k_colors = "jco",
          type = "phylogenic",
          repel = TRUE)

fviz_dend(hc,
          k = 4,
          k_colors = "jco",
          type = "phylogenic",
          repel = TRUE,
          phylo_layout = "layout.gem")

9.2 Caso de dendrogramas con grandes base de datos

Si quieres calcular agrupaciones jerárquicas con un gran data set, o te gustaría hacer zoom en el dendrograma o mostrar nada más un subconjunto del dendrograma.

9.2.1. Zoom a un dendrograma

fviz_dend(hc,
          xlim = c(1, 20),
          ylim = c(1, 8))

9.2.2 Mostrar un subconjunto del dendrograma

Se debe de seguir el siguiente procedimiento: - Crear un dendrograma completo usando “fviz_dend()” y guarda el resultado como un objeto. - Utiliza la función de R llamada “cut.dendrogram()” para cortar el dendrograma, dándole una altura (h), en múltipbles subconjuntos. Esto devuelve un listado con los componentes “\(upper" y "\)lower”. - Observa los subconjuntos de árboles usando “fviz_dend()”.

dend_plot <- fviz_dend(hc, k = 4,cex = 0.5, k_colors = "jco")

dend_data <- attr(dend_plot, "dendrogram") 

dend_cuts <- cut(dend_data, h = 10)

fviz_dend(dend_cuts$upper)

print(dend_plot)

fviz_dend(dend_cuts$lower[[1]], main = "Subconjunto1")

fviz_dend(dend_cuts$lower[[2]], main = "Subconjunto2")

También se pueden mostrar subconjuntos circulares:

fviz_dend(dend_cuts$lower[[1]], type = "circular")

9.2.3. Guarda dendrogramas en un PDF

Si tienes un dendrograma grande, puedes guardarlo en un PDF al que le puedes hacer zoom sin perder calidad

pdf("dendrogram.pdf", width = 30, height = 15)
p <- fviz_dend(hc,k=4,cex = 1,k_colors = "jco")
print(p)

9.3 Manipula dendrogramas usando dendextend

El paquete dendextend da funciones para cambiar facílmente la apariencia de un dendrograma y para comparar dendrogramas.

En esta sección se usará el operador de cadena %>% para simplificar el código.

  • Código estándar para crear dendrogramas:
data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)

  • Código para crear dendrogramas usando el operador de cadena:
library(dendextend)
dend <- USArrests[1:5,] %>%
scale %>% 
dist %>%
hclust(method = "ward.D2") %>% 
as.dendrogram 
plot(dend)

- Funciones para editar dendrogramas: la función “set()” puede ser usada para cambiar parámetros del dendrograma, el formato es:

\[ set (object, what, value)\] 1. Object: Objeto, en este caso un dendrograma 2. What: un carácter que indica cuál es la propiedad del árbol que debe ser cambiada o actualizada. 3. value: un vector con el valor a cambiar en el árbol (el tipo del valor depende de lo que se coloque en “what”)

library(dendextend)
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(hc) %>%
set("branches_lwd", 1) %>% 
set("branches_k_color", mycols, k = 4) %>% 
set("labels_colors", mycols, k = 4) %>% 
set("labels_cex", 0.5) 
fviz_dend(dend)

Resumen

Se describieron las funciones y paquetes para la visualización y arreglo de los dendrogramas, incluyendo: - fviz_dend() (en la librería factoextra), que brinda soluciones convenientes para el fácil trazado de un dendrograma. También puede ser usado para crear dendrogramas rectangulares y circulares, así como arboles filogénicos. - Y la librería dendextend, que brinda métodos flexibles para personalizar dendrogramas.

Además de mostrar como trazar un subconjunto de un dendrograma grande.

5. Ejemplo de aplicación del Análisis Cluster

Información de los datos

Los datos que se tomarán para el desarrollo de este ejemplo serán tomados de la página web “www.kaggle.com” que mediante un filtrado usando la palabra clave “cluster” se llegó a una base de datos que contiene la siguiente información:

Titulo: Wine Dataset for Clustering

Descripción: “Estos datos son el resultado de un análisis químico de vinos cultivados en la misma región de Italia, pero procedentes de tres cultivares diferentes. El análisis determinó las cantidades de 13 componentes presentes en cada uno de los tres tipos de vino:”

  • Alcohol
  • Ácido málico
  • Ceniza
  • Alcalinidad de la ceniza
  • Magnesio
  • Fenoles totales
  • Flavonoides
  • Fenoles no flavonoides
  • Proantocianinas
  • Intensidad de color
  • Tono
  • DO280/OD315 de vinos diluido
  • Prolina
library(readr)
vinos <- read_csv("C:/Users/reque/Documents/R/METODOS PARA EL ANALISIS ECONOMICO/Parte2_AnálisisdeClúster/wine-clustering.csv")
head(vinos)
## # A tibble: 6 × 13
##   Alcohol Malic_Acid   Ash Ash_Alcanity Magnesium Total_Phenols Flavanoids
##     <dbl>      <dbl> <dbl>        <dbl>     <dbl>         <dbl>      <dbl>
## 1    14.2       1.71  2.43         15.6       127          2.8        3.06
## 2    13.2       1.78  2.14         11.2       100          2.65       2.76
## 3    13.2       2.36  2.67         18.6       101          2.8        3.24
## 4    14.4       1.95  2.5          16.8       113          3.85       3.49
## 5    13.2       2.59  2.87         21         118          2.8        2.69
## 6    14.2       1.76  2.45         15.2       112          3.27       3.39
## # ℹ 6 more variables: Nonflavanoid_Phenols <dbl>, Proanthocyanins <dbl>,
## #   Color_Intensity <dbl>, Hue <dbl>, OD280 <dbl>, Proline <dbl>

Por lo cual, para el desarrollo del ejemplo nada más se tomarán las primeras 4 variables: - Alcohol - Ácido málico - Ceniza - Alcalinidad de la ceniza

Método de K-medias

Estandarización de los datos

library(dplyr)
vinos <- na.omit(vinos)
sub_vinos <- vinos %>%
  select(Alcohol,
         Malic_Acid, 
         Ash,
         Ash_Alcanity)
boxplot(sub_vinos)

Debido a que no todas las variables se encuentran en una escala comparable entre sí, en necesario someter a los datos a un proceso de estandarización:

sub_vinos.est <- scale(sub_vinos)
boxplot(sub_vinos.est)

Busqueda de clusters

vinos.cua <- (nrow(sub_vinos.est) - 1) * sum(apply(sub_vinos.est, 2, var))
for (i in 2:15) vinos.cua[i] <- sum(kmeans(sub_vinos.est,
                                     centers = i) $ withinss)
plot(1:15, vinos.cua, 
     type = "b", 
     xlab = "Cantidad de Clusters",
     ylab="Suma de cuadrados dentro de grupos")

Para la elección de la cantidad de clusters, se utilizará el método conocido como “el codo”, pero debido a que en el gráfico no se observa uno con claridad, se concluye que el codo se encuentra entre el 3er y el 4to cluster.

Agregado de los casos al cluster

fit1 <- kmeans(sub_vinos.est, 4)
sub_vinos.est <- data.frame(sub_vinos.est,
                            fit1$cluster)
aggregate(sub_vinos,
          by = list(sub_vinos.est$fit1.cluster),
          FUN = mean) 
##   Group.1  Alcohol Malic_Acid      Ash Ash_Alcanity
## 1       1 13.14463   3.995366 2.412683     21.22683
## 2       2 12.49811   1.897838 2.583514     23.01622
## 3       3 12.39245   1.749388 2.067959     18.16735
## 4       4 13.83373   1.884706 2.458824     16.82353
table(sub_vinos.est $ fit1.cluster)
## 
##  1  2  3  4 
## 41 37 49 51

Como se puede observar, 41 observaciones fueron agregadas al primer cluster, 37 observaciones fueron agregadas al segundo cluster, 49 fueron agregadas al tercero y 51 fueron agregadas al cuarto.

library(factoextra)
fviz_cluster(fit1, data = sub_vinos.est,
             palette = c("#AF7AC5","#48C9B0","#F5B041","#58D68D"),
             ellipse.type = "euclid",
             star.plot = TRUE,
             repel = TRUE,
             ggtheme = theme_minimal()
)

Método jerárquico

d <- dist(sub_vinos.est[, 1:4], method = "euclidean")
fit2 <- hclust(d, method = "ward.D")

Dendrograma

plot(fit2)
rect.hclust(fit2, 
            k = 4,
            border = "red")

Integración de los casos a los clusters jerárquicos

grupos_j <- cutree(fit2, 
                 k = 4) 
sub_vinos.est <- data.frame(sub_vinos.est, 
                        grupos_j)
table(sub_vinos.est $ grupos_j)
## 
##  1  2  3  4 
## 37 71 40 30
aggregate(sub_vinos,
          by = list(sub_vinos.est$grupos_j),
          FUN = mean)
##   Group.1  Alcohol Malic_Acid      Ash Ash_Alcanity
## 1       1 13.91027   1.718919 2.470541     16.51622
## 2       2 12.32366   1.745915 2.187746     18.87746
## 3       3 13.23875   2.555250 2.591750     22.74000
## 4       4 13.16333   4.203333 2.361000     20.30333

Como se puede observar, 37 observaciones fueron agregadas al primer cluster, 71 observaciones fueron agregadas al segundo cluster, 40 fueron agregadas al tercero y 30 fueron agregadas al cuarto.

Bibliografía

Cluster-g.pdf. https://www.ugr.es/~gallardo/pdf/cluster-g.pdf.
Cuellar, J. (n.d.). RPubs - document. https://rpubs.com/JessicaCuellar/837924.
Kassambara, A. (2017). Practical guide to cluster analysis in r: Unsupervised machine learning.