Análisis de Clúster (Conglomerados)
UNIVERSIDAD DE EL SALVADOR
FACULTAD DE CIENCIAS ECONÓMICAS
ESCUELA DE ECONOMÍA
MÉTODOS PARA EL ÁNALISIS ECONÓMICO
TEMA DE INVESTIGACIÓN:
“Análisis de Clúster (Conglomerados)”
DOCENTE:
MSF. Carlos Ademir Pérez Alas.
Grupo de Teorico
Grupo 03
Integrantes | Carnet | Participación |
---|---|---|
Martinez Alfaro Kelly Jeannette | MP21084 | 100% |
Méndez Pacheco Darleen Ivette | MP21084 | 100% |
Zarpate Crissia Margareth Villalta | MB22006 | 100% |
CIUDAD UNIVERSITARIA, DOMINGO 24 DE NOVIEMBRE DE 2024
1. El análisis de conglomerados.
El análisis de conglomerados clasifica objetos o individuos en grupos (clústeres) basándose en su similitud, de forma que los miembros de un grupo sean parecidos entre sí y distintos a los de otros grupos. Es una técnica exploratoria y no supervisada, útil para identificar patrones ocultos, segmentar grandes conjuntos de datos y simplificar su análisis.
Para implementarlo, se seleccionan variables relevantes, se define una medida de similitud (como la distancia euclidiana) y se elige un algoritmo jerárquico o no jerárquico. La validación de los resultados implica comparar las características de los grupos, usar métodos complementarios y consultar con expertos.
Es una herramienta ampliamente utilzada en áreas como marketing, biología, medicina y economía; este ánalisis busca que los miembros de un mismo grupo sean lo s mas parecidos posibles entre sí pero muy diferentes de los miembros de otros grupos. Por ejemplo, si se tiene un grupo de personas y se quiere clasificar seún su edad, altura y peso; ese ánalisis permitiría identificar grupos con características similares en esas variables.
2. Cuadro comparativo.
Análisis de Clúster |
Técnicas disponibles |
Ventajas |
Desventajas |
Jerárquico Es un método exploratorio multivariante que busca clasificar un conjunto de objetos en diferentes grupos basándose en su similitud, es decir, analizar los datos para identificar patrones entre objetos.
|
Métodos aglomerativos Método de eslabonamiento simple. Método de eslabonamiento completo. Método de eslabonamiento promedio. Método de Ward.
Métodos jerárquicos divisivos Método de la distancia promedio de separación.
|
No requiere predefinir el número de clústeres. Representación gráfica intuitiva. Amplia elección del método de eslabonamiento a utilizar. |
Asignación irrevocable. Sensibilidad a los valores atípicos. Complejidad computacional. Difícil visibilidad de números mayores.
|
No jerárquico Es una técnica de análisis multivariante que busca clasificar un conjunto de objetos en un número predefinido de grupos, basándose en su similitud, por lo tanto, se requiere que se especifique la cantidad de grupos que se generan.
|
Método de las k-medias. Métodos basados en la traza. Método de los k-medoides. CLARA (Clustering Large Applications). |
Permite la reasignación. Facilita la visualización de estructura de datos. Eficiencia para grandes conjuntos de datos. |
Definir a priori el número de clústeres a formar. Sensibilidad a valores atípicos Dificultad para manejar datos mixtos. |
Fuente: Elaboración propia de : Kassambara, A. (2017).
3. Descripción de las técnicas disponibles para realizar el análisis de clúster.
3.1. Explicación jerárquicas como no jerárquicas
Análisis de Clúster jerárquico
Métodos aglomerativos
Método de eslabonamiento simple.
El método de eslabonamiento simple, también conocido como método del vecino más cercano, es una técnica de agrupamiento jerárquico aglomerativos utilizada para agrupar objetos en grupos basados en su similitud. Considera cada objeto como un grupo individual. A cada paso, los dos grupos más similares se fusionan en un nuevo grupo más grande. Se ira repitiendo hasta que todos los objetos se combinan en un solo grupo grande.
Describe la distancia entre dos grupos como el valor mínimo de todas las distancias por pares entre los elementos del grupo 1 y los elementos del grupo 2. Este método tiende a producir grupos largos y “sueltos”.
Siendo sensible a la presencia de valores atípicos, dado que la distancia entre grupos se basa en la distancia mínima entre cualquier par de puntos en los dos grupos. Un único valor atípico puede distorsionar el proceso de agrupamiento, creando grupos alargados e inusuales.
Método de eslabonamiento completo.
El método de eslabonamiento completo, relacionado como método del vecino más lejano, técnica de agrupamiento jerárquico aglomerativos, parecido al método de eslabonamiento simple; aplicado para agrupar objetos en grupos basados en su similitud. De la misma manera que otros métodos jerárquicos aglomerativos; el proceso comienza considerando cada objeto como un grupo individual y, en cada paso, los dos grupos similares se asocian, en un nuevo grupo más grande. La diferencia clave entre el método de eslabonamiento simple y el método de eslabonamiento completo radica en cómo se define la distancia entre dos grupos como el valor máximo de todas las distancias por pares entre los elementos del grupo 1 y los elementos del grupo 2. Al contrario, con el método de eslabonamiento simple, que tiende a producir grupos largos y “sueltos”, produciendo grupos más compactos.
Posee menos sensibilidad a la presencia de valores atípicos en comparación con el método de eslabonamiento simple. Representando que la distancia entre grupos se basa en la distancia máxima, indicando un solo valor atípico no tendrá un impacto tan grande en el proceso de agrupamiento.
Método de eslabonamiento promedio.
El método de eslabonamiento promedio, distinguido como método de enlace promedio, es una técnica de agrupamiento jerárquico aglomerativos utilizada para agrupar objetos en grupos basados en su similitud. Así como los métodos de eslabonamiento simple y completo, el método de eslabonamiento promedio comienza considerando cada objeto como un grupo individual. A cada paso del algoritmo, los dos grupos más similares se combinan para formar un nuevo grupo más grande; repitiendo todos los objetos para la agrupación de un único grupo grande.
Su característica radica en la conceptualización de la distancia entre dos grupos estructurándose en la distancia promedio entre todos los pares de elementos, en que un elemento de cada par deriva del grupo 1 y 2.
Considerándose la distancia promedio, brinda un enfoque más equilibrado en comparación con los métodos anteriores. Al basarse en la distancia mínima, puede ser sensible a valores atípicos y generar grupos alargados; si llegase a basarse en la distancia máxima, sus resultados serán demasiado compactos y pasara por alto algunos subgrupos dentro de los datos, pero si se utiliza la distancia promedio, buscara un equilibrio entre los dos extremos, intentando formar grupos que sean coherentes y representativos de la estructura subyacente de los datos.
Método de Ward.
La característica distintiva del método de Ward está en su enfoque de minimizar la varianza total dentro de los grupos. Dado que, se calcula la varianza total dentro de los grupos. La fusión que produce menor varianza total dentro de los grupos se selecciona como la mejor fusión y se repite hasta que todos los objetos se combinan en un solo grupo.
Es más robusto y produce grupos más compactos que otros métodos de enlace, como el enlace simple o el enlace completo, es sensible a la escala de medición de las variables, por lo que es indispensable estandarizar las variables antes de aplicar el método. Siendo una de las técnicas populares y eficaces para la agrupación de datos; minimizando la varianza total dentro de los grupos desarrollando relativamente homogéneos y bien separados; atractiva para una variedad de aplicaciones, añadiendo la segmentación de clientes, el análisis de mercado y la bioinformática.
Métodos jerárquicos divisivos
Método de la distancia promedio de separación.
Análisis de Clúster no jerárquico
Método de las k-medias.
Técnica de agrupamiento no jerárquica (de particionamiento) que se utiliza para dividir un conjunto de datos en un número predeterminado de grupos (k). Su objetivo principal del método es maximizar la homogeneidad dentro de los grupos y la heterogeneidad entre los grupos. De tal manera que busca objetos dentro de un mismo grupo que sean lo más similares posible entre sí, mientras que los objetos de diferentes grupos sean lo más diferentes posible.
A diferencia de los métodos jerárquicos, donde el número de grupos no se conoce a priori, en cambio este método se establece antes el número de grupos (k) que se desea formar.
Métodos basados en la traza.
En la definición de agrupamiento en clústeres suelen referirse a técnicas que se optimiza una función objetivo relacionada con la traza de una matriz (suma de los elementos de su diagonal principal)
Método de los k-medoides.
Técnica de agrupamiento no jerárquico que busca dividir un conjunto de datos en k grupos o clústeres. A diferencia del método de las k-medias, donde cada clúster está representado por el centroide (la media de los puntos del clúster), en el método de los k-medoides cada clúster está representado por uno de los puntos de datos del clúster, denominado medoide.
El medoide de un grupo se define como el objeto del grupo cuya disimilitud promedio con todos los demás miembros del grupo es mínima. Es decir, es el punto del grupo que se encuentra más “centralmente” ubicado con respecto a los demás puntos del grupo, también considerados como ejemplos representativos de los miembros de su grupo.
El método de los k-medoides, particularmente el algoritmo PAM, da alternativa robusta al método de las k-medias para su agrupación de datos y su capacidad para manejar valores atípicos y desarrollar puntos de datos reales como representantes de los grupos lo convierte en una técnica valiosa para el análisis de datos en diversas actividades.
CLARA (Clustering Large Applications)
El método CLARA (Clustering Large Applications) es una extensión del método de los k-medoides (específicamente el algoritmo PAM) diseñada para manejar conjuntos de datos grandes de manera más eficiente. Refiriéndose en las fuentes como una técnica de agrupamiento por partición que aborda las limitaciones de PAM en términos de tiempo de cálculo y almacenamiento de memoria al trabajar con grandes volúmenes de datos.
El algoritmo PAM, aunque robusto frente a valores atípicos, puede volverse computacionalmente costoso cuando se aplica a conjuntos de datos con miles o incluso millones de observaciones. Se debe a que PAM calcula la matriz de disimilitud completa entre todos los pares de objetos, lo que significa, una cantidad significativa de memoria y tiempo de procesamiento a medida que el tamaño del conjunto de datos aumenta.
CLARA busca mitigar estos problemas mediante el uso de un enfoque de muestreo. En lugar de considerar todos los puntos de datos para la selección de medoides, CLARA trabaja con una muestra representativa del conjunto de datos completo, lo que reduce la complejidad computacional del algoritmo.
3.2. Librería (Técnica Jerárquica)
stats: Esa librería base de R es indispensable para el análisis de cluster jerárquico. Contiene funciones cruciales como:
• hclust(): Función que realiza el análisis de cluster jerárquico. Puedes especificar el método de enlace (enlace simple, completo, promedio, Ward, etc.) utilizando el argumento method dentro de hclust().
• dist(): Calcula la matriz de distancias entre las observaciones, que es un insumo fundamental para hclust(). Puedes elegir la métrica de distancia (euclidiana, Manhattan, etc.) utilizando el argumento method dentro de dist()
3.2.1. Sintaxis
stats: Librería base de R es indispensable para el análisis de cluster jerárquico. Contiene funciones cruciales como:
• hclust(): Función realiza el análisis de cluster jerárquico. Puedes especificar el método de enlace (enlace simple, completo, promedio, Ward, etc.) utilizando el argumento method dentro de hclust().
• dist(): Calcula la matriz de distancias entre las observaciones, que es un insumo fundamental para hclust(). Puedes elegir la métrica de distancia (euclidiana, Manhattan, etc.) utilizando el argumento method dentro de dist()
3.3. Librería (Técnica no Jerárquica)
Librería stats:
kmeans(): Función que está incluida en la librería base stats, implementa el algoritmo k-means, uno de los métodos de clustering no jerárquico más populares. K-means busca minimizar la variación total intra-cluster (WSS) asignando iterativamente las observaciones a los clusters con los centroides más cercanos.1
dist(): Si bien se usa principalmente para clustering jerárquico, también se puede utilizar en conjunto con k-means para calcular la matriz de distancias necesaria para determinar la proximidad de las observaciones a los centroides.2
Librería cluster:
pam(): Implementa el algoritmo PAM (Partitioning Around Medoids). PAM es similar a k-means, pero utiliza medoides (observaciones representativas dentro del cluster) en lugar de centroides.3 Es más robusto a outliers que k-means.4
clara(): Diseñado para manejar grandes conjuntos de datos, CLARA (Clustering Large Applications) es una extensión de PAM que utiliza un enfoque de muestreo para reducir el tiempo de cálculo y los requisitos de memoria.56
fanny(): Implementa el algoritmo de clustering difuso, que asigna a cada punto un grado de pertenencia a cada cluster en lugar de una asignación “dura” a un solo cluster.78 Librería factoextra:
Aunque principalmente se utiliza para visualización, factoextra también ofrece la función hcut(), que realiza clustering jerárquico y corta el árbol en k clusters predefinidos.9
fviz_nbclust(): Esta función es muy útil para determinar el número óptimo de clusters (k) para métodos de partición como k-means, PAM, CLARA y HCUT. Proporciona métodos como el método del codo, la silueta promedio y el estadístico de gap.9
Librería NbClust:
En esta librería no se menciona específicamente en las fuentes en el contexto del clustering no jerárquico, pero se puede usar para determinar el número óptimo de clusters (k) utilizando hasta 30 índices diferentes. Ofrece una evaluación más exhaustiva que fviz_nbclust().
3.3.1. Sintaxis
kmeans(): forma parte de la librería stats de R, implementa el algoritmo K-means, un método de clustering no jerárquico muy utilizado; busca agrupar los datos de manera que los puntos dentro de cada cluster sean lo más similares posible entre sí (alta compacidad) y lo más diferentes posible a los puntos de otros clusters (alta separación).
kmeans(x, centers, iter.max = 10, nstart = 1)
x: matriz numérica, marco de datos numéricos o vector numérico
centers: los valores posibles son el número de conglomerados (k) o un conjunto de centros de conglomerados iniciales (distintos). Si se trata de 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 centers es un número.
La agrupación en clústeres k-means requiere que los usuarios especifiquen la cantidad de clústeres que se generarán. A menudo se recomienda probar nstart > 1.
pam(): La función pam() implementa el algoritmo PAM (Partitioning Around Medoids), una técnica de clustering similar a k-means pero más robusta a valores atípicos (outliers). A diferencia de k-means, que utiliza centroides (medias de los puntos en un cluster), PAM utiliza medoides
pam(x, k, metric = “euclidean”, stand = FALSE)
x: los valores posibles incluyen:
– Matriz de datos numéricos o marco de datos numéricos: cada fila corresponde a una observación, y cada columna corresponde a una variable.
– Matriz de disimilitud: en este caso x 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 “euclidiana” y “manhattan”.
stand: valor lógico; si es verdadero, las variables (columnas) en x se estandarizan antes de calcular las disimilitudes. Se ignora cuando x es una matriz de disimilitudes.
clara(): La función clara() implementa el algoritmo CLARA (Clustering Large Applications), una extensión del algoritmo PAM diseñada para manejar grandes conjuntos de datos; busca encontrar k medoides que representen de manera óptima los grupos en los datos, también utiliza un enfoque de muestreo para reducir el tiempo de cálculo y los requisitos de memoria.
clara(x, k, metric = “euclidean”, stand = FALSE, samples = 5, pamLike = FALSE)
x: Este parámetro representa la matriz de datos numéricos o el data frame que se utilizará para el clustering.
k: Este parámetro indica el número de clusters que se desean generar.
metric = “euclidean”: Este parámetro define la métrica de distancia que se utilizará para calcular las disimilitudes entre las observaciones. La opción por defecto es “euclidean”, que calcula la distancia euclidiana (raíz cuadrada de la suma de las diferencias cuadradas).
stand = FALSE”: Este parámetro indica si las variables (columnas) en x deben estandarizarse antes de calcular las disimilitudes.
samples = 5”: Este parámetro define el número de muestras que se extraerán del conjunto de datos. El valor por defecto es 5, pero se recomienda un valor mucho mayor para minimizar el sesgo del muestreo y obtener resultados más estables.
pamLike = FALSE”: Este parámetro indica si se debe utilizar el mismo algoritmo que en la función pam().
4. Del texto: Kassambara, A. (2017), desarrolle los ejemplos presentados en los capítulos: 4,5,6,7,8,9.
Capítulo 4: K-Means Clustering
Cálculo de la agrupación en clústeres de k-medias en R
## 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
Estimación del número óptimo de clústeres
library(factoextra)
fviz_nbclust (df, kmeans, method = "wss") +
geom_vline(xintercept = 4,
linetype = 2)
Cálculo de la agrupación en clústeres de k-medias
## 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"
## 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
## 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
Acceso a los resultados de la función kmeans()
## 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
## Alabama Alaska Arizona Arkansas
## 1 4 4 1
## [1] 8 13 16 13
## 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
Visualización de clústeres de k-medias
fviz_cluster(km.res,
data = df,
palette = c("#8B008B", "#FF5733", "#000080", "#000000"),
ellipse.type = "euclid",
# Concentración de elipse
star.plot = TRUE, # Agregar segmentos desde los centroides a los elementos
repel = TRUE, , # Evitar la sobreimpresión de etiquetas (lento)
ggtheme = theme_minimal()
)
Capítulo 5: K-Medoids
Cálculo de PAM
## 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
Estimación del número óptimo de clústeres
Cálculo de la agrupación en clústeres de PAM
## 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"
## 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
Acceso a los resultados de la función pam()
## Murder Assault UrbanPop Rape
## New Mexico 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 2 1 1
Visualización de clústeres PAM
fviz_cluster(pam.res,
palette = c("#581845", "#212F3D"),
ellipse.type = "t",
repel = TRUE,
ggtheme = theme_classic()
)
Capítulo 6: CLARA - Clustering Large Applications
Cálculo de CLARA
# Formato y preparación de los datos
# Generar 500 objetos, divididos en 2 clústeres.
df <- rbind(cbind(rnorm(200,0,8),
rnorm(200,0,8)),
cbind(rnorm(300,50,8),
rnorm(300,50,8)))
# Especificar nombres de columnas y filas
colnames(df) <- c("x", "y")
rownames(df) <- paste0("S", 1:nrow(df))
# Vista previa de los datos
head(df, nrow = 6)
## x y
## S1 -4.4838052 17.590483
## S2 -1.8414199 10.499304
## S3 12.4696665 -2.121160
## S4 0.5640671 4.345552
## S5 1.0343019 -3.314720
## S6 13.7205199 -3.809975
Estimación del número óptimo de clústeres
library(cluster)
library(factoextra)
fviz_nbclust(df, clara, method = "silhouette") +
theme_classic()
Cálculo de CLARA
# Calcular CLARA
clara.res <- clara(df, 2,
samples = 50,
pamLike = TRUE)
# Imprimir componentes de clara.res
print(clara.res)
## Call: clara(x = df, k = 2, samples = 50, pamLike = TRUE)
## Medoids:
## x y
## S117 0.8454096 -0.8453707
## S464 49.7728396 50.3738682
## Objective function: 9.922068
## 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] S5 S13 S21 S23 S32 S62 S66 S67 S102 S110 S114 S117 S119 S125 S174
## [16] S195 S198 S226 S235 S236 S260 S264 S266 S282 S290 S293 S297 S307 S318 S319
## [31] S335 S339 S341 S358 S360 S388 S390 S393 S401 S415 S433 S464 S474 S490
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
## x y cluster
## S1 -4.4838052 17.590483 1
## S2 -1.8414199 10.499304 1
## S3 12.4696665 -2.121160 1
## S4 0.5640671 4.345552 1
## x y
## S117 0.8454096 -0.8453707
## S464 49.7728396 50.3738682
## S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
## 1 1 1 1 1 1 1 1 1 1
Visualización de clústeres CLARA
fviz_cluster(clara.res,
palette = c("#00FF00", "#8B4513"), # color palette
ellipse.type = "t", # Concentration ellipse
geom = "point", pointsize = 1,
ggtheme = theme_classic()
)
Capítulo 7: Agglomerative Clustering
Pasos para la agrupación jerárquica aglomerativa
## 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
## 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
Vinculación
Dendrograma
Verificar el árbol de clústeres
# Calcular la distancia cofenética
res.coph <- cophenetic(res.hc)
# Correlación entre la distancia cofenética y # la distancia original
cor(res.dist, res.coph)
## [1] 0.6975266
## [1] 0.7180382
Cortar el dendrograma en diferentes grupos
## Alabama Alaska Arizona Arkansas
## 1 2 2 3
## grp
## 1 2 3 4
## 7 12 19 12
## [1] "Alabama" "Georgia" "Louisiana" "Mississippi"
## [5] "North Carolina" "South Carolina" "Tennessee"
Cortar el dendrograma en diferentes grupos
# Cortar en 4 grupos y colorear por grupos
fviz_dend(res.hc, k = 4, # Cut in four groups
cex = 0.5, # tamaño de etiqueta
k_colors = c("#2f4f4f", "#daa520", "#1e90ff", "#7fffd4"),
color_labels_by_k = TRUE, # color labels by groups
rect = TRUE # Add rectangle around groups
)
fviz_cluster(list(data = df, cluster = grp),
palette = c("#ff00ff", "#9acd32", "#8B008B", "#800000"),
ellipse.type = "convex",
repel = TRUE,
show.clust.cent = FALSE, ggtheme = theme_minimal())
Paquete cluster R
library("cluster")
res.agnes <- agnes(x = USArrests,
stand = TRUE,
metric = "euclidean",
method = "ward"
)
res.diana <- diana(x = USArrests,
stand = TRUE,
metric = "euclidean"
)
Capítulo 8: Comparing Dendrograms
Comparación de dendrogramas
# 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)
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)
Comparación visual de dos dendrogramas
tanglegram(dend1, dend2,
highlight_distinct_edges = FALSE, # Desactivar líneas discontinuas
common_subtrees_color_lines = FALSE, # Desactivar colores de línea
common_subtrees_color_branches = TRUE, # Colorear ramas comunes
main = paste("entanglement =", round(entanglement(dend_list), 2))
)
Matriz de correlación entre una lista de dendrogramas
## [,1] [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
## [,1] [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000
## [1] 0.9925544
## [1] 0.9895528
# Crear múltiples dendrogramas mediante encadenamiento
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 la 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
# Visualice la matriz de correlación usando el paquete corrplot
library(corrplot)
corrplot(cors, "pie", "lower")
Capítulo 9: Visualizing Dendrograms
data(USArrests)
# Calcular distancias y agrupamiento jerárquico
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
Visualización de dendrogramas
fviz_dend(hc, cex = 0.5,
main = "Dendrogram - ward.D2",
xlab = "Objects",
ylab = "Distance",
sub = "")
Dendograma horizontal
Tema de la trama.
fviz_dend(hc, k = 4,
cex = 0.5, # label size
k_colors = c("#8B0000", "#006400", "#8B008B", "#00008B"),
color_labels_by_k = TRUE,
ggtheme = theme_gray()
)
Colores del grupo usando “jco”.
Dendrograma horizontal
# Forma Horizontal
fviz_dend(hc, k = 4, cex = 0.4, horiz = TRUE, k_colors = "jco",
rect = TRUE, rect_border = "jco", rect_fill = TRUE)
Dendrograma circular
Árbol de tipo filogénico.
require("igraph")
fviz_dend(hc, k = 4,
k_colors = "jco",
type = "phylogenic", repel = TRUE,
phylo_layout = "layout.gem")
Ampliar el dendrograma
Si desea ampliar los primeros grupos, es posible utilizar las opciones xlim e ylim para limitar el área del gráfico.
Trazado de un subárbol de dendrogramas
# Crea un gráfico de todo el dendrograma,
# Extrae los datos del dendrograma
dend_plot <- fviz_dend(hc,k = 4, # Corta en cuatro grupos
cex = 0.5, # tamaño de la etiqueta
k_colors = "jco" )
dend_data <- attr(dend_plot, "dendrogram") # Extraer datos del 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)
Caso de dendrograma con grandes conjuntos de datos
Árboles circulares
Guardar el dendrograma en una página PDF grande
pdf("dendrogram.pdf", width = 30, height = 15) # Abrir un PDF
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "jco") # Realizar el gráfico
print(p)
dev.off() # Cerrar el PDF
## png
## 2
Manipulación de dendrogramas utilizando dendextend
#Código R estándar para crear un dendrograma
data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)
Código R para crear un dendrograma utilizando el operador de encadenamiento
library(dendextend)
dend <- USArrests[1:5,] %>% # datos
scale %>% # Escalar los datos
dist %>% # calcular una matriz de distancia,
hclust(method = "ward.D2") %>% # Agrupación jerárquica
as.dendrogram # Convertir el objeto en un dendograma.
plot(dend)
Funciones para personalizar dendrogramas
library(dendextend)
# 1.Crea un dendrograma personalizado
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(hc) %>%
set("branches_lwd", 1) %>% # Ancho de línea de ramas
set("branches_k_color", mycols, k = 4) %>% # Ramas de colores por grupos.
set("labels_colors", mycols, k = 4) %>% # Etiquetas de colores por grupos
set("labels_cex", 0.5) # Cambiar tamaño de etiqueta
# 2. Crear trama
fviz_dend(dend)
Bibliografía
(Multivariate analysis 1) Alboukadel Kassambara Practical Guide to Cluster Analysis in R Unsupervised Machine Learning STHDA (2017). (s. f.). calameo.com. https://www.calameo.com/books/0067659570d94f4fe4e14