UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONÓMICAS

ESCUELA DE ECONOMÍA

METODOS PARA EL ANALISIS ECONÓMICO

ACTIVIDAD:

“Laboratorio 2, Análisis de Clúster(Conglomerados)”.

DOCENTE:

Carlos Ademir Pérez Alas.

GRUPO TEÓRICO:

03

INTEGRANTES:

Christian Moisés Murcia Zepeda.      MZ18015

Salvador Antonio Figueroa Gonzalez.      FG18006

.

Ciudad Universitaria, 22 de noviembre de 2022

Análisis de Clúster (Conglomerados)

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

Corresponde a un conjunto de técnicas que permite clasificar observaciones en grupos, relativamente homogéneos internamente y al mismo tiempo relativamente diferentes entre ellos. A estos grupos se les denomina cluster o conglomerados. Y es de carácter exploratorio y descriptivo.

El propósito del análisis de conglomerados es agrupar las observaciones o casos de forma que los datos sean muy homogéneos dentro de los grupos, que tenga la mínima varianza y que estos grupos sean lo más heterogéneos posible entre ellos y tenga la máxima varianza posible. De este modo obtenemos una clasificación de los datos multivariante con la que podemos comprender mejor los mismos y la población de la que proceden. Podemos realizar análisis cluster de casos, un análisis cluster de variables y un análisis cluster por bloques si agrupamos variables y casos. El análisis cluster se podría ocupar por ejemplo para:

Con el análisis cluster se pretende encontrar un conjunto de grupos a los que ir asignando los distintos individuos por algún criterio de homogeneidad. Por lo tanto, se hace imprescindible definir una medida de similitud o bien de divergencia para ir clasificando a los individuos en unos u otros grupos.

2. Cuadro Comparativo

