UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONOMICAS

ESCUELA DE ECONOMIA

TEMA: LABORATORIO II

MATERIA: METODOS PARA EL ANALISIS ECONOMICO

DOCENTE: CARLOS ADEMIR PÉREZ ALAS

INTEGRANTES:

APELLIDOS NOMBRES CARNET PARTICIPACIÓN
BOLAÑOS PEÑA ABEL ANTONIO BP18001 \(100\%\)
MOLINA MARTINEZ MONICA VALERIA MM18046 \(100\%\)
PANIAGUA MUÑOZ KARLA REGINA PM18112 \(100\%\)
VILLATORO ROMERO DIANA CAROLINA VR18003 \(100\%\)

CICLO: II-2022

FECHA: 25 DE NOVIEMBRE DE 2022

CIUDAD UNIVERSITARIA, SAN SALVADOR, EL SALVADOR, CENTROAMERICA

1. Explique en qué consiste el análisis de conglomerados.

ANÁLISIS DE CLUSTER (CONGLOMERADOS)

El Análisis Cluster, también conocido como Análisis de Conglomerados, es una técnica estadística multivariante que busca agrupar elementos (o variables) y que trata de lograr la máxima homogeneidad en cada grupo y la mayor diferencia entre grupos.

El Análisis Cluster tiene una gran importancia en aplicación en muchas áreas de investigación. Pero, con los beneficios del Análisis Cluster existen algunas desventajas. El Análisis de Cluster es una técnica descriptiva, ateórica y no inferencial. Este Análisis no tiene bases estadísticas para deducir inferencias estadísticas sobre una población a partir de una muestra, es un método que se basa en criterios geométricos y es utilizado fundamentalmente como una técnica exploratoria, descriptiva pero no explicativa.

Finalmente, el análisis cluster depende en su totalidad, de las variables que se utilizan, de la adición o destrucción de variables relevantes que pueden tener un impacto significativo sobre la solución resultante.

De forma sencilla, el análisis de conglomerados es una forma en la cual se crean grupos para separar elementos de una población. El objetivo general de este proceso de exploración de datos consiste en extraer información dentro de un conjunto de datos y de esta forma transformarla en una estructura comprensible para un futuro uso, dicho de otro modo, esta agrupación busca identificar patrones o grupos de objetos similares dentro de un cierto conjunto de datos que resulten de interés para el investigador.

El “análisis clúster” es una técnica estadística multivariante, la cual tiene por propósito agrupar elementos (variables) y tratar de lograr la mayor homogeneidad posible en cada grupo y mayor diferencia entre los grupos. Este método es basado en criterios geométricos y se utiliza como técnica exploratoria descriptiva.

Las soluciones propuestas bajo este método dependen de las variables usadas, la destrucción o adición de variables tiene un relevante impacto en dichas soluciones. Los algoritmos de construcción de conglomerados se agrupan en dos categorías que se verán a continuación. Existen dos grandes tipos de análisis de clusters: Jerárquicos y No Jerárquicos. (De la Fuente Fernández 2011)

MÉTODOS JERÁRQUICOS

Se basan en el cálculo de una matriz de distancias y se aplican con n<200, ya que los cálculos y resultados se complican al aumentar el tamaño de la muestra. Estos métodos se caracterizan por no permitir una reasignación en los grupos, es decir, que dos clusters o individuos unidos durante el proceso, no pueden separarse en etapas decisivas.

Se pueden aplicar a variables o a observaciones:

Si se agrupan variables se necesitan de tres o más variables numéricas. Si se agrupan observaciones se necesita al menos una variable numérica. Dada la matriz, los algoritmos son de dos tipos:

    1. De aglomeración: También se denominan ascendentes. Parten de objetos singulares (cada objeto es un conglomerado) para ir construyendo conglomerados cada vez más complejos, hasta concluir en uno sólo. Requieren menor tiempo y son los más utilizados. Estos son:
  • Aglomerativos

    • Simple Linkage (Vecino más próximo).
    • Complete Linkage (Vecino más lejano).
    • Promedio entre Grupos.
    • Método del Centroide.
    • Método de la Mediana.
    • Método de Ward.
    1. De división: Parten del conjunto de datos y se van dividiendo hasta crear uno solo, los elementos que se incluyen en un grupo no se pueden reasignar. Estos son:
  • Disociativo

    • Linkage Simple.
    • Linkage Comple.
    • Promedio entre Grupos.
    • Método del Centroide.
    • Método de la Mediana.
    • Método de Ward.
    • Análisis de Asociación.

