Está en la página 1de 46

UNIVERSIDAD DE EL SALVADOR

FACULTAD MULTIDISCIPLINARIA DE OCCIDENTE

DEPARTAMENTO DE MATEMÁTICA

LICENCIATURA EN ESTADÍSTICA

TÍTULO:

ANÁLISIS DE CONGLOMERADOS UTILIZANDO MÉTODOS


JERÁRQUICOS Y NO JERÁRQUICOS

Autora:
Rebeca Abigail López Rivera

Docente:
Jaime Isaac Peña

SANTA ANA-EL SALVADOR-CENTRO AMÉRICA


OCTUBRE 11
INTRODUCCIÓN
El Análisis de Clusters (o Análisis de conglomerados) es una técnica de Análisis Exploratorio de Datos para
resolver problemas de clasificación. Su objeto consiste en ordenar objetos (personas, cosas, animales, plantas,
variables, etc, . . . ) en grupos (conglomerados o clusters) de forma que el grado de asociación/similitud entre
miembros del mismo cluster sea más fuerte que el grado de asociación/similitud entre miembros de diferentes
clusters. Cada cluster se describe como la clase a la que sus miembros pertenecen.

El análisis de cluster es un método que permite descubrir asociaciones y estructuras en los datos que no son
evidentes a priori pero que pueden ser útiles una vez que se han encontrado. Los resultados de un Análisis de
Clusters pueden contribuir a la definición formal de un esquema de clasificación tal como una taxonomı́a para
un conjunto de objetos, a sugerir modelos estadı́sticos para describir poblaciones, a asignar nuevos
ÍNDICE
1 ANÁLISIS DE CLÚSTER 1
1.1 MÉTODO JÉRARQUICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Ejemplo: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 MÉTODO NO JÉRARQUICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2.1 Ejemplo: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3 CUSTOMIZACIÓN DE DENDOGRAMAS . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.4 LIMITACIONES DEL CLUSTERING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.5 MÉTODO JERÁRQUICO UTILIZANDO DIFERENTEs TIPOS DE DENDOGRAMA
DE LA BASE USArrests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
ÍNDICE DE FIGURAS
1 Dendograma con Linkage completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Dendograma con Linkage completo con cuatro grupos . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Cluster Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4 Determinación del número de clústers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5 Hopkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6 Número óptimo de cluster con wss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7 Número óptimo de cluster con silhouette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8 Número óptimo de cluster gap-stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
9 Dendograma con Linkage completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10 Hierarchical k-means Cluster plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
11 Gráfico del número óptimo de clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
12 Cluster plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
13 Dendograma con representación horizontal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
14 Dendograma con colores que determinan el número de clusters . . . . . . . . . . . . . . . . . . . 34
15 Dendograma circular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
16 Dendrograma en forma de árbol filogenético. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1 ANÁLISIS DE CLÚSTER
El Análisis Clúster , conocido como Análisis de Conglomerados, 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.

Puesto que la utilización del análisis cluster ya implica un desconocimiento o conocimiento incompleto de la
clasificación de los datos, el investigador ha de ser consciente de la necesidad de emplear varios métodos, ninguno
de ellos incuestionable, con el fin de contrastar los resultados.

Nota: El Análisis Cluster es una técnica descriptiva, ateórica y no inferencial.

Existen dos grandes tipos de análisis de clusters:

a) Jerárquicos:
Se denominan jerárquicos a los que configuran grupos con estructura arborescente, de forma que clusters de
niveles más bajos van siendo englobados en otros clusters de niveles superiores.

Objetivo: Agrupar cluster para formar uno nuevo o separar alguno ya existente para dar origen a otros dos de
forma que se maximice una medida de similaridad o se minimice alguna distancia.

Se clasifican en:

• Asociativos o Aglomerativos: Se parte de tantos grupos como individuos hay en el estudio y se van agru-
pando hasta llegar a tener todos los casos en un mismo grupo.

• Disociativos: Se parte de un solo grupo que contiene todos los casos y a través de sucesivas divisiones se
forman grupos cada vez más pequeños.

b) No jerárquicos:

Se conocen como no jerárquicos a aquellos que asignan los casos o grupos diferenciados que el propio análisis
configura, sin que unos dependan de otros. Los métodos no jerárquicos pueden, a su vez, producir clusters
disjuntos (cada caso pertenece sólo a un cluster), o bien clusters solapados (un caso puede pertenecer a más de
un grupo). Estos últimos de difı́cil interpretación, son poco utilizados.

OBJETIVO
Encontrar una partición de los m individuos en c grupos de forma que cada individuo pertenezca aun grupo y
solamente a uno.

ETAPAS DEL ANÁLISIS DE CONGLOMERADOS (CLUSTERS)

• Elección de las variables.


• Elección de la medida de asociación.
• Elección de la técnica Cluster.
• Validación de los resultados.

1
Nota:Es importante considerar si las variables han de estandarizarse para que tengan media 0 y desviación
estándar 1 antes de calcular la similitud entre observaciones, para que cada variable adquiera una importancia
equivalente en el clustering jerárquico, sobre todo si las escalas de medida son distintas. Aplicar o no el escalado
de variables puede depender del problema en cuestión.

