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.

1. Explique en qué consiste el análisis de conglomerados.

  1. Explique en qué consiste el análisis de conglomerados? El análisis de clúster, también conocido como análisis de conglomerado, es una técnica estadística multivariante que busca agrupar elementos (o variables) tratando de lograr la máxima homogeneidad en cada grupo y la mayor diferencia entre los grupos. El objetivo principal del análisis de conglomerados es la identificación de grupos de manera que la variabilidad intraclase sea inferior a la variabilidad entreclases. El análisis de clúster tiene una gran importancia en aplicación en muchas áreas de investigación. Sin embargo, con los beneficios del análisis de clúster posee ciertas desventajas. El Análisis de clúster es una técnica descriptiva, ateórica y no inferencial. Este Análisis no tiene bases estadísticas para deducir inferencias estadísticas sobre una población a partir de una muestra, es un método que se basa en criterios geométricos y es utilizado fundamentalmente como una técnica exploratoria, descriptiva pero no explicativa. Por otra parte, la solución al análisis de clúster depende totalmente de las variables utilizadas, la adición o destrucción de la s variables relevantes que pueden tener un impacto substancial sobre la solución resultante (Conglomerados, 2011)

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.

2.cuadro comparativo

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)

3.Descripción las técnicas disponibles para realizar el análisis de clúster

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.

3.1 Describa las técnicas disponibles para realizar el análisis de clúster, tanto jerárquicas como no jerárquicas.

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.

Reasignación

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.

Búsqueda de densidad

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

Métodos directos

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.

Métodos reductivos

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.

3.2 Incluir una explicación de la librería y sintaxis para implementarla en R.

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.

Análisis de cluster no jerárquico

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.

Análisis de cluster jerárquico disociativo

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.

Análisis de cluster jerárquico aglomerativo

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. Del texto: Kassambara, A. (2017). Practical Guide to Cluster Analysis in R: Unsupervised Machine Learning (Multivariate Analysis) (1st ed.). STHDA, desarrolle los ejemplos presentados en los capítulos: 4,5,6,7,8,9.

Ejercicio Capitulo 4: K-Means Clustering

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()
)

Ejercicio Capitulo 6: CLARA - Agrupación de Grandes Aplicaciones

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()
)

Ejercicio Capitulo 7: Agrupación aglomerativa.

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)

Ejercicio Capitulo 8: Comparacion de Dendrogramas.

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")

Ejercicio Capitulo 9: Visualizando Dendrogramas

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)

BIBLIOGRAFIA

Conglomerados, F. S. A. (2011). Facultad de ciencias económicas y empresariales. Universidad Autónoma de Madrid.
Kassambara, A. (2017). Practical guide to cluster analysis in r: Unsupervised machine learning (Vol. 1). Sthda.
Schiaffino, S. (2018). Clustering. UNIVERSIDAD NACIONAL DEL CENTRO DE LA PROVINCIA DE BUENOS AIRES.