Estos métodos permiten construir un árbol de clasificación o dendograma.

Un dendograma es una representación gráfica con forma de árbol que sirve para resumir el proceso de agrupación del análisis de clusters.Los objetos similares están conectados por enlaces y su posición, en el diagrama, está determinada por el nivel de similitud o disimilitud de los objetos. (De la Fuente Fernández 2011)

MÉTODOS NO JERÁRQUICOS

También conocidos como métodos de “optimización.” Estos métodos si permiten una reasignación en los grupos, aunque se vuelve necesario fijar de antemano el número de clusters deseado.

Se utilizan cuando:

Los métodos de reasignación permiten reasignar objetos a distintos conglomerados en cada fase.

Los métodos de búsqueda de densidad se agrupan mediante la búsqueda de altas densidades (modas).

Los métodos directos permiten clasificar de forma simultánea individuos y variables. Estos métodos son:

    1. Reasignación: Permite que un individuo ya asignado a un grupo en una determinada etapa del proceso sea reasignado a otro grupo en una etapa anterior, si con esto optimiza el criterio de selección. Este proceso termina cuando no existan individuos cuya reasignación permita optimizar el resultado que se ha obtenido. En esta categoría se encuentran los métodos de:
  • Centroides:
    • K-medias.
    • Quick-Cluster.
    • Método de Forgy.
    • Nubes dinámicas.
    1. Búsqueda de densidad: Los métodos que se encuentran en esta categoría, tienen su base en la suposición de que los puntos pertenecientes a cada cluster se extraen de una distribución de probabilidad particular. Los métodos de densidad proporcionan una aproximación tipológica y una aproximación probabilística.
    1. Aproximación tipológica: En los métodos de aproximación tipológica, los grupos que se van formando buscan zonas en las que se da una mayor concentración de individuos. Entre ellos están:
    • Análisis Modal.
    • Métodos Taxap.
    • Método de Fortin.

Aproximación probabilística: Los métodos de aproximación probabilística, parten del postulado que las variables prosiguen una ley de probabilidad, por la cual, los parámetros varían de un grupo a otro. Trata de encontrar individuos pertenecientes a una misma distribución, introduciendo el cluster en la inferencia estadística. El por qué de los clusters es explicado por la existencia de poblaciones distintas y cómo descubrirlas. El método que destaca es:

  • Método de Wolf.

    1. Métodos directos: Clasifica a la misma vez a los individuos y a las variables. El algoritmo mejor conocido es:
    • Block-Clustering.
    1. Métodos reductivos: Radican en la búsqueda de factores en el espacio de los individuos, correspondiendo a un grupo. Este es:

Análisis Factorial tipo Q. Es importante establecer algunas diferencias básicas entre los métodos:

Métodos Jerárquicos:

Comienza con las observaciones y no precisa determinar a priori el número de conglomerados.

La asignación de objetos es definitiva.

Operan con una matriz de similaridades.

Métodos No Jerárquicos:

Comienza con una partición inicial de conglomerados. A priori se determina el número y composición de los conglomerados.

El procedimiento es iterativo y permite la reasignación de objetos.

Operan con la matriz de datos originales.

  • En Resumen, los usos que se le pueden dar al análisis cluster se puede representar en los siguientes cuatro puntos:

    • Desarrollar una tipología o clasificación.
    • Investigar esquemas conceptuales útiles para agrupar entidades.
    • Generar hipótesis a través de la exploración de los datos.
    • Intentar determinar si tipos definidos por otros procedimientos están de hecho presentes en un conjunto de datos. ) (De la Fuente Fernández 2011)

2. Elabore un cuadro comparativo, que incluya los siguientes elementos:

Análisis de clúster

Técnicas Disponibles

Ventajas

Desventajas

Jerárquico

 

Análisis enfocado en la agrupación de objetos en base a su similitud.

 