Los métodos que se utilizaran son:

AC, siendo un método de data mining bastante popular en muchos campos, existe un gran número de métodos
de clustering, siendo dos de los más conocidos:

• K-means clustering: partición de las observaciones en un número predefinido de clústeres.(Método no


Jerárquico)

• Hierarchical clustering: no partimos de un número predefinido de clústere. Representación de datos en


un dendograma (representación en forma de árbol).(Método Jerárquico)

1.1 MÉTODO JÉRARQUICO


Hierarchical K-means clustering

K-means es uno de los métodos de clustering más utilizados y cuyos resultados son satisfactorios en muchos
escenarios, sin embargo, como se ha explicado en apartados anteriores, sufre las limitaciones de necesitar que se
especifique el número de clusters de antemano y de que sus resultados puedan variar en función de la iniciación
aleatoria. Una forma de contrarrestar estos dos problemas es combinando el K-means con el hierarchical clus-
tering. Los pasos a seguir son los siguientes:

1. Aplicar hierarchical clustering a los datos y cortar el árbol en k clusters. El número óptimo puede elegirse
de forma visual o con cualquiera de los métodos explicados en la sección Número óptimo de clusters.

2. Calcular el centro (por ejemplo, la media) de cada cluster.

3. Aplicar k-means clustering empleando como centroides iniciales los centros calculados en el paso 2.

El algoritmo de K-means tratará de mejorar la agrupación hecha por el hierarchical clustering en el paso 1, de
ahı́ que las agrupaciones finales puedan variar respecto a las iniciales.

1.1.1 Ejemplo:
El set de datos USArrests contiene información sobre el número de delitos (asaltos, asesinatos y secuestros)
junto con el porcentaje de población urbana para cada uno de los 50 estados de USA. Se pretende estudiar si
existe una agrupación subyacente de los estados empleando Hierarchical K-means clustering.

DENDOGRAMA:REPRESENTACIÓN GRÁFICA DE UNA CLASIFICACIÓN JERÁRQUICA


Un dendograma es una representación gráfica en forma de árbol que resume el proceso de agrupación en un

2
análisis de clusters. Los objetos similares se conectan mediante enlaces cuya posición en el diagrama está de-
terminada por el nivel de similitud/disimilitud entre los objetos.

# Importar la base de datos


library(haven)
datos<-read.csv("USArrests.csv")

## Warning in file(file, "rt"): no fue posible abrir el archivo ’USArrests.csv’: No such file
or directory
## Error in file(file, "rt"): no se puede abrir la conexión

head(USArrests,12)

## Murder Assault UrbanPop Rape


## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
## Connecticut 3.3 110 77 11.1
## Delaware 5.9 238 72 15.8
## Florida 15.4 335 80 31.9
## Georgia 17.4 211 60 25.8
## Hawaii 5.3 46 83 20.2
## Idaho 2.6 120 54 14.2

# Visualizar la estructura de la base de datos USArrests


str(USArrests)

## 'data.frame': 50 obs. of 4 variables:


## $ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
## $ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
## $ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
## $ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...

# Como la magnitud de los valores difiere notablemente entre


#variables, se procede a escalarlas antes de aplicar el clustering.
datos <- scale(USArrests)

# La función hkmeans() del paquete factoextra permite aplicar el


#método hierarchical Kmeans clustering.

library(factoextra) # Se obtiene el dendrograma de hierarchical

## Loading required package: ggplot2


## Welcome! Related Books: ‘Practical Guide To Cluster Analysis in R‘ at https://goo.gl/13EFCZ
#clustering para elegir el número de clusters.

3
Height

0
2
4
6
South Dakota
West Virginia

set.seed(101)
North Dakota
Vermont
Maine
Iowa
library(factoextra)

New Hampshire
Idaho
Montana
Nebraska
Kentucky
Arkansas
Virginia
Wyoming
Missouri
Oregon
Washington
Delaware
Rhode Island
Massachusetts
method = "complet")

New Jersey
Connecticut
Minnesota
Wisconsin

4
Oklahoma
Indiana
Kansas
Ohio
Pennsylvania
Hawaii
Utah
Linkage completo
theme(plot.title = element_text(hjust = 0.5, size = 15))

