Portada
UNIVERSIDAD DE EL SALVADOR FACULTAD DE CIENCIAS ECONÓMICAS ESCUELA DE ECONOMÍA MÉTODOS PARA EL ANÁLISIS ECONÓMICO CICLO II-2024 GT02
TEMA A INVESTIGAR: “ANÁLISIS DE CLÚSTER (CONGLOMERADOS)”
INTEGRANTES:
Nombre | Cárne |
---|---|
Edwin Fabricio Aguirre Sarmieno | AS19011 |
Gabriel Arturo Sánchez Henríquez | SH22002 |
Diego Edgardo Siliezar Madrid | SM21024 |
DOCENTE: Carlos Ademir Pérez Alas
Ciudad Universitaria, San Salvador, 24 de noviembre del 2024.
1. Explique en qué consiste el análisis de conglomerados.
El análisis de conglomerados, también conocido como clustering o agrupamiento, es una técnica de análisis estadístico utilizada para agrupar objetos, casos o un conjunto de datos en subgrupos o conglomerados, de tal forma que los elementos dentro de un mismo grupo sean lo más similares posibles entre sí( homogéneos internamente) y diferentes de los elementos en otros grupos (externamente heterogéneos). Es una técnica de aprendizaje no supervisado, lo que significa que no requiere de categorías predefinidas para clasificar los datos.
En el análisis de cluster se examinan las relaciones interdependientes entre el conjunto completo de variables, es decir, los datos/objetos de un grupo son relativamente parecidos en términos de ciertas variables pero diferentes de los datos/objetos de otros grupos. En ese sentido, el análisis de conglomerados es la contracara del análisis factorial ya que reduce el número de objetos y no de variables al agruparlos.
Entonces el metodo de analisis de cluster esta diseñado para poder crear grupos homogeneos de casos o entidades. Se puede resumir bajo cuatro objetivos principales el uso de este metodo:
- Desarrollar una tipologıa o clasificacion.
- Investigar esquemas conceptuales utiles para agrupar entidades.
- Generar hipotesis a traves de la exploracion de los datos.
- Contrastar hipotesis o intentar determinar si tipos definidos por otros procedimientos estan de hecho presentes en un conjunto de datos.
Hay que destacar que la aplicacion mas usada de este metodo es la creacion de clasificaciones pero la mayor parte de los casos de apliacion se combina para poder formar una base de estudio.
Se puede remarcar algunas precauciones respecto al uso de este metodo de cluster:
En la mayoría de los casos, los métodos de Análisis Cluster son procedimientos que no están respaldados por un conjunto de doctrinas estadísticas teóricas. En resumen, la mayoría de los métodos son de naturaleza heurística. Esto difiere de otros métodos como el Análisis Factorial, que se fundamenta en una amplia teoria estadística.
Varios procesos de agrupación pueden producir soluciones distintas en el mismo conjunto de datos. Una razón para esto se basa en el hecho previamente mencionado de que los métodos clusters se han originado a partir de diversas fuentes que han originado normas distintas para la formación de grupos. Así, lógicamente, es imprescindible la presencia de métodos que puedan emplearse para determinar qué método genera los grupos naturalmente más uniformes en los datos.
La mayoría de los métodos clusters han surgido bajo el amparo de determinadas disciplinas científicas, por lo que, de manera ineludible, están impregnados de un sesgo que proviene de dichas disciplinas. Este aspecto es crucial ya que cada disciplina posee sus propias inclinaciones, como los tipos de datos que se utilizan en la elaboración de la clasificación.
Objetivo del análisis de conglomerados:
El propósito del análisis de conglomerados es identificar similitudes, patrones o estructuras subyacentes en los datos, permitiendo segmentar las observaciones en función de su similitud. Esto se consigue utilizando medidas de distancia o disimilitud entre las distintas observaciones ayudando a los investigadores y estadísticos a tener una comprensión más profunda de los datos y tomar decisiones mucho más acertadas en base a estos.
En este tipo de analisis poca o ninguna informacion se conoce previamente para la estructura de las categorias, lo cual diferencia este metodo con los metodos multivariantes de asignacion y discriminacion. Entonces de lo que se dispone es una coleccion de observaciones, y como principal objetivo del metodo es el descubrir la estructua de las categorias que podrian encajar con las observaciones, por lo que concretamente se dispone a ordenar las observaciones los cuales las asociaciones resuelte lo mas natural posible entre los miembros del grupo y entre miembros de grupos diferentes.
2. Resumen sobre el analisis de cluster
Análisis de Clúster |
Técnicas disponibles |
Ventajas |
Desventajas |
Jerárquico |
- Métodos
aglomerativos: Inician considerando cada objeto como un
clúster independiente y luego agrupan los más similares hasta formar un
único conglomerado. Ejemplos: |
- No requiere definir el número de clústeres
previamente, lo que es útil cuando no se tiene conocimiento sobre la
estructura de los datos. |
- Una vez que un objeto se asigna a un clúster, no
puede ser reasignado, lo que puede ser problemático si hay errores o
nuevas observaciones. |
No jerárquico |
- Método de K-medias: Asigna
objetos a los clústeres más cercanos en función de un centroide. Es
ampliamente utilizado por su simplicidad y eficiencia. |
- Adecuado para bases de datos grandes y de alta
dimensionalidad, ya que no necesita construir una matriz de
distancias. |
- Requiere especificar a priori el número de clústeres,
lo cual puede ser difícil si no se tiene un conocimiento previo de los
datos. |
3. Técnicas disponibles para realizar el análisis de clúster, tanto jerárquicas como no jerárquicas y explicación de la librería y sintaxis para implementarla en R.
1. Análisis de Clúster Jerárquico
El análisis jerárquico tiene como objetivo agrupar las observaciones en una estructura de árbol (dendrograma), que muestra cómo se agrupan los datos jerárquicamente. En la agrupación, se forma un nuevo grupo o se separa un grupo ya existente para producir dos grupos adicionales, de una manera que permita minimizar alguna función de distancia o maximizar alguna medida de similitud. Los métodos de jerárquicos se dividen a su vez en los métodos aglomerativos y divisivos. La agregación se centra en analizar la cantidad de individuos versus la cantidad de grupos en el estudio. A partir de ahí se van formando grupos en orden ascendente hasta que, al final del proceso, todos los casos quedan incluidos en un mismo grupo.
El método de disociativos o divisivos realiza el proceso inverso al método anterior. Comienzan con un conglomerado que incluye a todos los individuos. A partir de este grupo inicial se van formando grupos cada vez más pequeños mediante sucesivas divisiones. Al final del proceso, quedan tantos grupos como individuos en la muestra de estudio.
- Técnicas:
- Método Aglomerativo:
Los aglomerativos inician estudios con la cantidad de grupos que existen en el estudio. Desde ese punto, se generan grupos de manera ascendente, hasta que, al concluir el proceso, todos los casos se encuentran dentro de un solo conglomerado.
- Método Divisivo:
El metodo divisivos lleva a cabo el proceso contrario al aglomerativo Comienzan con un conjunto que abarca a todas las personas. Desde este grupo inicial, se van creando, mediante divisiones sucesivas, grupos cada vez más reducidos. Al concluir el procedimiento, existen tantos grupos como personas en la muestra analizada.
- Librería a usar en R:
stats: La librería stats es una de las librerías base incluidas en el lenguaje R y está diseñada para realizar análisis estadístico. Esta libreria contiene una amplia gama de funciones que sirven para el modelado, análisis, y pruebas estadísticas
factoextra: La librería factoextra es una herramienta popular que ayuda a visualizar y analizar resultados de métodos multivariantes, como análisis de componentes principales (PCA), análisis de correspondencia (CA), análisis de agrupamiento, y más.
Esta librería no ejecuta cálculos complejos por ella misma, sino que su especializacion es ayudar a visualizar y enriquecer resultados provenientes de otras funciones o paquetes como FactoMineR o cluster.
- Funciones:
o hclust() [De stats] Usado para calcular los cluster de forma jerárquica.
Dentro de la función hclust() se especifica que método se desea ejecutar:
- Método del amalgamamiento simple: “single”
- Método del amalgamamiento completo: “complete”
- Método del promedio entre grupos: “average”
- Método del centroide: “centroid”
- Método de la mediana: “median”
- Método de Ward: “ward.D”, “ward.D2”
o fviz_dend() [De factoextra] Usado para visualizar el dendrograma.
- Sintaxis a usar en R:
Ejemplo:
# Cargar datos de ejemplo
data("USArrests")
df <- scale(USArrests) # Normalizar datos
# Análisis jerárquico aglomerativo
dist_matrix <- dist(df, method = "euclidean") # Calcular matriz de distancia
hclust_res <- hclust(dist_matrix, method = "ward.D2") # Clustering aglomerativo
# Visualización del dendrograma
library(factoextra)
fviz_dend(hclust_res, k = 4, rect = TRUE) # Cortar en 4 conglomerados
2. Análisis de Clúster No Jerárquico
Los métodos no jerárquicos, también conocidos como parciales u optimización, el objetivo es unir individuos en K grupos. Esto significa que el investigador debe especificar a priori los grupos que debe formar, siendo la principal diferencia con los métodos jerárquicos. La asignación de individuos a grupos se logra mediante algún proceso de optimización de los criterios de selección. Otra diferencia entre estos métodos y los métodos jerárquicos es que utilizan matrices de datos sin procesar y no requieren su conversión a matrices de distancia o similitud.
- Técnicas:
K-Means: En este caso divide los datos en k conglomerados basándose en una minimización de la variación dentro de los conglomerados o clúster.
K-Medoids (PAM): Similar a K-Means, pero utiliza medoids (observaciones reales) en lugar de usar promedios como centroides, lo que lo vuelve más robusto frente a valores atípicos.
CLARA (Clustering Large Applications): Es una extensión de PAM que está diseñada para ejecutar un conjunto de datos grandes mediante muestras aleatorias que resulten ser representativas.
- Librería a usar en R:
cluster: La librería cluster es una herramienta especializada en análisis de agrupamiento (clustering). Esta contiene funciones para realizar diversos métodos de agrupamiento, tanto jerárquicos como no jerárquicos, y para analizar y evaluar la calidad de los clústeres formados. Es una de las librerías más utilizadas para este propósito debido a su flexibilidad y amplia compatibilidad con otros paquetes y métodos.
stats: La librería stats es una de las librerías base incluidas en el lenguaje R y está diseñada para realizar análisis estadístico. Esta libreria contiene una amplia gama de funciones que sirven para el modelado, análisis, y pruebas estadísticas
factoextra: La librería factoextra es una herramienta popular que ayuda a visualizar y analizar resultados de métodos multivariantes, como análisis de componentes principales (PCA), análisis de correspondencia (CA), análisis de agrupamiento, y más.
- Funciones:
o kmeans() para K-Means. o pam() para K-Medoids. o clara() para DBSCAN.
- Sintaxis a usar en R:
K-Means:
# K-Means clustering
set.seed(123)
km_res <- kmeans(df, centers = 4, nstart = 25)
# Visualización
fviz_cluster(km_res, data = df)
K-Medoids (PAM):
library(cluster)
pam_res <- pam(df, k = 4) # K-Medoids clustering
# Visualización
fviz_cluster(pam_res, data = df)
CLARA:
Comparación de Librerías y Métodos:
Técnica | Librerías | Ideal para | Visualización |
---|---|---|---|
Jerárquico | stats, factoextra | Conjuntos pequeños o medianos | fviz_dend() |
K-Means | stats, factoextra | Conjuntos grandes y datos continuos | fviz_cluster() |
K-Medoids | cluster, factoextra | Datos con valores atípicos | fviz_cluster() |
CLARA cluster | cluster, factoextra | Conjuntos grandes y representativos | fviz_cluster() |
4. Ejemplos desarrollados en el texto texto: Kassambara, A. (2017). Practical Guide to Cluster Analysis in R: Unsupervised Machine Learning (Multivariate Analysis) (1st ed.)
Capitulo 4: K-Means Clustering
4.1. Carga de datos
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
4.2. Estimación del número óptimo de clústeres
library(factoextra)
fviz_nbclust(df, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2)
4.3. Calculo de K-MEANS clúster
## 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
4.4 Accediendo 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
4.5 Visualización de clústeres de k-medias
fviz_cluster(km.res, data = df,
palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
ellipse.type = "euclid", # Concentration ellipse
star.plot = TRUE, # Add segments from centroids to items
repel = TRUE, # Avoid label overplotting (slow)
ggtheme = theme_minimal()
)
Capitulo 5: K-Medoids
5.1. datos
## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
5.2. Estimación del número óptimo de clústeres
5.3. Cálculo de la agrupación en clústeres 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"
5.4. clasificaciones de puntos a los datos originales,
## Murder Assault UrbanPop Rape cluster
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 1
## Arizona 8.1 294 80 31.0 1
5.5. Accediendo 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
Capitulo 6: Clustering Large Applications
CLARA considera una pequeña muestra de los datos con tamaño fijo (tamaño de muestra) y aplica el algoritmo PAM para generar un conjunto óptimo de objetos para la muestra, la calidad de los mismos se mide por la disimilitud promedio entre cada objeto en todo el conjunto de datos y el objeto de su grupo. CLARA repite los procesos de muestreo y agrupamiento un número de veces predeterminado para minimizar el sesgo de muestreo.
6.1. Preparacion de los datos
Se utiliza la función set.seed y se genera un conjunto de datos aleatorios
set.seed(1234)
#500 objetos, divididos en 2 grupos
df6 <- rbind(cbind(rnorm(200,0,8), rnorm(200,0,8)),
cbind(rnorm(300,50,8), rnorm(300,50,8)))
# Se especifica nombres de columnas y filas
colnames(df6) <- c("x", "y")
rownames(df6) <- paste0("S", 1:nrow(df6))
# Vista previa de los datos
head(df6, nrow = 6)
## x y
## S1 -9.656526 3.881815
## S2 2.219434 5.574150
## S3 8.675529 1.484111
## S4 -18.765582 5.605868
## S5 3.432998 2.493448
## S6 4.048447 6.083699
6.2. Estimar el número optimo de conglomerados
Para estimar el numero optimo de conglomerados se utiliza el metodo “silhouette” utilizando la funcion “fviz_nbclust”
# Se cargan las funciones cluster y facto extra
library(cluster)
library(factoextra)
fviz_nbclust(df6, clara, method = "silhouette")+
theme_classic()
6.3. Calcular CLARA
Se calcula el algoritmo PAM con k=2
## Call: clara(x = df6, 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"
Las salidas de la funcion clara incluye:
- medoids: objetos que representan clusters
- clustering: un vector que contiene el número de cluster de cada objeto
- muestra: etiquetas o números de caso de las observaciones en la mejor muestra
6.4. Se agregan las clasificaciones a los datos originales
## 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
6.5. Se visulaizan los resultados de Clara
## x y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
## S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
## 1 1 1 1 1 1 1 1 1 1
Capitulo 7: Agglomerative Clustering
Es la agrupacion jerarquica mas común, agrupa los objetos en funcion de su similitud El algoritmo trata cada objeto como un mismo grupo, luego, fusiona pares de grupos de forma sucesiva hasta que todos se hayan funsionado en un solo grupo que contenga a todos los objetos. El resultado se presenta en un diagrama de arbol llamado “dendrograma”
7.1. Preparacion de los datos
Se utilizan los conjuntos de datos “USArrests”
data("USArrests")
# Se estandarizan los datos
df7 <- scale(USArrests)
# Se muestran los datos
head(df7, nrow = 6)
## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
7.2. Se calcula la matriz de distancia
Para calcular la disimilitud entre los objetos y asi determinar que grupos deben fusionarse entre si se utiliza la funcion “dist” que mide la distancia entre los objetos y se presenta en la matriz de distancia
# Se calcula la matriz de distancia
# df7 = datos estandarizados
res.dist <- dist(df7, 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
7.3. Funcion de enlace
A partir de la distancia medida por la funcion “dist” la funcion de enlace agrupa en pares los grupos en funcion de su similitud y a su vez estos grupos creados se vinculan entre si para formar grupos mas grandes y asi sucesivamente hasta que todos esten agrupados jerarquicamente en un “arbol” que es creado por la funcion “hclust”
7.4. Dendrograma
La representacion grafica del arbol jerarquico se llama dendograma y para su elaboracion se utiliza la libraria “factoextra”
En el árbol, cada hoja corresponde a un objeto, los que son similares entre sí se combinan en ramas, que están fusionados a mayor altura. La altura de la fusión, proporcionada en el eje vertical, indica la (des)similitud/distancia entre dos objetos/clústeres. Cuanto mayor sea la altura de la fusión, menos similares serán. Esta altura se conoce como distancia cofenética entre los dos objetos.
7.5 Verificacion del arbol
Para evaluar que las distancias(alturas) en el arbol se condicen con las distnacias orginales se calcula la correlación entre las distancias cofenéticas y los datos de distancia originales. Mientras mas acercado a 1 se encuentre el coeficiente de correlacion mas precisa sera la solucion de agrupaciondel arbol respecto a la matriz de distancia original. Los valores superiores a 0.75 se dan por buenos
## [1] 0.6975266
# Se ejecuta la funcio hclust de nuevo utilizando el metodo de enlace promedio y se utiliza "cophenetic" para evaluar la solucion de agrupamiento
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382
7.6. Se divide el dendograma 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"
#Se divide en cuatro grupos y se separa por color
fviz_dend(res.hc, k = 4, # Se divide en cuatro grupos
cex = 0.5,
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # colores de los grupos
rect = TRUE
)
Usando la “función fviz_cluster” se puede visualizar el resultado en un diagrama de dispersión.
library(factoextra)
fviz_cluster(list(data = df, cluster = grp),
palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
ellipse.type = "convex", # Concentration ellipse
repel = TRUE, # Avoid label overplotting (slow)
show.clust.cent = FALSE, ggtheme = theme_minimal())
7.7. Usando el paquete cluster
library("cluster")
# Anidamiento aglomerativo (agrupación jerárquica)
res.agnes <- agnes(x = USArrests,
stand = TRUE, # datos estandarizados
metric = "euclidean",
method = "ward"
)
res.diana <- diana(x = USArrests,
stand = TRUE, # datos estandarizados
metric = "euclidean"
)
#Se vizualiza el resultado
fviz_dend(res.agnes, cex = 0.6, k = 4)
Capitulo 8: Comparación de dendrogramas
Tras la demostracion de cómo calcular la agrupación jerárquica (Capítulo 7), se describira aquí cómo poder comparar dos dendrogramas utilizando el paquete dendextend de R.
El paquete dendextend posee varias funciones para comparar dendrogramas. En este caso nos centraremos en dos funciones: - tanglegram() para la comparación visual de dos dendrogramas - y cor.dendlist() para calcular una matriz de correlación entre dendrogramas.
8.1. Preparación de los datos
Se usara una base de datos ya dentro de R llamada “USArrests”, trabajando con una pequeña porción de los datos, seleccionando aleatoriamente 10 de las 10 observaciones dentro del data set:
8.2 Comparación de dendrogramas
Se comienza creando una lista con dos dendrogramas realizando la agrupación jerárquica utilizando dos formas diferentes de enlazarlos (usando “average” y “ward.D”), posteriormente, se transforma el resultado a un dendrograma y se crea la lista que los contenga.
library(dendextend)
#Calcular la distancia de la matrix
res.dist <- dist(df.1, method = "euclidean")
#Calculas las 2 agrupaciones gerarquicas
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")
#Crear los dos dendogramas
den1 <- as.dendrogram(hc1)
den2 <- as.dendrogram(hc2)
#Crear la lista que contenga los dendogramas
dend_list <- dendlist(den1, den2)
8.2.1. Comparación visual
Para comparar ambos dendrogramas, se utilizara la función “tanglegram()”, dentro de la librería “dendextend” y esta función muestra ambos dendrogramas, una al lado del otro con sus etiquetas conectadas por líneas.
La calidad del alineamiento de ambos “arboles” puede ser medida usando la función “entanglement()”. El enredo se mide entre 1 (completamente enredado) y 0 (sin enredo); un nivel bajo de enredo corresponde a un buen alineamiento.
tanglegram(den1, den2,
highlight_distinct_edges = FALSE,
common_subtrees_color_lines = FALSE,
common_subtrees_color_branches = TRUE,
main = paste("entanglement =",
round(entanglement(dend_list),2)))
8.2.2. Matriz de correlación entre una lista de dendrogramas
La función cor.dendlist() se utiliza para calcular la matriz de correlación “baker” o “Cophenetic” entre una lista de árboles. El valor puede oscilar entre -1 y 1. Los valores cercanos a 0 significa que los dos árboles no son estadísticamente similares.
## [,1] [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
## [,1] [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000
La correlación entre ambos “arboles” puede calcularse como:
## [1] 0.9925544
## [1] 0.9895528
También es posible comparar simultáneamente múltiples dendrogramas. Un operador de cadena %>% es usado para correr múltiples funciones al mismo tiempo.
# Create multiple dendrograms by chaining
dend1 <- df.1 %>% dist %>% hclust("complete") %>% as.dendrogram
dend2 <- df.1 %>% dist %>% hclust("single") %>% as.dendrogram
dend3 <- df.1 %>% dist %>% hclust("average") %>% as.dendrogram
dend4 <- df.1 %>% dist %>% hclust("centroid") %>% as.dendrogram
# Compute correlation matrix
dend_list <- dendlist("Complete" = dend1, "Single" = dend2,
"Average" = dend3, "Centroid" = dend4)
cors <- cor.dendlist(dend_list)
# Print correlation matrix
round(cors, 2)
## Complete Single Average Centroid
## Complete 1.00 0.46 0.45 0.30
## Single 0.46 1.00 0.23 0.17
## Average 0.45 0.23 1.00 0.31
## Centroid 0.30 0.17 0.31 1.00
#Visualización de la matriz de correlación usando paquete de corrplot
library(corrplot)
corrplot(cors, "pie", "lower")
Capitulo 9: Visualización de dendrogramas
Como se ha descrito en los capítulos anteriores, un dendrograma es una representación basada en un diagrama de árbol de un grupo de datos usando la agrupación jerárquica. En este capítulo, se obtendrá un código de R para ver y editar dendrpgramas.
Se comenzará calculando agrupación jerárquica usando la base de datos “USArrests”:
#Cargado de la data
data(USArrests)
#Calculo de las distancias y la agrupación jerarquica
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
9.1. Vista de los dendrogramas
Usaremos la función fviz_dend()[en el paquete R factoextra] para crear fácilmente un bonito dendrograma utilizando el gráfico base de R o ggplot2. También ofrece una opción para dibujar dendrogramas circulares y árboles filogénicos.
library(factoextra)
#Creación de un dendrograma básico
fviz_dend(hc, cex = 0.5,
main = "dendrograma-ward.D2",
xlab = "Objetos", ylab = "Distancia", sub = "")
También es posible cortar el árbol a cierta altura, dividiendo los datos
en múltiples grupos como se describió en el capítulo 7 (Agrupación
Jerárquica), también es posible aplicar color a cada grupo y agregar un
rectángulo al rededor de cada grupo:
fviz_dend(hc,
k = 4,
cex = 0.5,
k_colors = c("#AF7AC5","#48C9B0","#F5B041","#58D68D"),
color_labels_by_k = TRUE,
rect = TRUE,
rect_fill = TRUE)
También se puede cambiar el tema, utilizando los temas que se encuentran dentro de el paquete de ggplot2, algunos de estos se llaman: theme_gray(), theme_bw(), theme_minimal(), theme_classic(), theme_void().
fviz_dend(hc,
k = 4,
cex = 0.5,
k_colors = c("#AF7AC5","#48C9B0","#F5B041","#58D68D"),
color_labels_by_k = TRUE,
ggtheme = theme_gray()
)
Permitiendo los valores para k_color se incluyen algunas paletas del
paquete RColorBrewer además de paletas de colores de revista científica
del paquete ggsci.
Si se quiere un diagrama horizontal con rectángulos en las agrupaciones,
se usa:
fviz_dend(hc,
k = 4,
cex = 0.5,
horiz = TRUE,
k_colors = "jco",
rect = TRUE,
rect_border = "jco",
rect_fill =TRUE)
Adicional, también se puede presentar un dendrograma circular utilizando
la opción “type =”
Para presentar un árbol de tipo filogénico se usa en “type=”phylogenic”
y también “repel = TRUE” para evitar que los niveles se superposicionen.
Esta opción requiere de un paquete llamado “igraph”.
fviz_dend(hc,
k = 4,
k_colors = "jco",
type = "phylogenic",
repel = TRUE,
phylo_layout = "layout.gem")
9.2 Caso de dendrogramas con grandes base de datos
Si quieres calcular agrupaciones jerárquicas con un gran data set, o te gustaría hacer zoom en el dendrograma o mostrar nada más un subconjunto del dendrograma.
9.2.2 Mostrar un subconjunto del dendrograma
Se debe de seguir el siguiente procedimiento:
Crear un dendrograma completo usando “fviz_dend()” y guarda el resultado como un objeto.
Utiliza la función de R llamada “cut.dendrogram()” para cortar el dendrograma, dándole una altura (h), en múltipbles subconjuntos. Esto devuelve un listado con los componentes “\(upper" y "\)lower”.
Observa los subconjuntos de árboles usando “fviz_dend()”.
dend_plot <- fviz_dend(hc, k = 4,cex = 0.5, k_colors = "jco")
dend_data <- attr(dend_plot, "dendrogram")
dend_cuts <- cut(dend_data, h = 10)
fviz_dend(dend_cuts$upper)
También se pueden mostrar subconjuntos circulares:
9.2.3. Guarda dendrogramas en un PDF
Si tienes un dendrograma grande, puedes guardarlo en un PDF al que le puedes hacer zoom sin perder calidad
9.3 Manipula dendrogramas usando dendextend
El paquete dendextend da funciones para cambiar facílmente la apariencia de un dendrograma y para comparar dendrogramas.
En esta sección se usará el operador de cadena %>% para simplificar el código.
- Código estándar para crear dendrogramas:
data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)
- Código para crear dendrogramas usando el operador de cadena:
library(dendextend)
dend <- USArrests[1:5,] %>%
scale %>%
dist %>%
hclust(method = "ward.D2") %>%
as.dendrogram
plot(dend)
- Funciones para editar dendrogramas: la función “set()” puede ser usada para cambiar parámetros del dendrograma, el formato es:
\[ set (object, what, value)\] 1. Object: Objeto, en este caso un dendrograma 2. What: un carácter que indica cuál es la propiedad del árbol que debe ser cambiada o actualizada. 3. value: un vector con el valor a cambiar en el árbol (el tipo del valor depende de lo que se coloque en “what”)
library(dendextend)
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(hc) %>%
set("branches_lwd", 1) %>%
set("branches_k_color", mycols, k = 4) %>%
set("labels_colors", mycols, k = 4) %>%
set("labels_cex", 0.5)
fviz_dend(dend)
Bibliografía
Landa Baella, M. del P., & Villagómez Véliz, D. C. (n.d.). Desarrollo de análisis clúster en R. Curso de Estadística Computacional. Recuperado de archivo proporcionado.
[Autor desconocido]. (n.d.). Introducción al análisis clúster: Conceptos y metodologías. Documento técnico. Recuperado de archivo proporcionado.