laboratorio 2
Fecha: 22-11-2021
GT-02
Integrantes:
Canizales Avalos Gerardo Javier CA16014
Hernandez Guardado Walter Stanley HG13005
Análisis de conglomerados
Análisis de Conglomerados: Es una técnica multivariante que permite agrupar un conjunto de datos en diferentes grupos o subconjuntos que reciben el nombre de “conglomerados” o “Clusters”, en función de rasgos o propiedades similares entre los elementos constituyentes.
Es empleado en diferentes campos del conocimiento ya que le facilita al investigador organizar los datos disponibles del fenómeno estudiado. Por ejemplo, en el caso de la medicina, permite obtener un mejor entendimiento de enfermedades complejas. En el caso del marketing contribuye a comprender el comportamiento del consumidor y a forjar una idea más clara de sus gustos y preferencias. En el campo del urbanismo, ayuda a identificar grupos de vivienda en base a determinados parámetros que son definidos por el investigador.
El objetivo principal del análisis de conglomerados consiste en reducir el número de objetos y organizarlos en grupos cuyo número que sea significativamente menor al total de objetos que se tenían inicialmente. Los elementos de un grupo deben compartir elementos similares entre sí pero al mismo tiempo deben ser diferentes a los otros grupos.
Cuadro comparativo
|
Análisis de Clúster |
Técnicas disponibles |
Ventajas |
Desventajas |
|
Jerárquico: Es un enfoque empleado para agrupar objetos en función de su similitud. A diferencia de la agrupación en clústeres de particiones, la agrupación jerárquica no requiere especificar previamente el número de clústeres que se producirán.
|
-Agrupación por aglomeración. Comprende los siguientes métodos: Vinculación máxima o completa
Vinculación mínima o simple
vinculación media o promedio
Enlace centroide
método de variación Mínima de Ward.
-Agrupación por división.
|
El agrupamiento jerárquico es capaz de fijar por sí solos el número de clústeres, por ello se pueden utilizar de forma exploratoria y posteriormente aplicar un análisis no jerárquico con el número de clústeres obtenido.
El número óptimo de clusters se puede obtener por el mismo modelo, a través del dendrograma |
No es conveniente cuando se trabaja con un gran conjunto de datos. |
|
No jerárquico: El algoritmo CLARA es una extensión del método de clustering, cuya intención es reducir el tiempo de cálculo en el caso de un gran conjunto de datos, requiere que el usuario especifique el número apropiado de clústeres que se producirán. |
Muestreo y simulación |
Reduce los tiempos y almacenamiento de RAM.
Permite operar grandes volúmenes de datos o información de una manera eficiente
|
Para que sea eficiente la implementación del método es recomendable que se trabaje con grandes volúmenes de datos |
Técnicas disponibles
Jerárquico - Agrupación aglomerativa
Pasos para realizar agrupaciones jerárquicas aglomerativas utilizando el software R:
1. Preparando los datos
2. Computación (dis) similitud información entre cada par de objetos en el conjunto de datos.
3. Uso de la función de vinculación para agrupar objetos en un árbol de conglomerados jerárquicos, según la información de distancia generada en el paso 1. Los objetos / conglomerados que están muy próximos se vinculan entre sí mediante la función de vinculación.
4. Determinar dónde cortar el árbol jerárquico en grupos. Esto crea una partición de los datos.
En general, se recomienda estandarizar las variables en el conjunto de datos antes de realizar un análisis posterior. La estandarización hace que las variables sean comparables cuando se miden en diferentes escalas. Por ejemplo, una variable puede medir la altura en metros y otra variable puede medir el peso en kg. La función R scale () se puede utilizar para la estandarización, consulte la documentación de la escala.
data("USArrests")
# Estandarizar los datos
df <- scale(USArrests)
# Cargar los datos
data("USArrests")
# Mostrar las primeras 6 filas
head(df, nrow = 6)## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
El clúster de paquetes R facilita la realización de análisis de clústeres en R. Proporciona la función agnes () y diana () para calcular la agrupación en clústeres aglomerativa y divisiva, respectivamente. Estas funciones realizan todos los pasos necesarios para usted. No es necesario ejecutar las funciones scale (), dist () y hclust () por separado.
library("cluster")
# Anidacion aglomerativa (agrupación jerarquica)
res.agnes <- agnes(x = USArrests, # matriz de datos
stand = TRUE, # Estandarizar los datos
metric = "euclidean", # métrica para matriz de distancia
method = "ward" # Metodo de vinculación
)
# Agrupación de análisis de cluster
res.diana <- diana(x = USArrests, # matriz de datos
stand = TRUE, # estandarizar los datos
metric = "euclidean" # métrica para matriz de distancia
)No jerarquico simulación y muestreo
con este método podemos trabajar con grandes volúmenes de datos de manera más eficiente.
Preparación de los datos.
set.seed(1234)
# Genera 500 objetos, divididos en 2 grupos.
df <- rbind(cbind(rnorm(200,0,8), rnorm(200,0,8)), cbind(rnorm(300,50,8), rnorm(300,50,8)))
# Especificar nombres de filas y columnas
colnames(df) <- c("X", "y")
rownames(df) <- paste0("S", 1:nrow(df))
# Vista previa de los datos
head(df, nrow = 6)## X y
## S1 -9.656526 3.881815
## S2 2.219434 5.574150
## S3 8.675529 1.484111
## S4 -18.765582 5.605868
## S5 3.432998 2.493448
## S6 4.048447 6.083699
Estimar el numero óptimo de clústers
# Calcular CLARA
clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
# Imprimir componentes de clara.res
print(clara.res)## Call: clara(x = df, k = 2, samples = 50, pamLike = TRUE)
## Medoids:
## X y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
## Objective function: 9.87862
## Clustering vector: Named int [1:500] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
## - attr(*, "names")= chr [1:500] "S1" "S2" "S3" "S4" "S5" "S6" "S7" ...
## Cluster sizes: 200 300
## Best sample:
## [1] S37 S49 S54 S63 S68 S71 S76 S80 S82 S101 S103 S108 S109 S118 S121
## [16] S128 S132 S138 S144 S162 S203 S210 S216 S231 S234 S249 S260 S261 S286 S299
## [31] S304 S305 S312 S315 S322 S350 S403 S450 S454 S455 S456 S465 S488 S497
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
dd <- cbind(df, cluster = clara.res$cluster)
head(dd, n = 4)## X y cluster
## S1 -9.656526 3.881815 1
## S2 2.219434 5.574150 1
## S3 8.675529 1.484111 1
## S4 -18.765582 5.605868 1
Ejemplos, capitulos del 4-9
CAPITULO 4. Agrupación de K-medias
library(factoextra)Estructura y prepración de datos
data("USArrests")
df <- scale(USArrests)
#Ver las primeras tres filas
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
Computación de clusters de K-medias
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
Accesar a los resultados de la función K-media
# Número de conglomerado para cada una de las observaciones
km.res$cluster## Alabama Alaska Arizona Arkansas California
## 1 4 4 1 4
## Colorado Connecticut Delaware Florida Georgia
## 4 3 3 4 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 4 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 4
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 4 2 1 4
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 4 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 4 4 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 4 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
head(km.res$cluster,4)## Alabama Alaska Arizona Arkansas
## 1 4 4 1
#Cluster Size
km.res$size## [1] 8 13 16 13
#Cluster means
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
CAPITULO 5. K-Medoides
Estructura y prepración de datos
data("USArrests")
df <- scale(USArrests)
#Ver las primeras tres filas
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
library(cluster)
library(factoextra)Computación en clusters PAM
pam.res <- pam(df, 2)
print(pam.res)## Medoids:
## ID Murder Assault UrbanPop Rape
## New Mexico 31 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska 27 -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 1 1 1 2 1
## Colorado Connecticut Delaware Florida Georgia
## 1 2 2 1 1
## Hawaii Idaho Illinois Indiana Iowa
## 2 2 1 2 2
## Kansas Kentucky Louisiana Maine Maryland
## 2 2 1 2 1
## Massachusetts Michigan Minnesota Mississippi Missouri
## 2 1 2 1 1
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 1 2 2
## New Mexico New York North Carolina North Dakota Ohio
## 1 1 1 2 2
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 2 2 2 2 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 1 2 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 2 2 2 2 2
## Objective function:
## build swap
## 1.441358 1.368969
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call" "data"
dd <- cbind(USArrests, cluster = pam.res $ cluster)
head(dd, n = 3)## Murder Assault UrbanPop Rape cluster
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 1
## Arizona 8.1 294 80 31.0 1
Acceder a los resultados de la función PAM
#Cluster medoids: New Mexico, Nebraska
pam.res$medoids## Murder Assault UrbanPop Rape
## New Mexico 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska -0.8008247 -0.8250772 -0.2445636 -0.5052109
#Cluster numbers
head(pam.res$clustering)## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 2 1 1
CAPITULO 6. ClARA-Agrupación de grandes aplicaciones
Preparación de los datos.
set.seed(1234)
# Genera 500 objetos, divididos en 2 grupos.
df <- rbind(cbind(rnorm(200,0,8), rnorm(200,0,8)), cbind(rnorm(300,50,8), rnorm(300,50,8)))
# Especificar nombres de filas y columnas
colnames(df) <- c("X", "y")
rownames(df) <- paste0("S", 1:nrow(df))
# Vista previa de los datos
head(df, nrow = 6)## X y
## S1 -9.656526 3.881815
## S2 2.219434 5.574150
## S3 8.675529 1.484111
## S4 -18.765582 5.605868
## S5 3.432998 2.493448
## S6 4.048447 6.083699
Estimar el numero óptimo de clústers
# Calcular CLARA
clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
# Imprimir componentes de clara.res
print(clara.res)## Call: clara(x = df, k = 2, samples = 50, pamLike = TRUE)
## Medoids:
## X y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
## Objective function: 9.87862
## Clustering vector: Named int [1:500] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
## - attr(*, "names")= chr [1:500] "S1" "S2" "S3" "S4" "S5" "S6" "S7" ...
## Cluster sizes: 200 300
## Best sample:
## [1] S37 S49 S54 S63 S68 S71 S76 S80 S82 S101 S103 S108 S109 S118 S121
## [16] S128 S132 S138 S144 S162 S203 S210 S216 S231 S234 S249 S260 S261 S286 S299
## [31] S304 S305 S312 S315 S322 S350 S403 S450 S454 S455 S456 S465 S488 S497
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
dd <- cbind(df, cluster = clara.res$cluster)
head(dd, n = 4)## X y cluster
## S1 -9.656526 3.881815 1
## S2 2.219434 5.574150 1
## S3 8.675529 1.484111 1
## S4 -18.765582 5.605868 1
Acceder a los datos devueltos por CLARA
# Medoides
clara.res$medoids## X y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
# Agrupación
head(clara.res$clustering, 10)## S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
## 1 1 1 1 1 1 1 1 1 1
CAPITULO 7. Agrupación aglomerativa
Estructura y preparación de datos
# cargando los datos
data("USArrests")
# estandarizar los datos
df <- scale(USArrests)
# Mostrar las primeras 6 filas
head(df, nrow = 6)## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
Calculando la matriz de distancia
# Calculo de la matriz de disimilitud
# df = los datos estandarizados
res.dist <- dist(df, method = "euclidean")Mostrando las primeras 6 filas y columnas de la mtriz de distancia
as.matrix(res.dist)[1:6, 1:6]## Alabama Alaska Arizona Arkansas California Colorado
## Alabama 0.000000 2.703754 2.293520 1.289810 3.263110 2.651067
## Alaska 2.703754 0.000000 2.700643 2.826039 3.012541 2.326519
## Arizona 2.293520 2.700643 0.000000 2.717758 1.310484 1.365031
## Arkansas 1.289810 2.826039 2.717758 0.000000 3.763641 2.831051
## California 3.263110 3.012541 1.310484 3.763641 0.000000 1.287619
## Colorado 2.651067 2.326519 1.365031 2.831051 1.287619 0.000000
Función para crear el arbol gerarquico
res.hc <- hclust(d = res.dist, method = "ward.D2")Visualización de dendograma
# cex: label size
library("factoextra")
fviz_dend(res.hc, cex = 0.5)Calculo de la distancias cofenéticas para la agrupación jerarquica
# calculo de la distancia cofenetica
res.coph <- cophenetic(res.hc)
# Correlación entre la distancia cofenetica y la distancia original
cor(res.dist, res.coph)## [1] 0.6975266
Evaluando la solución de agrupamiento
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))## [1] 0.7180382
# Cortar el árbol en 4 grupos
grp <- cutree(res.hc, k = 4)
head(grp, n = 4)## Alabama Alaska Arizona Arkansas
## 1 2 2 3
# Número de miembros en cada grupo
table(grp)## grp
## 1 2 3 4
## 7 12 19 12
# Obtenga los nombres de los miembros del clúster 1
rownames(df)[grp == 1]## [1] "Alabama" "Georgia" "Louisiana" "Mississippi"
## [5] "North Carolina" "South Carolina" "Tennessee"
7.4 Corte del dendograma en diferentes grupos
# Cortar en 4 grupos y colorear por grupos
fviz_dend(res.hc, k = 4, # Cortar en cuatro grupos
cex = 0.5, # tamaño de la etiqueta
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # etiquetas de color por grupos
rect = TRUE # agregar rectángulo alrededor de los grupos
)Vizualisando en un diagrama de dispersión
fviz_cluster(list(data = df, cluster = grp),
palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
ellipse.type = "convex", # Elipse de concentración
repel = TRUE, # Evite el trazado excesivo de etiquetas
show.clust.cent = FALSE, ggtheme = theme_minimal())7.5 Grupo de paquete R
library("cluster")
# Anidacion aglomerativa (agrupación jerarquica)
res.agnes <- agnes(x = USArrests, # matriz de datos
stand = TRUE, # Estandarizar los datos
metric = "euclidean", # métrica para matriz de distancia
method = "ward" # Metodo de vinculación
)
# Agrupación de análisis de cluster
res.diana <- diana(x = USArrests, # matriz de datos
stand = TRUE, # estandarizar los datos
metric = "euclidean" # métrica para matriz de distancia
)CAPITULO 8. Comparación de dendrogramas
Preparación de los datos
## estandarizando las variables
df <- scale(USArrests)# Subconjunto que contiene 10 filas
set.seed(123)
ss <- sample(1:50, 10)
df <- df[ss,]8.2 comparando dendrogramas
library(dendextend)
# Calcular la matriz de distancias
res.dist <- dist(df, method = "euclidean")
# Calculo de 2 agrupaciones jerárquicas
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")
# crear dos dendrogramas
dend1 <- as.dendrogram (hc1)
dend2 <- as.dendrogram (hc2)
# Crear una lista para contener dendrogramas
dend_list <- dendlist(dend1, dend2)8.2.1 Comparación visual de dos dendrogramas
tanglegram(dend1, dend2)personalizacion del tanglegram usando muchas opciones
tanglegram(dend1, dend2,
highlight_distinct_edges = FALSE, # Desactivar líneas discontinuas
common_subtrees_color_lines = FALSE, # Colores de línea de apagado
common_subtrees_color_branches = TRUE, # Colorea ramas comunes
main = paste("entrelazamiento =", round(entanglement(dend_list), 2))
)Matriz de correlación entre una lista de dendrogramas
# Matriz de correlación cofenetica
cor.dendlist(dend_list, method = "cophenetic")## [,1] [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
# Matriz de correlación de Baker
cor.dendlist(dend_list, method = "baker")## [,1] [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000
# Coeficiente de correlación de cofenética
cor_cophenetic(dend1, dend2)## [1] 0.9925544
# Coeficiente de correlación de Baker
cor_bakers_gamma(dend1, dend2)## [1] 0.9895528
8.2 Compárando dendrogramas
# crea múltiples dendrogramas encadenando
dend1 <- df %>% dist %>% hclust("complete") %>% as.dendrogram
dend2 <- df %>% dist %>% hclust("single") %>% as.dendrogram
dend3 <- df %>% dist %>% hclust("average") %>% as.dendrogram
dend4 <- df %>% dist %>% hclust("centroid") %>% as.dendrogram
# Calcular matriz de correlación
dend_list <- dendlist("Complete" = dend1, "Single" = dend2,
"Average" = dend3, "Centroid" = dend4)
cors <- cor.dendlist(dend_list)
# Imprimir matriz de correlación
round(cors, 2)## Complete Single Average Centroid
## Complete 1.00 0.46 0.45 0.30
## Single 0.46 1.00 0.23 0.17
## Average 0.45 0.23 1.00 0.31
## Centroid 0.30 0.17 0.31 1.00
# Visualice la matriz de correlación usando el paquete corrplot
library(corrplot)
corrplot(cors, "pie", "lower")Capitulo 9. Visualización de dendrogramas
Calculando la agrupación jerárquica utilizando los conjuntos de datos de USArrests
# Cargar los datos
data(USArrests)
# Calcular distancias y agrupamiento jerárquico
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")9.1 Visualización de dendrogramas
library(factoextra)
fviz_dend(hc, cex = 0.5)Cambiar los títulos de la trama
fviz_dend(hc, cex = 0.5,
main = "Dendrogram - ward.D2",
xlab = "Objects", ylab = "Distance", sub = "")Dibujando un dendrograma horizontal
fviz_dend(hc, cex = 0.5, horiz = TRUE)Dendrograma de racimo
fviz_dend(hc, k = 4, # cortar en cuatro grupos
cex = 0.5, # tamaño de la etiqueta
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # etiquetas de color por grupos
rect = TRUE, # agregar rectángulo alrededor de los grupos
rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
rect_fill = TRUE)Opción para cambiar el tema de la trama
fviz_dend(hc, k = 4, # cortar en cuatro grupos
cex = 0.5, # tamaño de la etiqueta
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # etiquetas de color por grupos
ggtheme = theme_gray() # cambiar de tema
)Cambiar los colores del grupo
fviz_dend(hc, cex = 0.5, k = 4, # cortar en cuatro grupos
k_colors = "jco")Dibujar un dendrograma horizontal
fviz_dend(hc, k = 4, cex = 0.4, horiz = TRUE, k_colors = "jco",
rect = TRUE, rect_border = "jco", rect_fill = TRUE)Dibujar un dendrograma circular
fviz_dend(hc, cex = 0.5, k = 4,
k_colors = "jco", type = "circular")Trazar un árbol de tipo filogénico
require("igraph")
fviz_dend(hc, k = 4, k_colors = "jco",
type = "phylogenic", repel = TRUE)Diseño alterno del árbol filogénico
require("igraph")
fviz_dend(hc, k = 4, # cortar en cuatro grupos
k_colors = "jco",
type = "phylogenic", repel = TRUE,
phylo_layout = "layout.gem")9.2 Caso de dendrograma con grandes conjuntos de datos
Zoom en el dendrograma
fviz_dend(hc, xlim = c(1, 20), ylim = c(1, 8))9.2.2 trazar un subárbol de dendrogramas
# Cree un gráfico de todo el dendrograma
# y estraiga los datos del dendrograma
dend_plot <- fviz_dend(hc, k = 4, # cortar en cuatro grupos
cex = 0.5, # Tamaño de la etiqueta
k_colors = "jco"
)
dend_data <- attr(dend_plot, "dendrogram") # Extraer datos de dendrogramas
# Cortar el dendrograma a la altura h = 10
dend_cuts <- cut(dend_data, h = 10)
# Visualice la versión truncada que contiene
# dos ramas
fviz_dend(dend_cuts$upper) ### Trazar dendrogramas subárboles
# Trazar el dendrograma completo
print(dend_plot)# Parte subárbol 1
fviz_dend(dend_cuts$lower[[1]], main = "Subtree 1")# Parte subárbol 2
fviz_dend(dend_cuts$lower[[2]], main = "Subtree 2")Trazar árbol de forma circular
fviz_dend(dend_cuts$lower[[2]], type = "circular")Guardar dendrograma en una gran página PDF
pdf("dendrogram.pdf", width=30, height=15) # Abrir un PDF
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "jco" ) # Hacer trazado
print(p)
dev.off() # Cerrar el PDF## png
## 2
Manipular dendrgoramas usando 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 usando el operador de encadenamiento
library(dendextend)
dend <- USArrests[1:5,] %>% # data
scale %>% # Scale the data
dist %>% # calculate a distance matrix,
hclust(method = "ward.D2") %>% # Hierarchical clustering
as.dendrogram # Turn the object into a dendrogram.
plot(dend)9.3 Manipular dendrogramas con dendextend
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) %>% # Colorea ramas por grupos
set("labels_colors", mycols, k = 4) %>% # Etiquetas de color por grupos
set("labels_cex", 0.5) # Cambiar el tamaño de la etiqueta
# 2. crea una trama
fviz_dend(dend)