Colorado
California
Nevada
hc_completo <- hclust(d = dist(x = datos, method = "euclidean"),

Florida
Figure 1: Dendograma con Linkage completo

fviz_dend(x = hc_completo, cex = 0.5, main = "Linkage completo")+

Texas
Illinois
New York
Arizona
Michigan
Maryland
New Mexico
Alaska
Alabama
Louisiana
Georgia
Tennessee
North Carolina
Mississippi
South Carolina
Empleando la representación del dendrograma se considera que existen 4 grupos.
Se resaltan los conglomerados; para este caso es de 4.

5
Height

0
2
4
6
South Dakota
West Virginia

set.seed(101)
North Dakota
Vermont
Maine
Iowa
New Hampshire library(factoextra)
Idaho
Montana
Nebraska
datos <- scale(USArrests)

Kentucky
Arkansas
Virginia
Wyoming
Missouri
Oregon
Washington
Delaware
Rhode Island
Massachusetts
New Jersey
Connecticut
Minnesota
Wisconsin

6
Oklahoma
Indiana
Kansas
Ohio
Pennsylvania
Hawaii
Utah
geom_hline(yintercept = 4, linetype = "dashed", lwd=1.4)

Linkage completo

Colorado
theme(plot.title = element_text(hjust = 0.5, size = 15))+

California
Nevada
Florida
Texas
Illinois
New York
fviz_dend(x = hc_completo,k=4, cex = 0.5,main = "Linkage completo") +

Arizona
Michigan
Figure 2: Dendograma con Linkage completo con cuatro grupos

Maryland
New Mexico
Alaska
Alabama
Louisiana
Georgia
Tennessee
North Carolina
Mississippi
South Carolina
Figure 3: Cluster Plot

#Otra forma de visualizar el número de clúster a tomar.


set.seed(101)
hkmeans_cluster <- hkmeans(x = datos, hc.metric = "euclidean",
hc.method = "complete", k = 4)
fviz_cluster(object = hkmeans_cluster, pallete = "jco", repel = TRUE)

Cluster plot

Mississippi
North Carolina
2 South Carolina

West Virginia
Georgia Vermont
Alaska
1 Alabama Arkansas
Louisiana South Dakota
Kentucky
Tennessee cluster
Dim2 (24.7%)

Montana North Dakota a 1

Wyoming a 2
Maryland Maine
New Mexico a 3
Florida Virginia Idaho a 4
0
New Hampshire
Michigan Indiana Nebraska
Missouri Oklahoma Iowa
Kansas
Delaware
Texas Pennsylvania Wisconsin
Illinois Oregon
Arizona Minnesota
Nevada Ohio
New York
−1
Colorado Washington Connecticut

New Jersey Utah


California
Massachusetts Rhode Island
Hawaii
−2 0 2
Dim1 (62%)

+ theme_update() + labs(title = "Hierarchical k-means Cluster plot")

## Error: 7
Cannot use ‘+.gg()‘ with a single argument. Did you accidentally put + on a new
line?
• DETERMINACIÓN DEL NÚMERO DE CLÚSTERS.

8
Figure 4: Determinación del número de clústers

data("USArrests")
datos<-scale(USArrests)
library(factoextra)
fviz_nbclust(datos, kmeans, method = "gap_stat")

Optimal number of clusters


0.35

0.30
Gap statistic (k)

0.25

0.20

0.15

1 2 3 4 5 6 7 8 9 10
Number of clusters k

9
• DETERMINAR EL MEJOR NÚMERO DE CONGLOMERADOS CON NbClust

library("NbClust")
data("USArrests")
set.seed(123)
res.nbclust <- NbClust(datos, distance = "euclidean",
min.nc = 2, max.nc = 10,
method = "complete", index ="all")
0.013

0.0015
0.012

Hubert statistic second differences

0.0010
Hubert Statistic values

0.011

0.0005
0.010
0.009

2 4 6 8 10 2 4 6 8 10

Number of clusters Number of clusters

10
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hube
## index second differences plot.
##
1.3

0.10
1.2

Second differences Dindex Values


1.1
Dindex Values

0.05
1.0
0.9

0.00
0.8

2 4 6 8 10 2 4 6 8 10

Number of clusters Number of clusters

## *** : The D index is a graphical method of determining the number of clusters.


## In the plot of D index, we seek a significant knee (the significant peak in Dinde
## second differences plot) that corresponds to a significant increase of the value
## the measure.

11
##
## *******************************************************************
## * Among all indices:
## * 9 proposed 2 as the best number of clusters
## * 4 proposed 3 as the best number of clusters
## * 6 proposed 4 as the best number of clusters
## * 2 proposed 5 as the best number of clusters
## * 1 proposed 8 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 2
##
##
## *******************************************************************

factoextra::fviz_nbclust(res.nbclust)

## Among all indices:


## ===================
## * 2 proposed 0 as the best number of clusters
## * 1 proposed 1 as the best number of clusters
## * 9 proposed 2 as the best number of clusters
## * 4 proposed 3 as the best number of clusters
## * 6 proposed 4 as the best number of clusters
## * 2 proposed 5 as the best number of clusters
## * 1 proposed 8 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
##
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is 2 .

12
Optimal number of clusters − k = 2

7.5
Frequency among all indices

5.0

2.5

0.0

0 1 10 2 3 4 5 8
Number of clusters k

• VALIDACIÓN:
La validación de clusters es el proceso por el cual se evalúa la veracidad de los grupos obtenidos. A modo
general, este proceso consta de tres partes:
1. Estudio de la tendencia de clustering:
Clustering tendencia evalúa si la aplicación de agrupación es adecuada a sus datos.

∗ Hopkins estadı́stica:
Si el valor de Hopkins estadı́stica está cerca de cero (muy por debajo de 0,5), entonces podemos
concluir que el conjunto de datos es significativamente clusterable.

13
· Primera forma:

14
Figure 5: Hopkins
datos <- scale(USArrests[, -5])
get_clust_tendency(datos, n= 40,gradient = list(low = "steelblue", high = "white"))
## $hopkins_stat
## [1] 0.3440875
##
## $plot

value
6

# n no debe ser mayor al número de muestras

15
· Segunda forma:

library(clustertend)
set.seed(321)
USArrests <- scale(USArrests)
hopkins(USArrests,n=3)
## $H
## [1] 0.4362735

2. Elección del número óptimo de clusters

Determinar el número óptimo de clusters es uno de los pasos más complicados a la hora de aplicar
métodos de clustering, sobre todo cuando se trata de partitioning clustering, donde el número se
tiene que especificar antes de poder ver los resultados.

No existe una forma única de averiguar el número adecuado de clusters. Es un proceso bastante sub-
jetivo que depende en gran medida del tipo de clustering empleado y de si se dispone de información
previa sobre los datos con los que se está trabajando, por ejemplo, estudios anteriores pueden sugerir
o acotar las posibilidades. A pesar de ello, se han desarrollado varias estrategias que ayudan en el
proceso.

∗ Elbow method

El método Elbow sigue una estrategia comúnmente empleada para encontrar el valor óptimo de
un parámetro. La idea general es probar un rango de valores del parámetro en cuestión, repre-
sentar gráficamente los resultados obtenidos con cada uno e identificar aquel punto de la curva
a partir del cual la mejora deja de ser sustancial (principio de verosimilitud). En los casos de
partitioning clustering, como por ejemplo K-means, las observaciones se agrupan de una forma
tal que se minimiza la varianza total intra-cluster.

16
Figure 6: Número óptimo de cluster con wss
library(factoextra)
datos <- scale(USArrests)
fviz_nbclust(x = datos, FUNcluster = kmeans, method = "wss")

Optimal number of clusters


200

150
Total Within Sum of Square

100

50

1 2 3 4 5 6 7 8 9 10
Number of clusters k

+ labs(title = "Número óptimo de clusters")


## Error in +labs(title = "Número óptimo de clusters"): argumento no válido para un
operador unitario

17
∗ Average silhouette method

El método de average silhouette es muy similar al de Elbow, con la diferencia de que, en lugar
minimizar el total inter-cluster sum of squares (wss), se maximiza la media de los silhouette
coeficient (). Este coeficiente cuantifica cómo de buena es la asignación que se ha hecho de una
observación comparando su similitud con el resto de observaciones de su cluster frente a las de
los otros clusters. Su valor puede estar entre -1 y 1, siendo valores altos un indicativo de que la
observación se ha asignado al cluster correcto.

18
Figure 7: Número óptimo de cluster con silhouette
library(factoextra)
datos <- scale(USArrests)
fviz_nbclust(x = datos, FUNcluster = kmeans, method = "silhouette")

Optimal number of clusters

0.4

0.3
Average silhouette width

0.2

0.1

0.0

1 2 3 4 5 6 7 8 9 10
Number of clusters k

+ labs(title = "Número óptimo de clusters")


## Error in +labs(title = "Número óptimo de clusters"): argumento no válido para un
operador unitario

19
∗ Gap statistic method

El estadı́stico gap fue publicado por R.Tibshirani, G.Walther y T. Hastie, autores también del
magnı́fico libro Introduction to Statistical Learning. Este estadı́stico compara, para diferentes
valores de k, la varianza total intra-cluster observada frente al valor esperado acorde a una dis-
tribución uniforme de referencia. La estimación del número óptimo de clusters es el valor k con
el que se consigue maximizar el estadı́stico gap, es decir, encuentra el valor de k con el que se
consigue una estructura de clusters lo más alejada posible de una distribución uniforme aleatoria.
Este método puede aplicarse a cualquier tipo de clustering.

20
Figure 8: Número óptimo de cluster gap-stat
library(factoextra)
datos <- scale(USArrests)
fviz_nbclust(x = datos, FUNcluster = kmeans,
method = "gap_stat", nboot = 500,
verbose = FALSE, nstart = 25) +
labs(title = "Número óptimo de clusters")

Número óptimo de clusters

0.30
Gap statistic (k)

0.25

0.20

0.15

1 2 3 4 5 6 7 8 9 10
Number of clusters k

21
• ¿CÓMO ELEGIR LOS ALGORITMOS DE AGRUPACIÓN APROPIADOS PARA SUS DATOS?

datos <- scale(USArrests)


library("clValid")

## Loading required package: cluster

intern <- clValid(datos, nClust = 2:6,


clMethods = c("hierarchical","kmeans","pam",'clara'),
validation = "internal")
# Summary
summary(intern)

##
## Clustering Methods:
## hierarchical kmeans pam clara
##
## Cluster sizes:
## 2 3 4 5 6
##
## Validation Measures:
## 2 3 4 5 6
##
## hierarchical Connectivity 6.6437 9.5615 13.9563 22.5782 31.2873
## Dunn 0.2214 0.2214 0.2224 0.2046 0.2126
## Silhouette 0.4085 0.3486 0.3637 0.3213 0.2720
## kmeans Connectivity 6.6437 13.6484 16.2413 24.6639 33.7194
## Dunn 0.2214 0.2224 0.2224 0.1983 0.2231
## Silhouette 0.4085 0.3668 0.3573 0.3377 0.3079
## pam Connectivity 6.6437 13.8302 20.4421 29.5726 38.2643
## Dunn 0.2214 0.1376 0.1849 0.1849 0.2019
## Silhouette 0.4085 0.3144 0.3390 0.3105 0.2630
## clara Connectivity 6.6437 13.8302 20.4421 29.5726 38.2643
## Dunn 0.2214 0.1376 0.1849 0.1849 0.2019
## Silhouette 0.4085 0.3144 0.3390 0.3105 0.2630
##
## Optimal Scores:
##
## Score Method Clusters
## Connectivity 6.6437 hierarchical 2
## Dunn 0.2231 kmeans 6
## Silhouette 0.4085 hierarchical 2

• TOMANDO DOS CLUSTER

22
Height

0
2
4
6
South Dakota
West Virginia
North Dakota
Vermont
Maine
data("USArrests")
Iowa
New Hampshire
Idaho
Montana
Nebraska
Kentucky
Arkansas
Virginia
Wyoming
Missouri
Oregon
Washington
Delaware
main = "Linkage completo") +

