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)

Bibliografía