El clustering jerárquico no requiere especificar previamente el número de clústeres que se producirán.

 

Aglomerativos

·       No se necesita conocer el número de clústeres K.

 

·       Permite representar las sucesivas agrupaciones en forma de árbol (dendograma).

 

·       Proporcionan una fotografía de cómo están organizados los datos. El investigador puede ver cuántos conglomerados “existen” en los datos.

 

·       Pueden calcularse los centros de esos conglomerados: centroides (medias).

 

 

·       No es factible su uso para un conjunto de datos grandes.

 

·       Su tiempo de cálculo es largo.

 

·       Si la estructura de la muestra es desconocida resulta difícil escoger el algoritmo.

 

·       No hay manera de deshacer los pasos anteriores producidos para corrección de decisiones.

·       Simple Linkage (vecino más próximo)"

·       Complete Linkage (vecino más lejano

·        Promedio entre Grupos

·       Método del Centroide

·       Método de la Mediana

·       Método de Ward

 

Disociativos

·       Linkage Simple

·       Linkage Complejo

·       Promedio entre Grupos

·       Método del Centroide

·       Método de la Mediana

·       Método de Ward

·       Análisis de Asociación

 

No Jerárquico

 

Análisis basado en asignar casos o grupos diferenciados

y los configura de manera que unos dependan de otros.

 

A su vez, produce clústeres disjuntos (cada caso es un grupo), o bien clústeres solapados (un caso puede pertenecer a más de un grupo)

 

 

 

 

Reasignación

·       Mayor rapidez.

 

·       Permite el procesamiento de gran número de datos.

 

 

·       Es fácil de entender y adaptable.

 

·       Es eficiente y tiene buen desempeño.

·       Complejidad en formar las posibles particiones para escoger la óptima.

 

·       Mayor complejidad en los análisis.

 

·       Una mala decisión inicial sobre el número y composición de los grupos ocasiona una clasificación incorrecta.

 

·       No trata datos nominales.

·       K – Medias

·       K-medoides o PAM

·       CLARA

·       Nubes Dinámicas

Búsqueda de Densidad

·       Análisis Modal

·       Métodos Taxmap

·       Método de Fortin

·       Método de Wolf

Métodos Directos

·       Block Clustering

Métodos Reductivos

·       Análisis factorial tipo Q.

 

Fuente: Elaboración propia con base en Análisis conglomerados. De la Fuente Fernández, S. (2011).

(De la Fuente Fernández 2011)

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.

Jerarquico

Aglomerativos y Disociativos por sus siglas en ingles DIANA (Divise Analysis)

El agrupamiento aglomerativo funciona de manera “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 grupo grande (raíz) (ver la figura a continuación).

Lo contrario del agrupamiento aglomerativo es el agrupamiento divisivo, que también se conoce como DIANA (Divise Analysis) y funciona de manera “de arriba hacia abajo”. Comienza con la raíz, en la que todos los objetos están incluidos 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 (ver la figura a continuación).

Tenga en cuenta que el agrupamiento aglomerativo es bueno para identificar pequeños grupos. El agrupamiento divisivo es bueno para identificar grandes grupos. En este artículo, nos centraremos principalmente en el agrupamiento jerárquico aglomerativo.

Pasos para el agrupamiento jerárquico aglomerativo

Seguiremos los pasos a continuación para realizar un agrupamiento jerárquico aglomerativo usando el software R:

    1. Preparando los datos.
    1. Cálculo de información de (des)similitud entre cada par de objetos en los datos.
    1. Uso de la función de vinculación para agrupar objetos en un árbol de clúster jerárquico, en función de la información de distancia generada en el paso 1. Los objetos/agrupaciones que están muy cerca se vinculan mediante la función de vinculación.
    1. Determinar dónde cortar el árbol jerárquico en grupos. Esto crea un partición de los datos.

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.

Tenga en cuenta que, por lo general, se recomienda estandarizar las variables en el conjunto de datos antes de realizar análisis posteriores. 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 R scale() se puede usar para la estandarización. Consulte la documentación de ?scale.

library(factoextra)
# Cargar los datos 
data("USArrests")

# Estandarizar los datos 
df <- scale(USArrests)

# Mostrar la cabeza de 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

Existen muchos métodos para calcular la información de (des)similitud, incluidas las distancias Euclidiana y Manhattan (Capítulo 3). En el software R, puede usar 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 conocen como matriz de distancia o disimilitud.

De forma predeterminada, la función dist() calcula la distancia euclidiana entre objetos; sin embargo, es posible indicar otras métricas utilizando el método de argumento. Ver ?dist

Por ejemplo, considere el conjunto de datos base R USArrests, puede calcular la matriz de distancia de la siguiente manera:

# Compute the dissimilarity matrix
# df = the standardized data
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

Tenga en cuenta que la función dist() calcula la distancia entre las filas de una matriz de datos utilizando el método de medida 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 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 él mismo (que es cero). El elemento 1,2 representa la distancia entre el objeto 1 y el objeto 2, y así sucesivamente.

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 en función de su similitud. A continuación, estos grupos recién formados se vinculan entre sí para crear grupos más grandes. Este proceso se repite hasta que todos los objetos del conjunto de datos original se vinculan en un árbol jerárquico.

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

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

  • método: el método de aglomeración (vinculación) que se utilizará para calcular la distancia entre clústeres. Los valores permitidos son uno de “ward.D”, “ward.D2”, “single”, “complete”, “average”, “mcquitty”, “median” o “centroid”.

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

  • Vinculación máxima o 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.

  • Enlace mínimo o ú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”.

  • Enlace medio o promedio: La distancia entre dos conglomerados se define como la distancia promedio entre los elementos del conglomerado 1 y los elementos del conglomerado.

  • 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 la varianza mínima de Ward: Minimiza la varianza total dentro del conglomerado .

En cada paso, se fusionan el par de clústeres con una distancia mínima entre clústeres .

Nótese que, en cada etapa del proceso de agrupamiento, los dos agrupamientos que tienen la menor distancia de vinculación están vinculados entre sí.

Por lo general, se prefieren la ligadura completa y el método de Ward.

El clúster del paquete R facilita la realización de análisis de clústeres en R. Proporciona la función agnes() y diana() para calcular el agrupamiento aglomerativo y divisivo, respectivamente. Estas funciones realizan todos los pasos necesarios por usted. No necesita ejecutar las funciones scale(), dist() y hclust() por separado.

Las funciones se pueden ejecutar de la siguiente manera:

library("cluster")
# Agglomerative Nesting (Hierarchical Clustering)
res.agnes <- agnes(USArrests, # data matrix
stand = TRUE, # Standardize the data
metric = "euclidean", # metric for distance matrix
method = "ward" # Linkage method
)
# DIvisive ANAlysis Clustering
res.diana <- diana(USArrests, # data matrix
stand = TRUE, # standardize the data
metric = "euclidean" # metric for distance matrix
)

Anidamiento aglomerativo (agrupación jerárquica)

res.agnes <- agnes(x = EE.UU. arrestos, # matriz de datos stand = TRUE, # Estandarizar la métrica de datos =“euclidean”, # métrica para el método de matriz de distancia = “ward”

Método de vinculación

Analisis Divisivo Clustering res.diana <- diana(x = USAarrestos, # matriz de datos stand = TRUE, # estandarizar la métrica de datos = “euclidean” # métrica para la matriz de distancia )

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

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

No Jerarquicos

El primer paso cuando se utiliza el agrupamiento de k-medias es indicar el número de conglomerados (k) que se generarán en la solución final.

El algoritmo comienza seleccionando aleatoriamente k objetos del conjunto de datos para que sirvan como centros iniciales para los grupos. Los objetos seleccionados también se conocen como medias de conglomerados o centroides.

A continuación, cada uno de los objetos restantes se asigna a su centroide más cercano, donde el más cercano se define mediante la distancia euclidiana (Capítulo 3) entre el objeto y la media del grupo. Este paso se llama “paso de asignación de clúster”. Tenga en cuenta que, para usar la distancia de correlación , los datos se ingresan como puntajes z.

Después del paso de asignación, el algoritmo calcula el nuevo valor medio de cada grupo.

El término “actualización del centroide” del grupo se utiliza para diseñar este paso. Ahora que se han vuelto a calcular los centros , cada observación se comprueba de nuevo para ver si podría estar más cerca de un grupo diferente. Todos los objetos se reasignan nuevamente utilizando el clúster actualizado.

Los pasos de asignación de conglomerados y actualización del centroide se repiten iterativamente hasta que las asignaciones de conglomerados dejan de cambiar (es decir, hasta que se logra la convergencia ). Eso es ellos clusters formados en la iteración actual son los mismos que los obtenidos en la iteración anterior.

El algoritmo de K-medias se puede resumir de la siguiente manera:

    1. Especifique el número de conglomerados (K) que se crearán (por el analista)
    1. Seleccione aleatoriamente k objetos del conjunto de datos como centros o medios de conglomerados iniciales
    1. Asigna cada observación a su centroide más cercano, basado en la euclidiana distancia entre el objeto y el centroide
    1. Para cada uno de los k conglomerados, actualice el centroide del conglomerado calculando los nuevos valores medios de todos los puntos de datos en el conglomerado. El centoide de un conglomerado Késimo es un vector de longitud p que contiene las medias de todas las variables para las observaciones en el conglomerado k-ésimo ; p es el número de variables.
    1. Minimice iterativamente el total dentro de la suma del cuadrado. Es decir, repita los pasos 3 y 4 hasta que las asignaciones de clústeres dejen de cambiar o se alcance el número máximo de iteraciones. De forma predeterminada, el software R utiliza 10 como valor predeterminado para el número máximo de iteraciones.

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

Usaremos los conjuntos de datos de demostración “USArrests”. Los datos deben prepararse como se describe en el capítulo 2. Los datos deben contener solo variables continuas, ya que el algoritmo de k-medias utiliza medias variables. Como no queremos que el algoritmo k-means dependa de una unidad variable arbitraria, comenzamos escalando los datos usando la función R scale() de la siguiente manera:

data("USArrests") # Loading the data set
df <- scale(USArrests) # Scaling the data
# View the firt 3 rows of the data
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

Paquetes y funciones de R requeridos

La función R estándar para el agrupamiento de k-means es kmeans() [ paquete de estadísticas], cuyo formato simplificado es el siguiente:

kmeans(USA, centers, iter.max = 10, nstart = 1)

  • x: matriz numérica, marco de datos numérico 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 hermoso gráfico de los clústeres generados con la función kmeans() , usaremos el paquete factoextra .

Cálculo de agrupamiento de k-medias

Como el algoritmo de agrupamiento k-means comienza con k centroides seleccionados aleatoriamente, siempre se recomienda usar la función set.seed() para establecer una semilla para R aleatoria.

# Calcula k-medias con k = 4
set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)

Como el resultado final del agrupamiento de k-medias es sensible al inicio aleatorio asignaciones, especificamos nstart = 25. Esto significa que R probará 25 diferentes asignaciones aleatorias tareas de inicio y luego seleccione los mejores resultados correspondientes a la que tiene la más baja dentro de la variación del conglomerado. El valor predeterminado de nstart en R es uno Se recomienda enfáticamente calcular el agrupamiento de k-means con un gran valor de nstart como 25 o 50, para tener un resultado más estable.

# 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: Los medios de conglomerados o centros: una matriz, cuyas filas son número de conglomerado (1 a 4) y las columnas son variables.

El vector de agrupamiento: Un vector de enteros (de 1:k) que indica el agrupamiento a que se asigna cada punto.

El algoritmo k-medoids es un enfoque de agrupamiento relacionado con el agrupamiento de k-medias (capítulo 4) para dividir un conjunto de datos en k grupos o conglomerados. Enel agrupamiento de kmedoides, cada grupo está representado por uno de los puntos de datos en el grupo. Estos puntos se denominan medoides de racimo.

El término medoid se refiere a un objeto dentro de un grupo para el cual la diferencia promedio entre él y todos los demás miembros del grupo es mínima. Corresponde al punto más central del clúster. Estos objetos (uno por grupo) se pueden considerar como un ejemplo representativo de los miembros de ese grupo que pueden ser útiles en algunas situaciones. Recuerde que, en el agrupamiento de k-medias, el centro de un conglomerado dado se calcula como el valor medio de todos los puntos de datos en el conglomerado.

K-medoid es una alternativa robusta al agrupamiento k-means. Esto significa que el algoritmo es menos sensible al ruido y los valores atípicos, en comparación con k-means, porque usa medoids como centros de clúster en lugar de medios (usados en k-means).

El algoritmo k-medoids requiere que el usuario especifique k, el número de grupos que se generarán (como en k-means clustering). Un enfoque útil para determinar el número óptimo de clústeres es el método de la 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).

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. El algoritmo PAM proporciona un algoritmo más robusto .

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, se construyen grupos asignando cada observación al medoide más cercano.

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

El paso SWAP intenta mejorar la calidad del agrupamiento intercambiando 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 continúa hasta que la función objetivo ya no puede disminuir. El objetivo es encontrar k objetos representativos que minimicen la suma de las diferencias de las observaciones con su objeto representativo más cercano.

Seleccione k objetos para que se conviertan en medoids, o en caso de que se hayan proporcionado estos objetos utilícelos como medoids.

Calcular la matriz de disimilitud si no se proporcionó.

Asigne cada objeto a su medoide más cercano;

Para cada búsqueda de conglomerados, si alguno de los objetos del conglomerado disminuye el coeficiente de disimilitud promedio; si es así, seleccione la entidad que más disminuya este coeficiente como el medoide para este grupo;

Si al menos un medoid ha cambiado, vaya a (3), de lo contrario finalice el algoritmo.

Cálculo de PAM en R

Datos

Usaremos los conjuntos de datos de demostración “USArrests”, que comenzamos escalando (Capítulo 2) usando la función R scale() de la siguiente manera:

data("USArrests") # Load the data set
df <- scale(USArrests) # Scale the data
head(df, n = 3) # View the firt 3 rows of the data
##             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

Paquetes y funciones de R requeridos

La función pam() [ paquete de clúster] y pamk() [paquete fpc ] se pueden usar para calcular PAM.

La función pamk() no requiere que el usuario decida el número de grupos K.

En los siguientes ejemplos, describiremos solo la función pam(), cuyo formato simplificado es:

pam(x, k, metric = “euclidean”, stand = FALSE)

  • x: valores posibles incluye: – Matriz de datos numéricos o trama de datos numéricos: cada fila corresponde a un observación, y cada columna corresponde a una variable.

Matriz de disimilitud: en este caso, x suele ser la salida de daisy() o dist() •

  • k: el número de clústeres • metric: las métricas de distancia que se utilizarán. Las opciones disponibles son “euclidean” y “Manhattán”.

soporte: valor lógico; si es cierto, las variables (columnas) en x se estandarizan antes de calcular las diferencias. Ignorado cuando x es una matriz de disimilitud.

CLARA - Agrupamiento grande Aplicaciones

CLARA (Clustering Large Applications, Kaufman and Rousseeuw (1990)) es una extensión de los métodos k-medoids (Capítulo 5) para manejar datos que contienen una gran cantidad de objetos (más de varios miles de observaciones) con el fin de reducir el tiempo de cálculo y la memoria RAM. problema de almacenamiento Esto se logra utilizando el método de muestreo.

En lugar de encontrar medoides para todo el conjunto de datos, CLARA considera una pequeña muestra de los datos con un tamaño fijo (tamaño de muestra) 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 diferencia promedio entre cada objeto en el conjunto de datos completo y el medoide de su grupo, definido como la función de costo.

CLARA repite los procesos de muestreo y agrupación un número predeterminado de veces para minimizar el sesgo de muestreo. Los resultados finales del agrupamiento corresponden al conjunto de medoides con el costo mínimo. El algoritmo CLARA se resume en la siguiente sección.

Cálculo de CLARA en R

Formato y preparación de datos

Aquí, generaremos un conjunto de datos aleatorios. Para que el resultado sea reproducible, comenzamos usando la función set.seed().

set.seed(1234)
# Generate 500 objects, divided into 2 clusters.
df <- rbind(cbind(rnorm(200,0,8), rnorm(200,0,8)),
cbind(rnorm(300,50,8), rnorm(300,50,8)))
# Specify column and row names
colnames(df) <- c("x", "y")
rownames(df) <- paste0("S", 1:nrow(df))
# Previewing the data
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

Paquetes y funciones de R requeridos

La función clara() [paquete de clúster ] se puede usar para calcular CLARA. El formato simplificado es el siguiente:

clara(x, k, metric = “euclidean”, stand = FALSE, samples = 5, pamLike = FALSE)

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

  • k: el número de conglomerados.

  • metric: las métricas de distancia a utilizar. Las opciones disponibles son “euclides” y “manhattan”. Las distancias euclidianas son la raíz de la suma de los 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) soporte: valor lógico; si es cierto, 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)muestras: 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: indicación lógica si se debe usar el mismo algoritmo en la función pam() . Esto debería ser siempre cierto.

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.