Rhode Island
Massachusetts
New Jersey
Connecticut
Minnesota
Wisconsin

23
Oklahoma
Indiana
Kansas
Ohio
Pennsylvania
Hawaii
Utah
geom_hline(yintercept = 5, linetype = "dashed", lwd=1.4)

Linkage completo

Colorado
theme(plot.title = element_text(hjust = 0.5, size = 15))+

California
Nevada
Florida
Figure 9: Dendograma con Linkage completo

Texas
Illinois
New York
fviz_dend(x = hc_completo,k=2, cex = 0.5, k_colors=c("orange","blue"),

Arizona
Michigan
Maryland
New Mexico
Alaska
Alabama
Louisiana
Georgia
Tennessee
North Carolina
Mississippi
South Carolina
Figure 10: Hierarchical k-means Cluster plot

data("USArrests")
hkmeans_cluster <- hkmeans(x = datos, hc.metric = "euclidean",
hc.method ="complete", k = 2)
fviz_cluster(object = hkmeans_cluster, pallete = "jco", repel = TRUE)

Cluster plot
Mississippi
North Carolina

2 South Carolina

West Virginia
Georgia Vermont
Alaska
1 Alabama Arkansas
Louisiana South Dakota
Kentucky
Tennessee
Dim2 (24.7%)

North Dakota
Montana cluster
Maine a 1
Maryland Wyoming
New Mexico a 2
Florida Virginia Idaho
New Hampshire
0
Michigan Indiana Nebraska
Missouri Oklahoma Iowa
Kansas
Delaware
Texas Pennsylvania Wisconsin
Arizona Illinois Oregon
Nevada Minnesota
Ohio
New York
−1
Colorado Washington Connecticut

New Jersey Utah


California
Massachusetts Rhode Island
Hawaii
−2 0 2
Dim1 (62%)

+theme_update()+labs(title = "Hierarchical k-means Cluster plot")

## Error: Cannot use ‘+.gg()‘ with a single argument. Did you accidentally put + on a new
24
line?
1.2 MÉTODO NO JÉRARQUICO
K-means clustering

El método de K-means clustering es un método no jerárquico para agrupar objetos (no variables) que particiona
el set de datos en K clústeres distintos y no solapantes, lo que significa que ninguna observación puede pertenecer
a más de un clúster. El número de clústeres o subgrupos requeridos se ha de establecer al inicio (con lo que es
importante tener un buen conocimiento de los datos).

Siendo C1 , ..., Ck el número de sets, la varianza intra-clúster para el clúster Ck es una medida W (Ck ) de la
cantidad que difieren las observaciones dentro del mismo. Por tanto, se busca minimizar:
K
X
W (Ck )
k=1

De manera que la varianza total dentro de cada clúster, sumada sobre todos los K clústeres, sea lo más pequeña
posible. Una forma común de establecer esta varianza es mediante la distancia euclı́dea, con lo que obtenemos

p
X X
W (Ck ) = 1
|Ck | (Xij − Xij )2
i,i∈CK j=1

siendo | Ck | el número de observaciones en el k-ésimo clúster. De esta manera la varianza se mide como la
suma de todas las distancias euclı́deas al cuadrado entre pares de observaciones del clúster k, dividido por el
número total de observaciones en ese mismo clúster.

Ventajas y desventajas:

K-means es uno de los métodos de clustering más utilizados. Destaca por la sencillez y velocidad de su algo-
ritmo, sin embargo, presenta una serie de limitaciones que se deben tener en cuenta.

1. Requiere que se indique de antemano el número de clusters que se van a crear. Esto puede ser complicado
si no se dispone de información adicional sobre los datos con los que se trabaja. Una posible solución es
aplicar el algoritmo para un rango de valores k y evaluar con cual se consiguen mejores resultados, por
ejemplo, menor suma total de varianza interna.

2. Las agrupaciones resultantes pueden variar dependiendo de la asignación aleatoria inicial de los centroides.
Para minimizar este problema se recomienda repetir el proceso de clustering entre 20 - 50 veces y selec-
cionar como resultado definitivo el que tenga menor suma total de varianza interna. Aun ası́, no se
garantiza que para un mismo set de datos los resultados sean exactamente iguales.

3. Presenta problemas de robustez frente a outliers. La única solución es excluirlos o recurrir a otros métodos
de clustering más robustos como K-medoids (PAM).

25
1.2.1 Ejemplo:
Si se emplea K-means-clustering con distancia euclı́dea hay que asegurarse de que las variables empleadas son
de tipo continuo, ya que trabaja con la media de cada una de ellas.

data("USArrests")
str(USArrests)

## 'data.frame': 50 obs. of 4 variables:


## $ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
## $ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
## $ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
## $ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...

datos <- scale(USArrests)

Una forma sencilla de estimar el número K óptimo de clusters cuando no se dispone de información adicional
en la que basarse es aplicar el algoritmo para un rango de valores de K, identificando aquel a partir del cual
la reducción en la suma total de varianza intra-cluster deja de ser sustancial (en los siguientes apartados se
detallan otras opciones). La función fviz-nbclust() automatiza este proceso.

26
Figure 11: Gráfico del número óptimo de clusters

library(factoextra)
fviz_nbclust(x = datos, FUNcluster = kmeans, method = "wss",
diss = dist(datos, method = "euclidean"))+
geom_vline(xintercept = 4, linetype = 2)

Optimal number of clusters


200

150
Total Within Sum of Square

100

50

1 2 3 4 5 6 7 8 9 10
Number of clusters k

En este caso, a partir de 4 clusters la reducción en la suma total de cuadrados internos parece estabilizarse,

27
indicando que K = 4 es una buena opción.

set.seed(123)
km_clusters <- kmeans(x = datos, centers = 4, nstart = 25)

El paquete factoextra también permite obtener visualizaciones de las agrupaciones resultantes. Si el número
de variables (dimensionalidad) es mayor de 2, automáticamente realiza un PCA y representa las dos primeras
componentes principales.

28
Figure 12: Cluster plot

fviz_cluster(object = km_clusters, data = datos, show.clust.cent = TRUE,


ellipse.type = "euclid", star.plot = TRUE, repel = TRUE)

Cluster plot

Mississippi

North Carolina
2
South Carolina

West Virginia
Georgia Vermont
Alaska Arkansas
1 Alabama Kentucky
Louisiana
Tennessee South Dakota cluster
Dim2 (24.7%)

Montana North Dakota


a 1
Maine
Maryland Wyoming a 2
Idaho
New Mexico a 3
Florida Virginia New Hampshire
0 a 4
Michigan Indiana Nebraska
Missouri Oklahoma Iowa
Kansas
Delaware
Texas Pennsylvania Wisconsin
Arizona Illinois Oregon
Minnesota
Nevada Ohio
New York
−1 Washington Connecticut
Colorado

New Jersey Utah Rhode Island


Massachusetts
California Hawaii

−2 0 2
Dim1 (62%)

+ theme_bw() + theme(legend.position = "none")

## Error: Cannot use ‘+.gg()‘ with a single argument. Did you accidentally put + on a new
line?
29
1.3 CUSTOMIZACIÓN DE DENDOGRAMAS
A continuación se muestra cómo visualizar y customizar dendrogramas utilizando las funciones fvizd end() del
paquete factoextra y varias funciones del paquete dendextend.

library(factoextra)
library(dendextend)

##
## ---------------------
## Welcome to dendextend version 1.12.0
## Type citation(’dendextend’) for how to cite the package.
##
## Type browseVignettes(package = ’dendextend’) for the package vignette.
## The github page is: https://github.com/talgalili/dendextend/
##
## Suggestions and bug-reports can be submitted at: https://github.com/talgalili/dendextend/issues
## Or contact: <tal.galili@gmail.com>
##
## To suppress this message use: suppressPackageStartupMessages(library(dendextend))
## ---------------------
##
## Attaching package: ’dendextend’
## The following object is masked from ’package:stats’:
##
## cutree

# Creación de un dendrograma con los datos de USArrests


datos <- USArrests
mat_distancia <- dist(datos, method = "euclidean")
hc_average <- hclust(d = mat_distancia, method = "average")

# Representación básica del dendrograma


set.seed(5665)
fviz_dend(x = hc_average,
cex = 0.5,
main = "Dendrograma - ward",
xlab = "observaciones",
ylab = "distancia",
sub = "")

30
distancia

0
50
100
150
Florida
North Carolina
California
Maryland
Arizona
New Mexico
Delaware
Alabama
Louisiana
Illinois

Representación Horizontal
New York
Michigan
Dendrograma − ward

Nevada
Alaska
Mississippi
South Carolina
Washington
Oregon
Wyoming
Oklahoma
Virginia
Rhode Island
Massachusetts

31
New Jersey
Missouri
Arkansas
Tennessee
Georgia
Colorado

observaciones
Texas
Idaho
Nebraska
Kentucky
Montana
Ohio
Utah
Indiana
Kansas
Connecticut
Pennsylvania
Hawaii
West Virginia
Maine
South Dakota
North Dakota
Vermont
Minnesota
Wisconsin
Iowa
New Hampshire
Figure 13: Dendograma con representación horizontal

fviz_dend(x = hc_average,
cex = 0.5,
main = "Dendrograma - ward",
xlab = "observaciones",
ylab = "distancia",
sub = "",
horiz = TRUE)

Dendrograma − ward

New Hampshire
Iowa
Wisconsin
Minnesota
Vermont
North Dakota
South Dakota
Maine
West Virginia
Hawaii
Pennsylvania
Connecticut
Kansas
Indiana
Utah
Ohio
Montana
Kentucky
Nebraska
Idaho
Texas
observaciones

Colorado
Georgia
Tennessee
Arkansas
Missouri
New Jersey
Massachusetts
Rhode Island
Virginia
Oklahoma
Wyoming
Oregon
Washington
South Carolina
Mississippi
Alaska
Nevada
Michigan
New York
Illinois
Louisiana
Alabama
Delaware
New Mexico
Arizona
Maryland
California
North Carolina
Florida

150 100 50 0
distancia

32
Cortar el dendrograma y asignar un color distinto a cada cluster.

33
Figure 14: Dendograma con colores que determinan el número de clusters

set.seed(5665)
fviz_dend(x = hc_average,
k = 4,
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE,
rect = TRUE,
rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
rect_fill = TRUE,
cex = 0.5,
main = "Dendrograma - ward",
xlab = "observaciones",
ylab = "distancia",
sub = "")

## Warning in if (color == "cluster") color <- "default": la condición tiene longitud > 1 y
sólo el primer elemento será usado

Dendrograma − ward

150

100
distancia

50

34
0
Florida
North Carolina
California
Maryland
Arizona
New Mexico
Delaware
Alabama
Louisiana
Illinois
New York
Michigan
Nevada
Alaska
Mississippi
South Carolina
Washington
Oregon
Wyoming
Oklahoma
Virginia
Rhode Island
Massachusetts
New Jersey
Missouri
Arkansas
Tennessee
Georgia
Colorado
Texas
Idaho
Nebraska
Kentucky
Montana
Ohio
Utah
Indiana
Kansas
Connecticut
Pennsylvania
Hawaii
West Virginia
Maine
South Dakota
North Dakota
Vermont
Minnesota
Wisconsin
Iowa
New Hampshire

observaciones
Dendrograma circular.

35
Figure 15: Dendograma circular

set.seed(5665)
fviz_dend(x = hc_average,
k = 4,
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE,
cex = 0.5,
type = "circular")

New Hampshire

olina
Nor th Car
Wisc

Florida

rnia
Min

Iowa
onsin

d
Califo

lan
nes

ry
Ve

ota
No

Ma

na
rm
r th

o
zo
on

xic
Ari
Da

Me
t
So

ko
ut

w
ta
h

Ne
D

e
ar
ak

aw
ot
a

el
D
M a
ain
We e am
ab
st
Vir Al
gin na
ia
u isia
Lo
Ha
wa
ii
ois
Illin
Penn
s ylvan
ia
York
New
Connec
ti cut
n
Michiga

Kansas
Nevada

Indiana
Alaska

Utah
Missis
sippi
o
Ohi Sou
th Car
olin
a
na
nta Wa
Mo sh ing
ton
c ky Or
ntu eg
Ke on
ka W
as yo
br m
Ne in
g
o
ah

O
Id

kla
s

ho
xa

Vir

m
Te

a
g
do

ini
Rh
lora

a
rgia

ode
Mas
see
Co

New J
Arkansas

Missouri
Geo

Isla
sach
s
Tenne

nd
ersey

use
tts

36
Dendrograma en forma de árbol filogenético.

37
Figure 16: Dendrograma en forma de árbol filogenético.

library("igraph")

##
## Attaching package: ’igraph’
## The following object is masked from ’package:clValid’:
##
## clusters
## The following objects are masked from ’package:stats’:
##
## decompose, spectrum
## The following object is masked from ’package:base’:
##
## union
set.seed(5665)
fviz_dend(x = hc_average,
k = 4,
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE,
cex = 0.8,
type = "phylogenic",
repel = TRUE)

Texas Montana
Arizona Arkansas Colorado Virginia
Kentucky
New Mexico
Tennessee
Maryland Nebraska Wyoming Oklahoma
Georgia
South Carolina Oregon
Missouri
Washington
Illinois Mississippi
California Idaho
Alaska New Jersey
New York

Nevada Rhode Island Massachusetts


Michigan

Delaware Florida
Ohio
Alabama
North Carolina
Louisiana Utah
Pennsylvania
Connecticut
Indiana
Hawaii Kansas

38 West Virginia

Maine
North Dakota South Dakota
Vermont

Minnesota

Wisconsin

New Hampshire
1.4 LIMITACIONES DEL CLUSTERING
El clustering puede ser una herramienta muy útil para encontrar agrupaciones en los datos, sobre todo a me-
dida que el volumen de los mismos aumenta. Sin embargo, es importante recordar algunas de sus limitaciones
o problemas que pueden surgir al aplicarlo.

1. Pequeñas decisiones pueden tener grandes consecuencias: A la hora de utilizar los métodos de
clustering se tienen que tomar decisiones que influyen en gran medida en los resultados obtenidos. No
existe una única respuesta correcta, por lo que en la práctica se prueban diferentes opciones.

– Escalado y centrado de las variables

– Qué medida de distancia/similitud emplear

– Número de clusters

– Tipo de linkage empleado en hierarchical clustering

– A que altura establecer el corte de un dendrograma

2. Validación de los clusters obtenidos: No es fácil comprobar la validez de los resultados ya que en la
mayorı́a de escenarios se desconoce la verdadera agrupación.

3. Falta de robustez: Los métodos de K-means-clustering e hierarchical clustering asignan obligatoria-


mente cada observación a un grupo. Si existe en la muestra algún outlier, a pesar de que realmente no
pertenezca a ningún grupo, el algoritmo lo asignará a uno de ellos provocando una distorsión significativa
del cluster en cuestión. Algunas alternativas son k-medoids y DBSCAN.

4. La naturaleza del algoritmo de hierarchical clustering conlleva que, si se realiza una mala división en los
pasos iniciales, no se pueda corregir en los pasos siguientes.

1.5 MÉTODO JERÁRQUICO UTILIZANDO DIFERENTEs TIPOS DE DEN-


DOGRAMA DE LA BASE USArrests

data("USArrests")
names(USArrests)

## [1] "Murder" "Assault" "UrbanPop" "Rape"

datos<-scale(USArrests)
# Matriz distancia euclı́dea entre observaciones
datos.nci.euc <- dist(datos, method = "euclidean")

39
0 1 2 3 4 5 6

South Dakota

sub = "")
cex = 0.3,
ylab = "",
xlab = "",
West Virginia
North Dakota
Vermont
Maine
Iowa
New Hampshire
Idaho
Montana
Nebraska
Kentucky
Arkansas
main = "Complete linkage",
labels = USArrests$murder,