library(kableExtra)
text_tbl <- data.frame(
        Análisis_cluster = c("JERÁRQUICO
                       
Los llamados métodos jerárquicos tienen por objetivo agrupar clúster para formar uno nuevo o bien separar alguno ya existente para dar origen a otros dos, de tal forma que, si sucesivamente se va efectuando este proceso de aglomeración o división, se minimice alguna distancia o bien se maximice alguna medida de similitud. Está comprendido en dos grandes grupos: Agrupamiento Aglomerativo y Disociativo. Los métodos aglomerativos también conocidos como ascendentes, comienzan el análisis con tantos grupos como individuos haya mientras que los métodos disociativos también llamados descendentes, constituyen el proceso inverso al anterior.",

    
    "NO JERÁRQUICO
    
La agrupación en clústeres de particiones son métodos de agrupación que se utilizan 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." ),
        Técnicas_Disponibles = c(
    
          "AGLOMERATIVO
    
    
•   Linkage Simple

•   Linkage Completo

•   Promedio entre grupos

•   Método del centroide

•   Método de la mediana

•   Método de Ward

•   Dendograma

•   Mapa de Calor

DISOCIATIVO


•   Linkage Simple

•   Linkage Completo

•   Promedio entre grupos

•   Método del centroide

•   Método de la mediana

•   Método de Ward

•   Análisis de asociación

•   Detector Automático de Interacción.",

"Métodos de Reasignación:

•   Centroides

•   PAM

•   CLARA

• K-medias

• Quick-Cluster

• Método de Forgy

•   Nubes Dinámicas

Búsqueda de densidad:

•   Aproximación Tipológica

• Análisis Modal

• Método Taxmap

• Método de Fortín

Aprobación Probabilística:

• Método de Wolf

Métodos Directos: Block-Clustering

Métodos Reductivos: Análisis Factorial tipo Q"),
       
       
        Ventajas = c(
        "•  La principal ventaja del método jerarquico es que insinua el número de cluster
  
•   No es necesario especificar el número de clusteres necesarios para el algoritmo

•   El clustering jerárquico es fácil de implementar

•   El dendrograma producido es muy útil para comprender los datos

•   Nos permite visualizar simultaneamente, grupos de muestras y caracteristicas

",
"•  Fácil de entender, fácil de adaptar.

•   Trabaja bien con conjuntos de datos grandes o pequeños, es eficiente y tiene buen desempeño.

• K-medoids es un método de clustering más robusto que K-means, por lo es más adecuado cuando el set de datos contiene outliers o ruido"),
        Desventajas = c(
           "•   Una vez que un elemento se agrega a un grupo, no puede pertenecer a otro, a esto se le conoce como anidamiento, el principal problema es que puede que dicha asignación no sea ideal.
  
•   No es necesario especificar el número de clusteres necesarios para el algoritmo.

•   El clustering jerárquico es fácil de implementar.

•   El dendrograma producido es muy útil para comprender los datos.
",
"•  Necesita que el usuario defina el número de clústeres.

•   Necesito conocer k de antemano.

•   Sensible a ruido.

•   El resultado puede variar en base a las semillas elegidas al inicio.

•   Presenta problemas de robustez.

•   Algunas semillas pueden resultar en una tasa de convergencia menor

•   La selección de semillas se puede basar en heurísticas o resultados obtenidos por otros métodos

•   Puede caer en mínimos locales

•   No trata datos nominales (K-Modes)."
        ) 
      )


kbl(text_tbl) %>%
    kable_paper(full_width = F) %>%
    column_spec(
    1,
    bold = T,background = "white",
    width = "20em",
    border_left = T,
    border_right = T
      ) %>%
  column_spec(2,
              bold = T,
              width = "15em",
              background = "white") %>%
  column_spec(
    3,
    bold = T,
    width = "15em",
    border_left = T,
    background = "white"
  ) %>%
  column_spec(
    4,
    bold = T,
    width = "15em",
    border_right = T,
    border_left = T,
    background = "white"
  ) 
Análisis_cluster Técnicas_Disponibles Ventajas Desventajas

JERÁRQUICO

Los llamados métodos jerárquicos tienen por objetivo agrupar clúster para formar uno nuevo o bien separar alguno ya existente para dar origen a otros dos, de tal forma que, si sucesivamente se va efectuando este proceso de aglomeración o división, se minimice alguna distancia o bien se maximice alguna medida de similitud. Está comprendido en dos grandes grupos: Agrupamiento Aglomerativo y Disociativo. Los métodos aglomerativos también conocidos como ascendentes, comienzan el análisis con tantos grupos como individuos haya mientras que los métodos disociativos también llamados descendentes, constituyen el proceso inverso al anterior.

AGLOMERATIVO

• Linkage Simple

• Linkage Completo

• Promedio entre grupos

• Método del centroide

• Método de la mediana

• Método de Ward

• Dendograma

• Mapa de Calor

DISOCIATIVO

• Linkage Simple

• Linkage Completo

• Promedio entre grupos

• Método del centroide

• Método de la mediana

• Método de Ward

• Análisis de asociación

• Detector Automático de Interacción.

• La principal ventaja del método jerarquico es que insinua el número de cluster

• No es necesario especificar el número de clusteres necesarios para el algoritmo

• El clustering jerárquico es fácil de implementar

• El dendrograma producido es muy útil para comprender los datos

• Nos permite visualizar simultaneamente, grupos de muestras y caracteristicas

• Una vez que un elemento se agrega a un grupo, no puede pertenecer a otro, a esto se le conoce como anidamiento, el principal problema es que puede que dicha asignación no sea ideal.

• No es necesario especificar el número de clusteres necesarios para el algoritmo.

• El clustering jerárquico es fácil de implementar.

• El dendrograma producido es muy útil para comprender los datos.

NO JERÁRQUICO

La agrupación en clústeres de particiones son métodos de agrupación que se utilizan 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.

Métodos de Reasignación:

• Centroides

• PAM

• CLARA

• K-medias

• Quick-Cluster

• Método de Forgy

• Nubes Dinámicas

Búsqueda de densidad:

• Aproximación Tipológica

• Análisis Modal

• Método Taxmap

• Método de Fortín

Aprobación Probabilística:

• Método de Wolf

Métodos Directos: Block-Clustering

Métodos Reductivos: Análisis Factorial tipo Q

• Fácil de entender, fácil de adaptar.

• Trabaja bien con conjuntos de datos grandes o pequeños, es eficiente y tiene buen desempeño.

• K-medoids es un método de clustering más robusto que K-means, por lo es más adecuado cuando el set de datos contiene outliers o ruido

• Necesita que el usuario defina el número de clústeres.

• Necesito conocer k de antemano.

• Sensible a ruido.

• El resultado puede variar en base a las semillas elegidas al inicio.

• Presenta problemas de robustez.

• Algunas semillas pueden resultar en una tasa de convergencia menor

• La selección de semillas se puede basar en heurísticas o resultados obtenidos por otros métodos

• Puede caer en mínimos locales

• No trata datos nominales (K-Modes).

Fuente: elaboración propia con base en (Fuente, Santiago, 2016)

3. Describa las técnicas disponibles para realizar el análisis de clúster, tanto jerárquicas como no jerárquicas, presentadas en el cuadro anterior, incluya una explicación de la librería y sintaxis para implementarla en R.

Analisis jerárquico.

Técnicas disponibles:

Aglomerativos.

La agrupación aglomerativa funciona de manera “ascendente”. Es decir, cada objeto es inicialmente considerado como un grupo de un solo elemento (hoja). En cada paso del algoritmo, los dos clústeres que son más similares se combinan en un nuevo clúster más grande. Este procedimiento se repite hasta que todos los puntos son miembros de un solo cluster grande.

En otras palabras, en los aglomerativos, inicialmente, cada individuo es un grupo en si mismo. Sucesivamente se van formando grupos de mayor tamaño fusionando grupos cercanos entre sí, los cuales al final construyen un solo grupo. La agrupación aglomerativa es buena para identificar agrupaciones pequeñas. [@clusterif]

Existen muchos métodos aglomerativos de cluster, los más comunes son los siguientes:

  1. Vinculación máxima o completa: La distancia entre dos clústeres se define como el valor máximo de todas las distancias por pares entre los elementos del clúster 1 y los elementos del grupo temático 2. Tiende a producir clústeres más compactos.

  2. Vinculación mínima o única: Se define la distancia entre dos clústeres como valor mínimo de todas las distancias por pares entre los elementos en el grupo 1 y los elementos del grupo 2.

  3. Vinculación promedio: La distancia entre los dos clústeres es definida como la distancia promedios entre los elementos del grupo 1 y los del 2.

  4. Método de varianza mínima de Ward: Minimiza la varianza total dentro del grupo. En cada paso, el par de clústeres con una distancia mínima entre clústeres se fusionan.

Pasos para usar Aglomerativos en R.

  1. Estructura y preparación de la data. La data debería ser una matriz numérica, donde las filas represente observaciones y las columnas representen variables, se carga la data y se estandariza con la función scale().

  2. Medidas de similitud. Para decidir qué objetos/clústeres deben combinarse o dividirse, necesitamos métodos para medir la similitud entre objetos. En el software R, se puede usar la función dist() para calcular la distancia entre cada par de objetos de un conjunto de datos. Los resultados de este cálculo se conocen como matriz de distancia o disimilitud. (kassambara2017practical)

Con esta función “dist()” se puede calcular la distancia disimilar de una matriz, ejecutando la función en la variable creada con la data estandarizada. Para ver fácilmente la información de distancia entre objetos, reformateamos los resultados de la función dist() en una matriz usando la función as.matrix(). 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 sí mismo (que es cero). El elemento 1,2 representa la distancia entre el objeto 1 y el objeto 2, y así sucesivamente.

  1. Uso de la función linkage. Es una función para agrupar objetos en árbol de clúster jerárquico, basado en la información de distancia generada en el paso 1. Los objetos/clústeres que están muy cerca se vinculan entre sí mediante la función de “linkage”.

Si se tiene una matriz de distancia “res.dist” generada por dist() , la función base R hclust() se puede usar para crear el árbol jerárquico.

  1. Dendrogam.

    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 la función base plot(res.hc), donde res.hc es la salida de hclust(). Aquí, usaremos la función fviz_dend()[ in factoextra R package] para producir un dendrograma visualmente mas atractivo.

Para ello hay que instalar el paquete factorextra y usar la librería Primero instale factoextra escribiendo esto: install.packages(“factoextra”); siguiente visualización , y le pasamos la función fviz_dend() a la variable creada en el paso anterior.

Desagregativos.

Este enfoque funciona “de arriba hacia abajo”. Comienza con la raíz, en la que todos los objetos se incluyen en un solo clúster. Este proceso es similar al de los aglomerativos, solo que, inicialmente todos los individuos forman un solo grupo y se van sucesivamente desgajando de el, formando dos grupos, tres grupos y así hasta el final del proceso, cada caso forma un único grupo. la agrupación desagregativa es buena para identificar agrupaciones largas.[@análisisb]

Explicación de la librería y sintaxis para implementarla en R.

Mapa de calor.

Un mapa de calor (o mapa de calor) es otra forma de visualizar la agrupación jerárquica. Es también se denomina imagen de color falso, donde los valores de los datos se transforman en escala de color. Los mapas de calor nos permiten visualizar simultáneamente grupos de muestras y características. La primera agrupación jerárquica se realiza tanto de las filas como de las columnas de la matriz de datos. Las columnas/filas de la matriz de datos se reordenan de acuerdo con el resultado de agrupación jerárquica, poniendo observaciones similares cerca unas de otras. Los bloques de ‘alto’ y los valores “bajos” son adyacentes en la matriz de datos. Finalmente, se aplica un esquema de color para la visualización y se muestra la matriz de datos.

Visualizar la matriz de datos de esta manera puede ayudar a encontrar las variables que parecen ser características de cada muestra.

R Paquetes/funciones para dibujar mapas de calor.

Hay un número múltiple de paquetes de R y funciones para dibujar de forma interactiva y mapas de calor estáticos, incluyendo:

“heatmap ()”. [función base R, paquete de estadísticas]:

Dibuja un mapa de calor simple.

heatmap () en R.

Luego de hacer la respectiva carga de la data a usar, podemos la función heatmap() en la cual se incluye x que es la matriz numérica , y scale que es el que indica que los valores deben estar centrados y escalados en filas , columnas o en ninguna.

En la grafica resultante de la función se puede especificar los colores esperados con el argumento col o la librería RColorBrewer, por ejemplo si se indica que se desean tener tonos rojos y amarillos(los que tira por default) los valores altos tiene tono rojo y los bajos amarillo.

“heatmap.2()”. [paquete de R gplots]:

Dibuja un mapa de calor mejorado en comparación con la función base R. (kassambara2017practical)

Mapas mejorados con heatmap.2 en R.

La función heatmap.2 () [en paquete gplots] proporciona muchas extensiones a la función estándar R heatmap() presentada en la sección anterior.

se instala el paquete gplots para hacer uso de la librería, luego se escribe la función heatmap.2 y se puede indicar la escala, el color, el rastro y la información de densidad.

El resultado es un gráfico más atractivo y robusto.

“pheatmap()” [paquete Pheatmap R]:

Dibuja bonitos mapas de calor y proporciona más control para cambiar la apariencia de los mapas de calor. (bibliografía)

Mapas de calor bonitos: pheatmap en R.

Primero se debe instalar el paquete pheatmap para hacer uso de la librería. Al llamar la función pheatmat() los argumentos están disponibles para cambiar la métrica de agrupación en clústeres predeterminada (“euclidiana”) y método (“completo”). También es posible anotar filas y columnas mediante la agrupación de variables.

El resultado es un mapa mas atractivo visualmente y ordenado.

“d3heatmap()” [paquete d3heatmap R]:

Dibuja un mapa de calor interactivo/en el que se puede hacer clic.

Mapas de calor interactivos con “d3heatmap()”en R.

Primero, hacer la istalacion del paquete d3heatmap, para hacer uso de la librería, donde se puede indicar la escalar y los colores deseados, asi como también poner el numero de grupos en las filas y en las columnas . La función d3heamap() permite:

• Poner el mouse en una celda del mapa de calor de interés para ver los nombres de las filas y las columnas, así como el valor correspondiente.

• Seleccionar un área para hacer zoom. Después de hacer zoom, hacer clic en el mapa de calor nuevamente para ir volver a la pantalla anterior.

“Heatmap()” [Paquete ComplexHeatmap R/Bioconductor]:

Dibuja, anota y organiza mapas de calor complejos (muy útiles para el análisis de datos genómicos). [@clusteri]

Mejora de los mapas de calor mediante dendextend.

El paquete dendextend se puede utilizar para mejorar las funciones de otros paquetes. Los datos de mtcars se utilizan en las siguientes secciones. Se comenzara definiendo el orden y la apariencia de las filas y columnas usando dendextend.

Mapa de calor complejo.

ComplexHeatmap es un paquete R/bioconductor, desarrollado por Zuguang Gu, que proporciona una solución flexible para organizar y anotar múltiples mapas de calor. Permite también visualizar la asociación entre diferentes datos de diferentes fuentes.

Analisis no jerárquico.

Técnicas disponibles:

K-medias.

Agrupación k-medias es la técnica más utilizada sin supervisión, algoritmo de aprendizaje automático para particionar un conjunto de datos determinados en un conjunto de grupos k, donde k representa el número de grupos preespecificados por el analista. Eso clasifica objetos en varios grupos, de modo que los objetos dentro de los mismos grupos son lo más similares posible, mientras que los objetos de diferentes grupos son lo menos similares posible. En agrupación k-medias, cada cluster es representado por su centro que corresponde a la media de puntos asignados al cluster.[@análisisb]

Explicación de la función k-medias.

La idea básica detrás de agrupación k-medias consiste en definir clusteres de modo que la variación total intra-cluster (conocida como variación total dentro del cluster) se minimiza.

El primer paso cuando se utiliza la agrupación en clústeres de k-medias es indicar el número de clústeres (k) que se generará en la solución final. El algoritmo comienza seleccionando aleatoriamente k objetos del conjunto de datos para que sirvan como el centro inicial para los clústeres. Los objetos seleccionados también se conocen como medios de clúster o centroides. Después del paso de asignación, el algoritmo calcula el nuevo valor medio de cada clúster. El término clúster “actualización de centroide” se utiliza para diseñar este paso. Ahora que los centros se han recalculado, cada observación se comprueba de nuevo para ver si podría estar más cerca de un cluster diferente. Todos los objetos son nuevamente reasignados usando el cluster medio actualizado. [@clusteri]

Los pasos de asignación de clusteres y actualización de centroides se repiten iterativamente hasta que las asignaciones de clusteres logran convergencia, es decir, el cluster formado en la iteración actual es el mismo que el de la anterior.

Pasos para la implementación de k-medias en R.
  1. Preparar la data. Los datos deben contener sólo variables continuas, como la k-medias. El algoritmo utiliza medios variables. Como no se quiere que el algoritmo k-means dependa de una unidad variable arbitraria, comenzamos escalando los datos usando la función R “scale ()”.

  2. Paquetes y funciones de R requeridos. Se usa la función estándar para el agrupamiento de k-medias “kmeans ()” , en la cual hay que identificar “X” , que es una matriz numérica, data frame o un vector numérico; así como el centro cuyo valor posible será el numero de clusteres (K) o un set inicial de centros de cluster (distintos); el numero máxima de iteraciones permitidas y el numero de particiones iniciales aleatorias cuando los centros es un numero (nstart debe ser mayor a 1). Pero, se recomienda calcular la agrupación en clústeres de K-Medias con un valor grande de Nstart como 25 o 50, con el fin de tener un resultado más estable.

Se hará uso de la librería “factorextra” para uso estético de los gráficos creados con “kmeans ()”.

  1. Estimación del número óptimo de clusteres. K-medias requiere que los usuarios especifiquen el numero de clusteres que se realizaran, pero, ¿Cómo elegir el numero correcto de clusteres esperados? Hay diferentes métodos para saber el número correcto, la solución simple es calcular la agrupación en clusteres de k-medias utilizando diferentes valores de k. La función R “fviz_nbclust ()” [en el paquete factorextra] proporciona una solución conveniente para estimar el número óptimo de clústeres.

  2. Computación de agrupación k-medias. Como el algoritmo de agrupamiento k-medias comienza con k centroides seleccionados al azar, siempre es recomendado utilizar la función “Set.seed()” para establecer una para el generador de números aleatorios de R.

Se busca hacer los resultados reproducibles, usando un código que realiza la agrupación en clusteres de k-medias, indicando el número de k y de nstart, como ya antes mencionado, es altamente recomendado que el valor de nstart este entre 25 a 50 para mayor estabilidad del resultado.

Es posible calcular la media de cada variable por clústeres utilizando los datos originales, con el comando “aggregate”; si se desea agregar las clasificaciones de puntos de los datos originales, lo hacemos con un “cbind”.

  1. Accediendo a los resultados de la función k-medias. La función k-medias devuelve una lista de componentes que incluyen: cluster, centros, la suma total de cuadrados, vector de la suma de cuadrados dentro del grupo, el total de la suma de cuadrados dentro del grupo, y el total de la suma de cuadrado entre los grupos. Usando un “$” podemos pedirle a r que nos muestre cualquiera de los componentes antes mencionados.

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

K-Medoides.

El algoritmo k-Medoides es un enfoque de agrupamiento relacionado con el agrupamiento de k-medias, para particionar un conjunto de datos en k grupos o clústeres. En la agrupación de k-Medoides, cada clúster está representado por uno de los puntos de datos del clúster. Estos puntos son Medoides de clúster con nombre.

El término medoide se refiere a un objeto dentro de un grupo para el cual la disimilitud promedio entre él y todos los demás miembros del clúster es mínimo. Corresponde a el punto más céntrico del clúster. Estos objetos pueden ser considerado como un ejemplo representativo de los miembros de ese grupo que puede ser útil en algunas situaciones.

K-Medoides es una alternativa robusta de la agrupación de k-medias. Esto significa que, el algoritmo es menos sensible al ruido y a los valores atípicos, en comparación con las k-medias, porque utiliza Medoides como centros de clúster en lugar de medias. (bibliografía) El método de agrupamiento k-Medoides más común es el algoritmo PAM. o Método PAM.

El uso de medios implica que la agrupación de k-medias es altamente sensible a los valores atípicos. Éste puede afectar gravemente la asignación de observaciones a grupos. Un algoritmo más robusto es proporcionado por el algoritmo PAM. [@clusteric]

Explicación de la función 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 cúmulos se construyen asignando cada observación al medoide más cercano.

A continuación, cada medoide seleccionado y cada punto de datos no medoide se intercambian y se calcula la función objetivo. La función objetivo corresponde a la suma de las diferencias de todos los objetos a su medoide más cercano. El paso SWAP intenta mejorar la calidad de la agrupación en clústeres 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 swap. Esto continúa hasta que la función objetiva ya no puede ser decreciente. El objetivo es encontrar k objetos representativos que minimicen la suma de las diferencias de las observaciones con respecto a su objeto representativo más cercano.*[@clusteria]

Pasos para la implementación de PAM en R.
  1. Preparar la data. Se carga la data a usar, usando la función “scale()” de R.

  2. Paquetes y funciones de R requeridos. La función “pam()” [paquete de clúster] y “pamk()” [paquete fpc] se pueden utilizar para calcular PAM. La función “pamk()” no requiere que un usuario decida el número de clústeres K; donde al usar pam se pone la “X” la cual puede tener el valor de una matriz numérica o un data frame donde cada fila corresponde a una observación y cada columna a una variable,y “X” también puede representar el valor de una matriz de similitud; K es el numero de clusteres ; se decide la distancia metrica a usar y el valor lógico.

Se hará uso de la librería “factorextra” para uso estético de los gráficos creados con “pam()”, asi como también se carga la librería “cluster”.

  1. Estimation del numero optimo de clusteres. Para estimar el número óptimo de clústeres, usaremos el método de silueta promedio. La idea es calcular el algoritmo PAM utilizando diferentes valores de los clústeres k. Próximo la silueta promedio de los cúmulos se dibuja de acuerdo con el número de grupos. El La silueta media mide la calidad de un agrupamiento. Una silueta media alta width indica una buena agrupación. El número óptimo de clusters k es el que maximizar la silueta media en un rango de valores posibles para k.*[@clusteri]

La librería factorextra contiene la función R “fviz_nbclust()” que proporciona una solución conveniente para estimar el número óptimo de clústeres.

  1. Computación de agrupación PAM. Se crea una variable Si se desea agregar las clasificaciones de puntos de los datos originales, lo hacemos con un “cbind”.

  2. Acceder a los resultados de la función pam(). La función pam() devuelve un objeto de clase pam cuyos componentes incluyen : medoides y clustering, con un “$” en la variable creada le podemos indicar a R lo que queremos que nos muestre , ya sea los medoides o los clustering.

  3. Visualizacion de clusteres de pam. Para visualizar los resultados de la partición, usaremos la función fviz_cluster() [factoextra paquete]. Dibuja un diagrama de dispersión de puntos de datos coloreados por números de clúster. 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 trazar los datos.

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 agenerar un conjunto óptimo de medoides para la muestra. La calidad de los medoides resultantes se mide por la disimilitud media entre cada objeto de todo el conjunto de datos y el medoide de su cluster, definido como la función de costo.

CLARA repite los procesos de muestreo y agrupación un número de veces prees especificado con el fin de 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.

La función CLARA es útil para:

  • Para que divida aleatoriamente los conjuntos de datos en múltiples subconjuntos con tamaño fijo. (bibliografía).

  • Calcule el algoritmo PAM en cada subconjunto y elija la k correspondiente objetos representativos (medoides). Asignar cada observación de todos los datos establecido en el medoide más cercano.

  • Calcular la media (o la suma) de las diferencias de las observaciones a su medoide más cercano. Esto se utiliza como una medida de la bondad de la agrupación.

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

Pasos para la implementación de CLARA en R.

  1. Preparar la data. Se hace la carga de la data a usar .Generaremos usando un conjunto de datos aleatorios. Para que el resultado sea reproducible, comenzamos mediante la función “set.seed()”.

  2. Paquetes y funciones de R requeridos. La función “clara()”[paquete de clúster] se puede utilizar para calcular CLARA. Al poner esta funcion se debe poner: “X” que representa a una matriz numérica o un data frame en la que cada fila corresponde a una observación y cada columna a una variable; k que representa el numero de clusteres; la distancia metrica a usar; el valor lógico; el numero de muestras que se extraerá del conjunto de datos y la indicacio lógica que debería ser siempre cierta.

Se hará uso de la librería “factorextra” para uso estético de los gráficos creados con “clara()”, asi como también se carga la librería “cluster”.

  1. Estimar el numero optimo de clusteres. Para estimar el número óptimo de clústeres, usaremos el método de silueta promedio. La librería factorextra contiene la función R “fviz_nbclust()” que proporciona una solución conveniente para estimar el número óptimo de clústeres.

  2. Informática CLARA. Se crea una variable Si se desea agregar las clasificaciones de puntos de los datos originales, lo hacemos con un “cbind”. La función “clara()” devuelve un objeto clara cuyos componentes incluyen : medoides, clustering y muestra, con un “$” en la variable creada le podemos indicar a R lo que queremos que nos muestre , ya sea los medoides, los clustering, o la muestra.

  3. Visualizacion de clusteres de clara. Para visualizar los resultados de la partición, usaremos la función fviz_cluster() [factoextra paquete]. Dibuja un diagrama de dispersión de puntos de datos coloreados por números de clúster.

4. Del texto: Kassambara, A. (2017). Practical Guide to Cluster Analysis in R: Unsupervised Machine Learning (Multivariate Analysis) (1st ed.). STHDA, desarrolle los ejemplos presentados en los capítulos: 4,5,6,7,8,9.

Calcular la agrupación en clústeres de k-medias en R

Carga de datos

data("USArrests") # Cargando el conjunto de datos
df <- USArrests   #Escalar los datos
# Ver las primeras 3 filas de datos
head(df, n = 3)  
##         Murder Assault UrbanPop Rape
## Alabama   13.2     236       58 21.2
## Alaska    10.0     263       48 44.5
## Arizona    8.1     294       80 31.0
Estimando el número óptimo de clústeres
library(factoextra)
fviz_nbclust(df, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2)

Computación de clústeres de k-medias
# Calcule 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 14, 10, 10, 16
## 
## Cluster means:
##      Murder  Assault UrbanPop     Rape
## 1  8.214286 173.2857 70.64286 22.84286
## 2  5.590000 112.4000 65.60000 17.27000
## 3  2.950000  62.7000 53.90000 11.51000
## 4 11.812500 272.5625 68.31250 28.37500
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              4              4              4              1              4 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              1              2              4              4              1 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              3              2              4              2              3 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              2              2              4              3              4 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              1              4              3              4              1 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              2              2              4              3              1 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              4              4              4              3              2 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              1              1              2              1              4 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              3              1              1              2              3 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              1              1              3              3              1 
## 
## Within cluster sum of squares by cluster:
## [1]  9136.643  1480.210  4547.914 19563.863
##  (between_SS / total_SS =  90.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
aggregate(USArrests, by=list(cluster=km.res$cluster), mean)
##   cluster    Murder  Assault UrbanPop     Rape
## 1       1  8.214286 173.2857 70.64286 22.84286
## 2       2  5.590000 112.4000 65.60000 17.27000
## 3       3  2.950000  62.7000 53.90000 11.51000
## 4       4 11.812500 272.5625 68.31250 28.37500
dd <- cbind(USArrests, cluster = km.res$cluster)
head(dd)
##            Murder Assault UrbanPop Rape cluster
## Alabama      13.2     236       58 21.2       4
## 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       1
Accediendo a los resultados de la función kmeans ()
# Número de conglomerado para cada una de las observaciones
km.res$cluster
##        Alabama         Alaska        Arizona       Arkansas     California 
##              4              4              4              1              4 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              1              2              4              4              1 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              3              2              4              2              3 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              2              2              4              3              4 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              1              4              3              4              1 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              2              2              4              3              1 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              4              4              4              3              2 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              1              1              2              1              4 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              3              1              1              2              3 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              1              1              3              3              1
head(km.res$cluster, 4)
##  Alabama   Alaska  Arizona Arkansas 
##        4        4        4        1
# Tamaño de Cluster
km.res$size
## [1] 14 10 10 16
# Media de Cluster
km.res$centers
##      Murder  Assault UrbanPop     Rape
## 1  8.214286 173.2857 70.64286 22.84286
## 2  5.590000 112.4000 65.60000 17.27000
## 3  2.950000  62.7000 53.90000 11.51000
## 4 11.812500 272.5625 68.31250 28.37500
Como calcular K-medias de agrupación,
fviz_cluster(
  km.res,
  data = df,
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "euclid",
  # Elipse de concentración
  star.plot = TRUE,
  # Agregar segmentos de centroides a elementos
  repel = TRUE,
  # Evitar el exceso de etiqueta (lento)
  ggtheme = theme_minimal()
)

CAPITULO 5

“K-Medoides”

Calcular PAM
df <- scale(USArrests) # Escala de la data
library(cluster)
library(factoextra)
Estimando el número óptimo de clústeres
library(cluster)
library(factoextra)
fviz_nbclust(df, pam, method = "silhouette") +
  theme_classic()

Computación en clústeres PAM
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"
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
Accediendo a los resultados de la función pam ()
# Medoides de cluster: 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
# Numero de Cluster
head(pam.res$clustering)
##    Alabama     Alaska    Arizona   Arkansas California   Colorado 
##          1          1          1          2          1          1
Visualización de clústeres PAM
fviz_cluster(
  pam.res,
  palette = c("#00AFBB", "#FC4E07"),
  # Paleta de color
  ellipse.type = "t",
  # Elipse de concentracion
  repel = TRUE,
  # Evitar el exceso de etiqueta (lento)
  ggtheme = theme_classic()
)

CAPITULO 6

“CLARA - Agrupación grande de aplicaciones”

Computing CLARA

Formato y preparación de datos
set.seed(1234)
# Genera 500 objetos, divididos en 2 clusters.
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))
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
Estimando el número óptimo de clústeres
library(cluster)
library(factoextra)
fviz_nbclust(df, clara, method = "silhouette") +
  theme_classic()

Computación CLARA
#Calcular CLARA
clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
#Imprimir componenetes 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"
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
#Medoides
clara.res$medoids
##              x         y
## S121 -1.531137  1.145057
## S455 48.357304 50.233499
#Agrupacion
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
Visualizando clústeres CLARA
fviz_cluster(
  clara.res,
  palette = c("#00AFBB", "#FC4E07"),
  # color palette
  ellipse.type = "t",
  # Concentration ellipse
  geom = "point",
  pointsize = 1,
  ggtheme = theme_classic()
)

CAPITULO 7

“Agrupación por Aglomeración”

Estructura y preparación de datos

Usando los conjuntos de datos de USArrests base R.

# Cargar los datos
data("USArrests")
# estadarizacion de 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
Medidas de similitud
# Calcule la matriz de disimilitud
# df = los datos estandarizados
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
Enlace
res.hc <- hclust(d = res.dist, method = "ward.D2")
Dendrograma
# cex: tamaño de etiqueta
library("factoextra")
fviz_dend(res.hc, cex = 0.5)

Verificar el árbol del clúster

# Calculo de la distancia del coeficiente 
res.coph <- cophenetic(res.hc)
# Correlacion entre la distancia del coeficiente y 
# la distancia original
cor(res.dist, res.coph)
## [1] 0.6975266
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382

Corta el dendrograma en diferentes grupos

# 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
# Obtener los nombres de los miembros del clúster 1
rownames(df)[grp == 1]
## [1] "Alabama"        "Georgia"        "Louisiana"      "Mississippi"   
## [5] "North Carolina" "South Carolina" "Tennessee"
# Cortar en 4 grupos y dar coor a cada grupo
fviz_dend(
  res.hc,
  k = 4,
  # dividir en cuatro grupos
  cex = 0.5,
  # tamaño de etiqueta
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  # etiquetas de color por grupos
  rect = TRUE # Agregando rectángulo alrededor de los grupos
)

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

Paquete Cluster R

library("cluster")
# Anidando la aglomeración (agrupamiento jerárquico)
res.agnes <- agnes(
  x = USArrests,
  # data matrix
  stand = TRUE,
  # estandarización de datos
  metric = "euclidean",
  # métrica para matriz de distancia
  method = "ward" # # Agrupación de análisis de análisis visual
)
# Agrupación de análisis de análisis visual
res.diana <- diana(x = USArrests, # data matrix
                   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

“Comparacion de Dendogramas”

Preparación de datos

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

Comparación de dendrogramas

library(dendextend)
# Calcular matriz de distancias
res.dist <- dist(df, method = "euclidean")
# Calculo de  2 agrupaciones jerárquicas
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")
# Creando dos dendrogramas
dend1 <- as.dendrogram (hc1)
dend2 <- as.dendrogram (hc2)
# Creando una lista para contener dendrogramas
dend_list <- dendlist(dend1, dend2)

Comparación visual de dos dendrogramas

tanglegram(dend1, dend2)

Personalizando el tanglegram

tanglegram(
  dend1,
  dend2,
  highlight_distinct_edges = FALSE,
  # Desactivar líneas discontinuas
  common_subtrees_color_lines = FALSE,
  # Colores de línea de desactivación
  common_subtrees_color_branches = TRUE,
  # Colores de ramas comunes
  main = paste("entanglement =", round(entanglement(dend_list), 2))
)

Matriz de correlación entre una lista de dendrogramas
# Matriz de correlación cofenética
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 dos árboles también se puede calcular de la siguiente manera:

# Coeficiente de correlación cofenética
cor_cophenetic(dend1, dend2)
## [1] 0.9925544
# Matriz de correlación de Baker
cor_bakers_gamma(dend1, dend2)
## [1] 0.9895528
# Crea múltiples dendrogramas encadenando
dend1 <- df %>% dist %>% hclust("complete") %>% as.dendrogram
dend2 <- df %>% dist %>% hclust("single") %>% as.dendrogram
dend3 <- df %>% dist %>% hclust("average") %>% as.dendrogram
dend4 <- df %>% dist %>% hclust("centroid") %>% as.dendrogram
# Calcular matriz de correlación
dend_list <- dendlist(
  "Complete" = dend1,
  "Single" = dend2,
  "Average" = dend3,
  "Centroid" = dend4
)
cors <- cor.dendlist(dend_list)
# Imprimir matriz de correlación
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
# Visualizando la matriz de correlación usando el paquete corrplot
library(corrplot)
corrplot(cors, "pie", "lower")

CAPITULO 9

“visualización de Dendogramas”

data(USArrests)
# Calcular distancias y agrupamiento jerárquico
dd <- dist(scale(USArrests), method = "euclidean")
aj <- hclust(dd, method = "ward.D2")
# Creando dendogramas usando factoextra
library(factoextra)
fviz_dend(aj, cex = 0.5)

Puede usar los argumentos main, sub, xlab, ylab para cambiar los títulos de la trama

library(factoextra)
fviz_dend(
  aj,
  cex = 0.5,
  main = "Dendrogram - ward.D2",
  xlab = "Objects",
  ylab = "Distance",
  sub = ""
)

Para dibujar un dendrograma horizontal

fviz_dend(aj, cex = 0.5, horiz = TRUE)

Coloreando las ramas por grupos y agregar un rectángulo alrededor de cada grupo.

fviz_dend(
  aj,
  k = 4,
  # cortar en cuatro grupos
  cex = 0.5,
  # tamaño de etiqueta
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
   color_labels_by_k = TRUE,
   # etiquetas de color por grupos
   rect = TRUE # Add rectangle around groups
)

fviz_dend(
  aj,
  k = 4,
  # Cortar en cuatro grupos
  cex = 0.5,
  # tamaño de etiqueta
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  # etiquetas de color por grupos
  ggtheme = theme_gray() # Cambiar tema
)

En el código R a continuación, cambiaremos los colores del grupo usando “jco”

fviz_dend(aj,
          cex = 0.5,
          k = 4,
          # cortar en cuatro grupos
          k_colors = "jco")

Dibujar un dendrograma horizontal con un rectángulo alrededor de los grupos

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

Además, puede trazar un dendrograma circular usando la opción type = “circular”.

fviz_dend(
  aj,
  cex = 0.5,
  k = 4,
  k_colors = "jco",
  type = "circular"
)

Usando el paquete igraph

library(igraph)
require("igraph")
fviz_dend(
  aj,
  k = 4,
  k_colors = "jco",
  type = "phylogenic",
  repel = TRUE
)

require("igraph")
# Probando phylo.layout = "layout.gem":
fviz_dend(
  aj ,
  k = 4,
  # cortar en cuatro grupos
  k_colors = "jco",
  type = "phylogenic",
  repel = TRUE,
  phylo_layout = "layout.gem"
)

Zoom en el dendrograma

Para realizar zoom en los primeros clústeres, es posible usar la opción xlim y ylim para limitar el área de la parcela.

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

Trazar un subárbol de dendrogramas
# Cree una gráfica de todo el dendrograma,
# y extrae los datos del dendrograma
dend_plot <- fviz_dend(aj,
                       k = 4,
                       # cortar en grupos de cuatro
                       cex = 0.5,
                       # tamaño de etiqueta
                       k_colors = "jco")
dend_data <-
  attr(dend_plot, "dendrogram") # Extraer datos de dendrograma
# Cortar el dendrograma a la altura h = 10
dend_cuts <- cut(dend_data, h = 10)
#  Visualice la versión truncada que contiene
# dos ramas
fviz_dend(dend_cuts$upper)

Trazar subárboles dendrogramas

# Trazar el dendrograma completo
print(dend_plot)

# Trazar el subárbol 1
fviz_dend(dend_cuts$lower[[1]], main = "Subtree 1")

# Trazar el subárbol 2
fviz_dend(dend_cuts$lower[[2]], main = "Subtree 2")

# trazar árbol circular
fviz_dend(dend_cuts$lower[[2]], type = "circular")

Manipular dendrogramas usando dendextend
#Código R estándar para crear un dendrograma
data <- scale(USArrests)
dist.res <- dist(data)
aj <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(aj)
plot(dend)

# Código R para crear un dendrograma usando el operador de encadenamiento:
library(dendextend)
dend <- USArrests[1:5,] %>% # data
  scale %>% # Escala los datos
  dist %>% # calcula una matriz de distancia
  hclust(method = "ward.D2") %>% # Agrupación jerárquica
  as.dendrogram # Convierte el objeto en un dendrograma
plot(dend)

EJEMPLOS:

library(dendextend)
# 1. Crea un dendrograma personalizado
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(aj) %>%
  set("branches_lwd", 1) %>% # Ancho de línea de ramas
  set("branches_k_color", mycols, k = 4) %>% # Colorea las ramas por grupos
  set("labels_colors", mycols, k = 4) %>% # Etiquetas de color por grupos
  set("labels_cex", 0.5) # Cambiar el tamaño de la etiqueta
# 2. Crear trama
fviz_dend(dend)

##Bibliografia

@libro{kassambara2017práctico, title={Guía práctica para el análisis de conglomerados en R: aprendizaje automático no supervisado}, autor={Kassambara, Albukadel}, volumen={1}, año={2017}, editor={Sthda} }

@article{rodriguez2001analisis, title={An{'a}lisis de cluster o an{'a}lisis de conglomerados}, author={Rodr{'}guez-Jaume, Mar{'}a-Jos{'e} and Mora Catal{'a}, Rafael and others}, year={2001}, publisher={Universidad de Alicante. Servicio de Publicaciones} }

@article{santiago2011analisis, title={An{'a}lisis de conglomerado}, author={Santiago, F}, journal={Recuperado de: http://www. fuenterre bollo. com/Economicas/ECONOMETRIA/SEGMENTACION/CONGLOMERADOS/conglomerados. pdf}, year={2011} }

igraph-the network analysis package https://igraph.org/