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

Es una técnica de machine learning no supervisado, no tiene etiquetas previas sobre en qué grupo debe ir cada observación, el algoritmo “aprende” cómo agrupar. El objetivo es descubrir patrones o grupos (clusters o conglomerados) de objetos similares dentro de un conjunto de datos multivariado, estos grupos deben tener alta homogeneidad interna (que los elementos en un mismo clúster sean lo más parecidos posible) y gran heterogeneidad externa (que los distintos clústeres sean lo más diferentes posible entre sí)

2 Elabore un cuadro comparativo, que incluya los siguientes elementos:


Análisis de

Clúster

Técnicas

disponibles

Ventajas

Desventajas

Jerárquico:

Es un método de agrupamiento no supervisado que construye una estructura jerárquica de grupos, representada mediante un dendrograma.

El objetivo es ir formando clústeres paso a paso.

Métodos aglomerativos

Comienzan con cada observación como un clúster y los van fusionando.

Métodos divisivos

Inician con un solo clúster y lo dividen paso a paso.

  • No requiere especificar el número de clústeres al inicio
  • Produce un dendrograma
  • Permite ver estructuras en diferentes niveles
  • Funciona bien con datos pequeños o medianos
  • No es eficiente para bases de datos grandes
  • Las decisiones tempranas son irreversibles
  • Sensible al método de enlace y a la distancia
  • Sensible a outliers

No jerárquico:

Son métodos de agrupamiento que no construyen una jerarquía, sino que particionan directamente los datos en un número fijo de clústeres.

Estos métodos requieren especificar k, el número de clústeres deseado.

El objetivo es encontrar una partición que minimice la distancia dentro del clúster y maximice la distancia entre clústeres.

Técnicas de partición

K-means

K-medoids (PAM)

CLARA

Técnicas de clustering avanzado

Fuzzy clustering

Model-based clustering

Density-based (DBSCAN)

  • Muy eficiente con grandes bases de datos
  • Rápido en términos computacionales
  • Menos afectado por errores iniciales (algunos métodos)
  • Fácil de interpretar cuando los clústeres son esféricos
  • PAM y CLARA son robustos frente a outliers
  • Hay que definir el número de clústeres (k) al inicio
  • Sensibilidad a la posición inicial de los centroides
  • K-means es sensible a outliers y valores extremos
  • Solo funciona bien con clústeres esféricos o similares en tamaño
  • No produce dendrograma ni estructura jerárquica

Fuente: elaboración propia con base en Kassambara, 2017.

3 Describa 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 TÉCNICAS JERÁRQUICAS

3.2 Métodos aglomerativos

Parten de cada observación como clúster y los van uniendo.

3.2.1 A) Single Linkage

Une clústeres midiendo la distancia mínima entre puntos. Puede generar el “efecto cadena”.

3.2.2 B) Complete Linkage

Usa la distancia máxima entre puntos. Produce clústeres más compactos.

3.2.3 C) Average Linkage (UPGMA)

Usa el promedio de distancias entre puntos de los clústeres.

3.2.4 D) Centroid Linkage

Usa la distancia entre los centroides de los clústeres.

3.2.5 E) Método de Ward (Ward D / Ward D2)

Minimiza la variación dentro del clúster. Es el preferido por Kassambara para datos cuantitativos.

3.2.6 Librerias en R:

stats (función hclust) factoextra (visualización, función fviz_dend)

3.3 Metodos divisivos

3.3.1 DIANA

Comienza con todas las observaciones en un solo grupo. Las divide sucesivamente buscando maximizar diferencias.

3.3.2 Librería en R:

cluster

3.4 Sintaxis:

r library(cluster) diana_res <- diana(datos) fviz_dend(diana_res)

3.5 TÉCNICAS NO JERÁRQUICAS

3.5.1 A) K-means Clustering (centroid-based)

Método más popular y detallado en el libro. Minimiza la suma de cuadrados dentro de cada clúster. Sensible a valores atípicos.

3.5.2 Librerías en R:

stats (kmeans) factoextra (visualización)

Sintaxis:

r set.seed(123) km <- kmeans(datos, centers = 3, nstart = 25)

fviz_cluster(km, data = datos)

3.5.3 B) PAM (Partitioning Around Medoids)

Similar a k-means, pero usa medoides (menos sensible a outliers). Recomendado si hay valores extremos.

3.5.4 Librería en R:

cluster

3.5.5 Sintaxis:

r library(cluster) pam_res <- pam(datos, k = 3)

fviz_cluster(pam_res)

3.5.6 V)CLARA (Clustering Large Applications)

Versión optimizada de PAM para grandes bases de datos. Muestra pequeñas muestras para reducir costo computacional.

3.5.7 Librería en R:

cluster

3.5.8 Sintaxis:

r clara_res <- clara(datos, k = 3) fviz_cluster(clara_res)

4 Del texto: Kassambara, A. (2017). Practical Guide to Cluster Analysis in R: Unsupervised Machine Learning (Multivariate Analysis) (1st ed.). STHDA, disponible en: https://xsliulab.github.io/Workshop/week10/r-cluster-book.pdf, desarrolle los ejemplos presentados en los capítulos: 4,5,6,7,8,9.

4.1 Capitulo 4:

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
x <- scale(USArrests)  

kmeans(x, centers=4, iter.max = 10, nstart = 1)
## K-means clustering with 4 clusters of sizes 13, 13, 16, 8
## 
## Cluster means:
##       Murder    Assault   UrbanPop        Rape
## 1  0.6950701  1.0394414  0.7226370  1.27693964
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 -0.4894375 -0.3826001  0.5758298 -0.26165379
## 4  1.4118898  0.8743346 -0.8145211  0.01927104
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              4              1              1              4              1 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              1              3              3              1              4 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              3              2              1              3              2 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              3              2              4              2              1 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              3              1              2              4              1 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              2              2              1              2              3 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              1              1              4              2              3 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              3              3              3              3              4 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              2              4              1              3              2 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              3              3              2              2              3 
## 
## Within cluster sum of squares by cluster:
## [1] 19.922437 11.952463 16.212213  8.316061
##  (between_SS / total_SS =  71.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
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
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$size
## [1]  8 13 16 13
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.2 Capitulo 5:

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.3 Capitulo 6:

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

4.4 Capitulo 7:

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
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
res.hc <- hclust(d = res.dist, method = "ward.D2")
res.coph <- cophenetic(res.hc)

# Correlacion entre distancia cofenética y la distancia original
cor(res.dist, res.coph)
## [1] 0.6975266
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382
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"
library("cluster")

# Anidación aglomerativa (agrupacion jerarquica)

res.agnes <- agnes(
  x = USArrests,
  
  # Matriz de datos
  stand = TRUE,
  
  # Estandarizar los datos
  metric = "euclidean",
  
  # Metrica para matriz de distancia
  method = "ward" # Metodo de vinculación
)

# Agrupacion de análisis visual

res.diana <-diana(x = USArrests, # Matriz de datos
                  stand = TRUE, # estandarizar los datos
                  metric = "euclidean" # Métrica para matruz de distancia
                  )

5 Bibliografia

https://drive.google.com/file/d/1RuTzvWoCQrgslRanEP4dMpEnV-PkaX9F/view Kassambara, A., & Kassambara, A. (n.d.). Practical guide to cluster analysis in R edition 1 sthda.com unsupervised machine learning.