Virginia
Wyoming
Missouri
Oregon
Washington
Delaware
Rhode Island
Massachusetts
New Jersey
Connecticut
Minnesota
Wisconsin

40
plot(hclust(datos.nci.euc, method = "complete"),

Oklahoma
Indiana
Kansas
Ohio
Pennsylvania
Hawaii
Utah
Colorado
Complete linkage

California
Nevada
Florida
Texas
Illinois
New York
Arizona
Michigan
Maryland
New Mexico
Alaska
Alabama
Louisiana
Georgia
Tennessee
North Carolina
Mississippi
South Carolina
0.0 0.5 1.0 1.5 2.0 2.5 3.0

North Dakota

sub = "")
cex = 0.3,
ylab = "",
xlab = "",
Maine
Iowa
New Hampshire
Vermont
South Dakota
West Virginia
Delaware
Rhode Island
Massachusetts
New Jersey
Arkansas
main = "Average linkage",
labels = USArrests$murder,

Kentucky
Connecticut
Minnesota
Wisconsin
Idaho
Montana
Nebraska
Wyoming
Virginia
Oklahoma
Indiana
Kansas
plot(hclust(datos.nci.euc, method = "average"),

41
Ohio
Pennsylvania
Hawaii
Utah
Oregon
Washington
Alaska
Georgia
Average linkage

Tennessee
Alabama
Louisiana
North Carolina
Mississippi
South Carolina
California
Nevada
Florida
Colorado
Missouri
Texas
Illinois
New York
Arizona
Michigan
Maryland
New Mexico
0.0 0.5 1.0 1.5 2.0

Alaska

sub = "")
cex = 0.4,
ylab = "",
xlab = "",
Florida
California
Nevada
North Carolina
Mississippi
South Carolina
Georgia
Tennessee
Alabama
Louisiana
main = "Single linkage",
labels = USArrests$labs,

Colorado
Delaware
Hawaii
Arkansas
Vermont
Missouri
Connecticut
Kentucky
South Dakota
West Virginia
Idaho
Montana
plot(hclust(datos.nci.euc, method = "single"),

North Dakota

42
Wyoming
Ohio
Maine
Iowa
New Hampshire
Minnesota
Wisconsin
Single linkage

Virginia
Pennsylvania
Nebraska
Oklahoma
Indiana
Kansas
Rhode Island
Utah
Oregon
Washington
Massachusetts
New Jersey
Texas
Illinois
New York
Arizona
Michigan
Maryland
New Mexico

También podría gustarte