UNIVERSIDAD DE EL SALVADOR
FACULTAD DE CIENCIAS ECONOMICAS
ESCUELA DE ECONOMIA
ASIGNATURA:METODOS PARA EL ANALISIS ECONOMICO
TEMA:
LABORATORIO 2
ANALISIS DE CLUSTER (CONGLOMERADOS)
| INTEGRANTES | CARNET |
|---|---|
| JAIME ROBERTO PEREZ GOMEZ | PG07015 |
| LIDIA MARGARITA PEŇATE HERNANDEZ | PH18026 |
| ALEXIS ANTONIO TORRES ROSALES | TR17005 |
| TERESA CAROLINA GRANADOS PALACIOS | GP16030 |
GRUPO TEORICO:
02
CICLO/AŇO:
II-2022
SAN SALVADOR, 25 DE NOVIEMBRE DE 2022.
Existen dos tipos de análisis de clúster: Jerárquicos y no Jerárquicos
Jerárquicos: Son los que se basan en el cálculo de una matriz de distancia y se aplican con \(n<200\), pues los cálculos y resultados generan complicación con muestras grandes. Una característica de estos métodos es que no permiten una reasignación de los grupos es decir, que dos clúster o individuos unidos durante el proceso, no pueden separarse en etapas decisivas.
Estos métodos Jerárquicos se dividen en jerárquicos aglomerativos y de división.
Los Jerarquicos aglomerativos: Se denominan también ascendentes y parten de objetos singulares para ir construyendo conglomerados más complejos hasta concluir en uno solo, una de las ventajas de este tipo es que requieren menor tiempo de realización y son los más utilizados.
Entre algunos métodos los jerárquicos aglomerativos tenemos los siguientes:
• Método de Linkage Simple, Enlace Simple o Vecino más próximo
• Método del Linkage Completo, Enlace Completo o Vecino más alejado
• Método del Promedio entre grupos
• Método del Centroide
• Método del la Mediana
• Método de Ward
Por otra parte, los métodos jerárquicos de Division son los que parten del conjunto de datos y se van dividiendo hasta crear un solo elemento, los elementos que se incluyen en un grupo no se pueden reasignar. Dentro de estos métodos tenemos:
• Método del Linkage Simple
• Método del Linkage Completo
• Método del Promedio entre grupos
• Método del Centroide
• Método del la Mediana
• Análisis de Asociación
Métodos No jerárquicos
Mejor conocidos como métodos de optimización. Estos métodos si permiten una reasignación en los grupos, aunque se vuelve necesario fijar de antemano el número de cluster deseado.
Estos métodos se utilizan cuando:
• Los métodos de reasignación permiten reasignar objetos a distintos conglomerados en cada fase.
• Los métodos de búsqueda de densidad se agrupan mediante la búsqueda de altas densidades (modas).
• Los métodos directos permiten clasificar de forma simultánea individuos y variables.
que incluye los siguientes elementos:(Lo indicado en rojo corresponde a los elementos a redactar, en la versión a ser entregada debe aparecer el texto negro normal.)
|
Análisis de Clúster |
Técnicas
disponibles |
Ventajas |
Desventajas |
|
No Jerárquico: Conocido como partitivo o de optimización. Es el que asigna casos o grupos
diferenciados y los configura de manera que unos dependan de otros. A su misma
vez produce clusters disjuntos (cada caso es un
grupo), o bien clusters solapados es decir, un caso puede pertenecer a
más de un grupo. |
Reasignacion -K-medias -K-madoides o PAM -CLARA -Nubes dinámicas Búsqueda de densidad -Análisis modal -Método taxap -Método de fortin -Método de Wolf Método Directo -Block Clustering Métodos reductivos -Análisis Factorial tipo Q |
-Rapidez -Fácil de entender y adaptar -Puede trabajar con conjuntos grandes y pequeños (Cabe destacar que es
más eficiente con
conjuntos grandes ) -K medias es el método más robusto con respecto a presencia de outliers y errores en las medidas de distancia |
-No trata datos nominales -Depende demasiado de que el investigador defina el numero de clusters
-Mayor complejidad en el análisis -Una mala decisión inicial sobre “n” y composición de los grupos
ocasiona una errónea clasificación |
|
Jerárquico Se refiere a la agrupación de clusters para formar uno nuevo o
separar alguno que ya existe, con el propósito de maximizar una medida de similaridad o minimizar alguna distancia a medida que se
practique sucesivamente este proceso; en otras palabras, los individuos no se
particionan en clusters de una sola vez, sino que
se hacen particiones sucesivas a distintos niveles de agrupamiento. |
Aglomerativos -Simple Linkage (Vecino más próximo) -Complete Linkage (Vecino más lejano) - Promedio entre Grupos -Método del Centroide -Método de la Mediana -Método de Ward. Disociativos -Linkage Simple. -Linkage Comple -Promedio
entre Grupos. -Método del Centroide. -Método de
la Mediana. -Método de
Ward. -Análisis
de Asociación. |
-El número óptimo de clústers se puede
conseguir por el mismo modelo a través de emplear un dendrograma
(forma de árbol) - No se necesita conocer el número de clústers
K. -Proporcionan una fotografía de cómo están organizados los datos. El
investigador puede ver cuántos conglomerados “existen” en los datos. - Pueden calcularse los centros de esos conglomerados: centroides
(medias). |
-No es recomendable para grandes conjuntos de datos. -No hay manera de retractarse en las decisiones incorrectas (No se pueden
deshacer los pasos anteriores) -Los tiempos para los cálculos son largos. |
Fuente: Elaboracion propia con datos de
(Conglomerados, 2011), (Kassambara, 2017), (Schiaffino, 2018)
tanto jerárquicas como no jerárquicas, presentadas en el cuadro anterior, incluya una explicación de la librería y sintaxis para implementarla en R.
Entre los métodos de unión de algoritmos de clasificación no jerárquica tenemos: reasignación, búsqueda de densidad, métodos directos y métodos reductivos.
K-medias. Parte de medias arbitrarias y por medio de pruebas sucesivas, comprueba el efecto que sobre la varianza residual tiene la asignación de cada uno de los casos a cada uno de los grupos.
Quick-Cluster Permite que un individuo asignado a un cluster en un momento determinado del proceso, sea reasignado a otro cluster, si con esto se puede optimizar el criterio de selección. Este método es el más adecuado para establecer perfiles en una muestra amplia de individuos.
Método de Forgy Fue propuesto por Forgy y es una aproximación más simple al clustering particionado. Al igual que el método de K-medias, utiliza el concepto de centroide.
Nubes dinámicas. Parte del hecho que cada cluster debe de tener una representación llamada núcleo o centroide de cluster para, luego, hacer una búsqueda iterada de centroides y de cluster. Por esto, cada clase debe estar representada por un núcleo, siendo un elemento importante de todos los que integran la misma.
Análisis Modal Parte del supuesto de que los clusters son esféricos
Métodos Taxap Una de las características esenciales de este metodo es que tiene en cuenta el problema del chaining, es decir, cuando los cluster no forman grupos claramente aislados sino que forman parte uno continuo, el usuario debe de introducir el valor de corte, lo que proporciona una subjetividad a los resultados obtenidos
Block-Clustering Técnica aplicada para el análisis de datos bidreccional. Su objetivo es encontrar sub-matrices, con filas y columnas con alta correlación, sin embargo, existe el inconveniente que el número de cluster a calcular tiene que estar proporcionado previamente al cálculo del algoritmo.
Análisis Factorial tipo Q El objetivo principal de esta técnica es encontrar grupos de individuos con valores similares en las variables, con el fin de establecer un número pequeño de cluster, esperando que los individuos contenidos en cada cluster tenga algún tipo de propiedad común. Parte de la matriz de correlaciones entre los individuos y somete los factores encontrados a una rotación ortogonal pero puede existir el problema que los individuos pertenezcan a más de uno y por tanto, los clusters pueden presentar solapamiento, dificultando la interpretación.
Entre los métodos de unióm de algoritmos de clasificación jerárquica tenemos: métodos aglomerativos y métodos disociativos
Simple Linkage (Vecino más próximo)
Considera que la distancia entre dos clúster es la distancia más corta desde un miembro de un clúster a otro miembro de otro clúster. Si los datos se basan en similitudes entre dos clúster, se considera la mayor similaridad desde cualquier miembro de un clúster a otro miembro de otro clúster. Por tanto, el proceso de unión de estos dos clusters sería para minimizar las distancias o maximizar las similaridades.
Complete Linkage (Vecino más lejano)
Considera la distancia más grande desde cualquier miembro de un clúster a otro miembro de otro clúster. Si la medida es la distancia, se recoge la distancia máxima de los individuos del grupo al nuevo individuo. Si la medida es la similaridad entre el grupo formado y el nuevo individuo, se toma la mínima de los individuos del grupo al nuevo individuo. Por tanto, el proceso de unión de los dos clusters sería para minimizar las distancias o para maximizar las similaridades.
Promedio entre Grupos
Mide la proximidad de dos grupos, calculando la media de las distancias entre objetos de ambos grupos o las medias de las similitudes entre objetos de ambos grupos. Según algunos autores, afirman que este método está sesgado a formar conglomerados con aproximadamente la misma varianza.
Método del Centroide
En este método se calculan las distancias entre cada centroide de cada clúster, sin embargo, este centro se puede mover cuando los centroides de diferentes clúster están cerca uno del otro. En efecto, la distancia entre los grupos combinados se puede reducir a distintos pasos, dando lugar a problemas en el análisis de resultados. Por tanto, la semejanza entre dos clusters viene dada por la semejanza entre sus centroides.
Método de la Mediana
Este método se puede aplicar cuando el tamaño de los clusters es distinto y el centroide del nuevo cluster estará situado muy cerca del más grande (estando incluso dentro del mismo). Se puede aplicar para medidas de distancias y para medida de similitud.
Método de Ward
Aquí se unen clusters si la variación dentro de ellos no ha aumentado de manera significativa, haciendo más homogéneos los nuevos cluster formados. Este método se basa en la suma de cuadrados y a crear grupos de tamaño similar, dando paso a realizar buenos análisis de varianza por la producción de clusters definidos.
El análisis de cluster se puede realizar por medio de dos librerias: stats y cluster.
Stats, es el paquete general, más grande de R y contiene algunas funciones generales para realizar este tipo de análisis.
Cluster, es un paquete específico ya que contiene un amplio abanico de funciones en relación a cualquier tipo de análisis de cluster, que trabajan con dataSets por defecto.
Para el análisis de cluster no jerárquico, las funciones principales son:
kmeans() del paquete stats; que implementa el procedimiento de agrupamiento de K–medias, la sintaxis se muestra en el siguiente código:
kmeans(x, centers, iter.max = 10, nstart = 1)
centers: Los valores posibles son el número de clústeres (k) o un conjunto de centros de clústeres iniciales (distintos). Si se trata de un número, se elige un conjunto aleatorio de filas (distintas) en x como centros iniciales.
iter.max: Número máximo de iteraciones permitidas. El valor predeterminado es 10.
nstart: El número de particiones de inicio aleatorias cuando los centros son un número. A menudo se recomienda intentar \(nstart > 1\).
pam() del paquete cluster; se basa en la búsqueda de k objetos representativos o medoides entre las observaciones del conjunto de datos. Se utiliza de la siguiente manera:
pam(x, k, metric = "euclidean," stand = FALSE)
X: Los valores posibles incluyen:
Matriz de datos numéricos o trama 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 es normalmente la salida de daisy() o dist()
k: El número de clústeres
metric: Las métricas de distancia que se van a utilizar. Las opciones disponibles son “euclidean” y “manhattan.”
stand: valor lógico; si es true, las variables (columnas) de x se estandarizan antes de calcular las diferencias. Se ignora cuando x es una matriz de disimilitud.
clara() del paquete cluster; es una extensión de los métodos k-medoids para tratar datos que contienen un gran número de objetos (más de varios miles de observaciones) con el fin de reducir el tiempo de computación y el problema de almacenamiento RAM. Su sintaxis es:
clara(x, k, metric = "euclidean," stand = FALSE, samples = 5, pamLike = FALSE)
x: una matriz de datos numéricos o marco de datos, cada fila corresponde a una observación, y cada columna corresponde a una variable. Se permiten los valores que faltan (NAs).
k: el número de grupos.
métrica: las métricas de distancia que se van a utilizar. Las opciones disponibles son “euclidean” y “manhattan.”
stand: valor lógico; si es true, las variables (columnas) de x se estandarizan antes decalcular las diferencias.
muestras: número de muestras que deben extraerse del conjunto de datos. El valor predeterminado es 5, pero se recomienda un valor mucho mayor.
pamLike: Indicación lógica de si se debe utilizar el mismo algoritmo en la función pam(). Esto siempre debe ser cierto.
Para el análisis de cluster jerárquico disociativo, principalmente se ocupa la función “diana(…)”
diana() del paquete cluster; construye una jerarquía de clusterings, comenzando con un cluster grande que contiene todas las “n” observaciones. Los grupos se dividen hasta que cada grupo contiene sólo una observación. Se puede utilizar de la siguiente manera:
diana(x, diss = inherits(x, "dist"), stand = FALSE, metric ="euclidean")
X: matriz de datos o dataframe, o matriz de disimilitud, dependiendo del valor del argumento diss; indicador lógico; si TRUE entonces x se asume como una matriz de disimilitud. Si FALSE entonces X se trata como una matriz de observaciones por variables.
Stand: Indicador lógico: Si TRUE, las mediciones en x se estandarizan antes de calcular las disimilitudes. Si x ya es una matriz de disimilitud, este argumento se ignorará.
Metric: cadena de caracteres que especifica la métrica que se va a utilizar para calcular las diferencias entre las observaciones. Las opciones son euclidean y manhattan.
Para realizar análisis de cluster jerárquico aglomerativo, la funcion principal es “hclust(…)”.
hclust() del paquete stats; muestra esas distancias sucesivas en lo que denominamos el historial de conglomeración. Se puede utilizar de la siguiente manera: res.hc <- hclust(d = res.dist, method = “ward.D2”)
d: estructura de disimilitud producida por la función dist()
Method: Método de aglomeración (enlace) que se utiliza para calcular la distancia entre clústeres. Los valores permitidos son los de “Ward.D,” “Ward.D2,” “single,” “complete,” “promedio,” “mcquitty,” “mediana” o “centroide.” agnes() del paquete cluster; construye una jerarquía de clusterings. Al principio, cada observación es un pequeño cluster por sí solo. Los clústeres se fusionan hasta que sólo quede un clúster grande que contenga todas las observaciones. Se puede utilizar de la siguiente manera:
agnes(x, diss = inherits(x, "dist"), stand = TRUE, metric = "euclidean", method = "ward")
X: matriz de datos o dataframe, o matriz de disimilitud, dependiendo del valor del argumento diss; indicador lógico; si TRUE entonces x se asume como una matriz de disimilitud. Si FALSE entonces X se trata como una matriz de observaciones por variables.
Stand: Indicador lógico: Si TRUE, las mediciones en x se estandarizan antes de calcular las disimilitudes. Si x ya es una matriz de disimilitud, este argumento se ignorará.
Metric: cadena de caracteres que especifica la métrica que se va a utilizar para calcular las diferencias entre las observaciones. Las opciones son euclidean y manhattan.
Method: cadena de caracteres que define el método de agrupación en clústeres. Los seis métodos implementados son “average” “single” “complete” “Ward” “weight” “flexible.”
4.1 Cálculo de k-medias de agrupamiento en R.
4.1.1 Datos
data("USArrests")
df <- scale (USArrests)
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.1.2 Estimación del número óptimo de conglomerados
library(factoextra)
fviz_nbclust(df, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2)
4.1.3 Calculo de k-means clustering
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
4.1.4 Accediendo a los resultadoa de la funcion kmeans()
km.res$cluster
## Alabama Alaska Arizona Arkansas California
## 1 4 4 1 4
## Colorado Connecticut Delaware Florida Georgia
## 4 3 3 4 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 4 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 4
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 4 2 1 4
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 4 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 4 4 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 4 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
head(km.res$cluster, 4)
## Alabama Alaska Arizona Arkansas
## 1 4 4 1
km.res$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
4.1.5 Visualizacion de k-means clusters
fviz_cluster(km.res, data = df,
palette = c("#8B0000", "#006400", "#8B008B", "#00008B"),
ellipse.type = "euclid",
star.plot = TRUE,
repel = TRUE,
ggtheme = theme_minimal()
)
Ejercicio Capitulo 5: K-Medoids
5.1 Calculo de PAM en R
5.1.1 Datos
data("USArrests")
df <- scale(USArrests)
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
5.1.2 Estimacion del numero optimo de conglomerados
library(cluster)
library(factoextra)
fviz_nbclust(df, pam, method = "silhouette")+
theme_classic()
5.1.3 Calculo PAM clustering
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
5.1.4. Accediendo a los resultados de la funcion pam()
pam.res$medoids
## Murder Assault UrbanPop Rape
## New Mexico 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska -0.8008247 -0.8250772 -0.2445636 -0.5052109
head(pam.res$clustering)
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 2 1 1
5.1.5 Visualizacion PAM clusters
fviz_cluster(pam.res,
palette = c("#EE82EE", "#9ACD32"),
ellipse.type = "t",
repel = TRUE,
ggtheme = theme_classic()
)
6.1 Calcuo de CLARA en R
6.1.1 Formato y preparación de 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 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 -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.1.2 Estimación del número óptimo de conglomerados
library(cluster)
library(factoextra)
fviz_nbclust(df, clara, method = "silhouette")+
theme_classic()
6.1.3 Calculo 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
## 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
clara.res$medoids
## x y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
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
6.1.4 Visualizar CLARA clusters
fviz_cluster(clara.res,
palette = c("#EE82EE", "#9ACD32"), # color de paleta
ellipse.type = "t",
geom = "point", pointsize = 1,
ggtheme = theme_classic()
)
7.1 Pasos para el agrupamiento jerárquico aglomerativo
7.1.1 Estructura y preparación de datos
data("USArrests")
df <- scale(USArrests)
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
7.1.2 medidas de similitud
res.dist <- dist(df, method = "euclidean")
as.matrix(res.dist)[1:6, 1:6]
## Alabama Alaska Arizona Arkansas California Colorado
## Alabama 0.000000 2.703754 2.293520 1.289810 3.263110 2.651067
## Alaska 2.703754 0.000000 2.700643 2.826039 3.012541 2.326519
## Arizona 2.293520 2.700643 0.000000 2.717758 1.310484 1.365031
## Arkansas 1.289810 2.826039 2.717758 0.000000 3.763641 2.831051
## California 3.263110 3.012541 1.310484 3.763641 0.000000 1.287619
## Colorado 2.651067 2.326519 1.365031 2.831051 1.287619 0.000000
7.1.3 Enlace
res.hc <- hclust(d = res.dist, method = "ward.D2")
7.2.4 Dendrograma
library("factoextra")
fviz_dend(res.hc, cex = 0.5)
7.2 Verificar el cluster tree
res.coph <- cophenetic(res.hc)
cor(res.dist, res.coph)
## [1] 0.6975266
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382
7.3 Cortar el dendrograma en diferentes grupos.
grp <- cutree(res.hc, k = 4)
head(grp, n = 4)
## Alabama Alaska Arizona Arkansas
## 1 2 2 3
table(grp)
## grp
## 1 2 3 4
## 7 12 19 12
rownames(df)[grp == 1]
## [1] "Alabama" "Georgia" "Louisiana" "Mississippi"
## [5] "North Carolina" "South Carolina" "Tennessee"
fviz_dend(res.hc, k = 4,
cex = 0.5,
k_colors = c("#8B0000", "#006400", "#8B008B", "#00008B"),
color_labels_by_k = TRUE,
rect = TRUE
)
fviz_cluster(list(data = df, cluster = grp),
palette = c("#8B0000", "#006400", "#8B008B", "#00008B"),
ellipse.type = "convex",
repel = TRUE,
show.clust.cent = FALSE, ggtheme = theme_minimal())
7.4 Paquetes de Cluster R
library("cluster")
res.agnes <- agnes(x = USArrests,
stand = TRUE,
metric = "euclidean",
method = "ward"
)
res.diana <- diana(x = USArrests,
stand = TRUE,
metric = "euclidean"
)
fviz_dend(res.agnes, cex = 0.6, k = 4)
8.1 Preparación de datos
df <- scale(USArrests)
# Subset containing 10 rows
set.seed(123)
ss <- sample(1:50, 10)
df <- df[ss,]
8.2 Comparacion 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)
8.2.1 Comparación visual de dos dendrogramas
tanglegram(dend1, dend2)
tanglegram(dend1, dend2,
highlight_distinct_edges = FALSE,
common_subtrees_color_lines = FALSE,
common_subtrees_color_branches = TRUE,
main = paste("entanglement =", round(entanglement(dend_list), 2))
)
8.2.2 Matriz de correlación entre una lista de dendogramas
cor.dendlist(dend_list, method = "cophenetic")
## [,1] [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
cor.dendlist(dend_list, method = "baker")
## [,1] [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000
# Coeficiente de correlacion Cophenetic
cor_cophenetic(dend1, dend2)
## [1] 0.9925544
# Coeficiente de correlacion Baker
cor_bakers_gamma(dend1, dend2)
## [1] 0.9895528
dend1 <- df %>% dist %>% hclust("complete") %>% as.dendrogram
dend2 <- df %>% dist %>% hclust("single") %>% as.dendrogram
dend3 <- df %>% dist %>% hclust("average") %>% as.dendrogram
dend4 <- df %>% dist %>% hclust("centroid") %>% as.dendrogram
dend_list <- dendlist("Complete" = dend1, "Single" = dend2,
"Average" = dend3, "Centroid" = dend4)
cors <- cor.dendlist(dend_list)
round(cors, 2)
## Complete Single Average Centroid
## Complete 1.00 0.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
library(corrplot)
corrplot(cors, "pie", "lower")
9.1 Datos
data(USArrests)
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
9.2 Visualizando dendrogramas
library(factoextra)
fviz_dend(hc, cex = 0.5)
fviz_dend(hc, cex = 0.5,
main = "Dendrogram - ward.D2",
xlab = "Objects", ylab = "Distance", sub = "")
fviz_dend(hc, cex = 0.5, horiz = TRUE)
fviz_dend(hc, k = 4, # Cut in four groups
cex = 0.5, # label size
k_colors = c("#8B0000", "#006400", "#8B008B", "#00008B"),
color_labels_by_k = TRUE, # color labels by groups
ggtheme = theme_gray() # Change theme
)
# Forma Vertical
fviz_dend(hc, cex = 0.5, k = 4,
k_colors = "npg")
# Forma Horizontal
fviz_dend(hc, k = 4, cex = 0.4, horiz = TRUE, k_colors = "npg",
rect = TRUE, rect_border = "npg", rect_fill = TRUE)
#Forma circular
fviz_dend(hc, cex = 0.5, k = 4,k_colors = "aaas", type = "circular")
#Forma Phylogenic-like tree
require("igraph")
fviz_dend(hc, k = 4, k_colors = "lancet",
type = "phylogenic", repel = TRUE)
#Forma Phylogenic trees
require("igraph")
fviz_dend(hc, k = 4, # Cut in four groups
k_colors = "lancet",
type = "phylogenic", repel = TRUE,
phylo_layout = "layout.gem")
9.3 Caso de dendrograma con grandes conjuntos de datos
9.3.1 Zooming in the dendrograma
fviz_dend(hc, xlim = c(1, 20), ylim = c(1, 8))
9.3.2 Plotting a sub-tree of dendrogramas
dend_plot <- fviz_dend(hc, k = 4,
cex = 0.5,
k_colors = "lancet"
)
dend_data <- attr(dend_plot, "dendrogram")
dend_cuts <- cut(dend_data, h = 10)
fviz_dend(dend_cuts$upper)
print(dend_plot)
fviz_dend(dend_cuts$lower[[1]], main = "Subtree 1")
fviz_dend(dend_cuts$lower[[2]], main = "Subtree 2")
fviz_dend(dend_cuts$lower[[2]], type = "circular")
9.3.3 Guardar dendrograma en una página PDF grande
pdf("dendrogram.pdf", width=30, height=15)
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "lancet" )
print(p)
dev.off()
## png
## 2
9.4 Manipulación de dendrogramas usando dendextend
data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)
library(dendextend)
dend <- USArrests[1:5,] %>%
scale %>%
dist %>%
hclust(method = "ward.D2") %>%
as.dendrogram
plot(dend)
library(dendextend)
mycols <- c("#8B0000", "#006400", "#8B008B", "#00008B")
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)