Capitulo 4

library(ggplot2)
library(factoextra)
data("USArrests")
df <- scale(USArrests)
fviz_nbclust(df, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2)

set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)
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"
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
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
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
km.res$size
## [1]  8 13 16 13
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
fviz_cluster(
  km.res,
  data = df,
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "euclid",
  star.plot = TRUE,
  repel = TRUE,
  ggtheme = theme_minimal()
)

Capitulo 5

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

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
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
head(pam.res$clustering)
##    Alabama     Alaska    Arizona   Arkansas California   Colorado 
##          1          1          1          2          1          1

Capitulo 6

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

clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
print(clara.res)
## Call:     clara(x = df, k = 2, samples = 50, pamLike = TRUE) 
## Medoids:
##                Murder    Assault   UrbanPop       Rape
## New Mexico  0.8292944  1.3708088  0.3081225  1.1603196
## Nebraska   -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Objective function:   1.368969
## Clustering vector:    Named int [1:50] 1 1 1 2 1 1 2 2 1 1 2 2 1 2 2 2 2 1 ...
##  - attr(*, "names")= chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" "California" "Colorado" "Connecticut" ...
## Cluster sizes:            20 30 
## Best sample:
##  [1] Alabama        Arizona        California     Colorado       Connecticut   
##  [6] Delaware       Georgia        Idaho          Illinois       Iowa          
## [11] Kansas         Kentucky       Louisiana      Maine          Maryland      
## [16] Massachusetts  Michigan       Minnesota      Mississippi    Missouri      
## [21] Montana        Nebraska       Nevada         New Hampshire  New Mexico    
## [26] New York       North Carolina North Dakota   Ohio           Oklahoma      
## [31] Oregon         Pennsylvania   Rhode Island   South Carolina South Dakota  
## [36] Tennessee      Texas          Utah           Vermont        Virginia      
## [41] Washington     West Virginia  Wisconsin      Wyoming       
## 
## 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)
##              Murder   Assault   UrbanPop         Rape cluster
## Alabama  1.24256408 0.7828393 -0.5209066 -0.003416473       1
## Alaska   0.50786248 1.1068225 -1.2117642  2.484202941       1
## Arizona  0.07163341 1.4788032  0.9989801  1.042878388       1
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602       2
clara.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
head(clara.res$clustering, 10)
##     Alabama      Alaska     Arizona    Arkansas  California    Colorado 
##           1           1           1           2           1           1 
## Connecticut    Delaware     Florida     Georgia 
##           2           2           1           1
fviz_cluster(
  clara.res,
  palette = c("#00AFBB", "#FC4E07"),
  ellipse.type = "t",
  geom = "point",
  pointsize = 1,
  ggtheme = theme_classic()
)

Capitulo 7

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)

res.coph <- cophenetic(res.hc)
cor(res.dist, res.coph)
## [1] 0.6975266
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382
grp <- cutree(res.hc, k = 4)
head(grp, n = 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        2        2        3
table(grp)
## grp
##  1  2  3  4 
##  7 12 19 12
rownames(df)[grp == 1]
## [1] "Alabama"        "Georgia"        "Louisiana"      "Mississippi"   
## [5] "North Carolina" "South Carolina" "Tennessee"
fviz_dend(
  res.hc,
  k = 4,
  cex = 0.5,
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  rect = TRUE
)

fviz_cluster(
  list(data = df, cluster = grp),
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "convex",
  repel = TRUE,
  show.clust.cent = FALSE,
  ggtheme = theme_minimal()
)

res.agnes <-
  agnes(
    x = USArrests,
    stand = TRUE,
    metric = "euclidean",
    method = "ward"
  )
res.diana <-
  diana(x = USArrests, stand = TRUE, metric = "euclidean")
fviz_dend(res.agnes, cex = 0.6, k = 4)

Capitulo 8

library(dendextend)
res.dist <- dist(df, method = "euclidean")
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")
dend1 <- as.dendrogram (hc1)
dend2 <- as.dendrogram (hc2)
dend_list <- dendlist(dend1, dend2)
tanglegram(dend1, dend2)

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

cor.dendlist(dend_list, method = "cophenetic")
##          [,1]     [,2]
## [1,] 1.000000 0.843143
## [2,] 0.843143 1.000000
cor.dendlist(dend_list, method = "baker")
##           [,1]      [,2]
## [1,] 1.0000000 0.8400675
## [2,] 0.8400675 1.0000000
cor_cophenetic(dend1, dend2)
## [1] 0.843143
cor_bakers_gamma(dend1, dend2)
## [1] 0.8400675
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
dend_list <-
  dendlist(
    "Complete" = dend1,
    "Single" = dend2,
    "Average" = dend3,
    "Centroid" = dend4
  )
cors <- cor.dendlist(dend_list)
round(cors, 2)
##          Complete Single Average Centroid
## Complete     1.00   0.50    0.86     0.49
## Single       0.50   1.00    0.58     0.71
## Average      0.86   0.58    1.00     0.61
## Centroid     0.49   0.71    0.61     1.00
library(corrplot)
corrplot(cors, "pie", "lower")

Capitulo 9

library(factoextra)
data(USArrests)
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
fviz_dend(hc, cex = 0.5)

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

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

fviz_dend(
  hc,
  k = 4,
  cex = 0.5,
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  ggtheme = theme_gray()
)

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

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

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

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

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

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

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 = "Sub arbol 1")

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

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

data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)

dend <-
  USArrests[1:5, ] %>% scale %>% dist %>% hclust(method = "ward.D2") %>% as.dendrogram
plot(dend)

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)

(Kassambara 2017)

Bibliografia

De la Fuente Fernández, Santiago. 2011. “Análisis Conglomerados.” Facultad de Ciencias Económicas y Empresariales de La Universidad Autónoma Madrid.
Galili, Tal. 2015. “Dendextend: An r Package for Visualizing, Adjusting, and Comparing Trees of Hierarchical Clustering.” Bioinformatics. https://doi.org/10.1093/bioinformatics/btv428.
Galili, Tal, and Gregory Jefferis. 2022. Dendextend: Extending Dendrogram Functionality in r. https://CRAN.R-project.org/package=dendextend.
Kassambara, Alboukadel. 2017. Practical Guide to Cluster Analysis in r: Unsupervised Machine Learning. Vol. 1. Sthda.
Kassambara, Alboukadel, and Fabian Mundt. 2020. Factoextra: Extract and Visualize the Results of Multivariate Data Analyses. http://www.sthda.com/english/rpkgs/factoextra.
Maechler, Martin, Peter Rousseeuw, Anja Struyf, and Mia Hubert. 2022. Cluster: "Finding Groups in Data": Cluster Analysis Extended Rousseeuw Et Al. https://svn.r-project.org/R-packages/trunk/ cluster/.
R Core Team. 2022. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Wei, Taiyun, and Viliam Simko. 2021a. Corrplot: Visualization of a Correlation Matrix. https://github.com/taiyun/corrplot.
———. 2021b. R Package ’Corrplot’: Visualization of a Correlation Matrix. https://github.com/taiyun/corrplot.
Wickham, Hadley. 2016. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org.
Wickham, Hadley, Winston Chang, Lionel Henry, Thomas Lin Pedersen, Kohske Takahashi, Claus Wilke, Kara Woo, Hiroaki Yutani, and Dewey Dunnington. 2022. Ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics. https://CRAN.R-project.org/package=ggplot2.