This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
#—-
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
#Agrupación de K-Means———————————————————
#La agrupación en clústeres de K-medias (MacQueen, 1967) es el algoritmo #de aprendizaje automático no supervisado más utilizado para dividir un #conjunto de datos dado en un conjunto de k grupos (es decir, k clústeres). #donde k representa el número de grupos especificado por el analista. #Agrupando k-medias. Cada grupo está representado por un centro (centroide) #que es el promedio de los puntos asociados con el grupo
#En este artículo, describiremos el algoritmo k-means y brindaremos ejemplos #prácticos usando el software R.
#K-significa ideas básicas—————————————————–
#La idea básica detrás del agrupamiento de k-medias es definir los #clústeres de tal manera que la variación total dentro del clúster se minimice. #Hay varios algoritmos de k-medias disponibles. El algoritmo estándar es el #algoritmo de Hartigan-Wong (1979), que define la variación total dentro del #grupo como la suma de las distancias euclidianas al cuadrado entre los #elementos y sus centroides correspondientes.
W(C_k)=(x_i-_k)^2$
#xi diseña un punto de datos perteneciente al clusterCk #μk es el valor medio de los puntos asignados al clusterCk
#Definimos la variación total dentro del conglomerado de la siguiente manera:
#Definimos la variación total dentro de un cúlster así:
tot.withinss={k=1}^{k}W(C{k})={k=1}^{k}{x_{i}{k}}(x{i}-_{k})^{2}$
#La suma total de cuadrados dentro del grupo mide la compacidad del #agrupamiento y queremos que sea lo más pequeño posible.
#El algoritmo comienza seleccionando aleatoriamente k objetos del conjunto #de datos para que sirvan como centros iniciales de los grupos. Después del #paso de asignación, el algoritmo calcula nuevas medias para cada grupo. #Todos los objetos se reasignarán utilizando los medios de clúster actualizados. #El algoritmo de K-medias se puede resumir de la siguiente manera:
#1. Especifique la cantidad de clústeres (K) para crear (del analista)
#2. Seleccione aleatoriamente k objetos del conjunto de datos como centros #o medios del grupo inicial.
#3. Relacione cada observación con el centroide más cercano basado en Euclides #y la distancia entre el objeto y el centroide.
#4. Para cada uno de los k conglomerados, calcule la nueva media de todos los #puntos de datos en el conglomerado para actualizar los centroides del #conglomerado. El centoide del grupo k-ésimo es un vector de longitud p que #contiene las medias de todas las variables para las observaciones en el grupo #k-ésimo. es el número de variables.
#5. Minimice iterativamente la suma dentro de la suma de los cuadrados. #Por lo tanto, repita los pasos 3 y 4 hasta que la asignación del clúster #deje de cambiar o se alcance el número máximo de iteraciones. De manera #predeterminada, el software R usa 10 como el número máximo predeterminado #de iteraciones.
#Datos———————-
#Utilice el registro de demostración “USArrests”. #Los datos deben procesarse como se describe en el Capítulo 2. #Dado que el algoritmo k-means usa promedios móviles, los datos #deben contener solo variables continuas. No queremos que el algoritmo #k-means dependa de la variable de la unidad, así que comencemos a escalar #los datos usando la función Rscale() de la siguiente manera:
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
#La función R estándar para el agrupamiento de k-means iskmeans()[statspackage], #cuyo formato simplificado es el siguiente:
#x: matriz numérica, marco de datos numérico o vector numérico
#Centros: Los valores posibles son el número de conglomerados (k) #o un conjunto de centros de conglomerados iniciales (únicos). #valores numéricos, se elige un conjunto aleatorio de filas #(distinguibles) de x como centros iniciales.
#iter.max: Número máximo de iteraciones permitidas. #El valor predeterminado es 10.
#nstart - número de particiones de arranque aleatorias centradas en números. #En la mayoría de los casos, se recomienda probar nstart > 1.
#Para crear un hermoso gráfico de los clústeres generados #con la función kmeans(), usará el paquete factoextra.
#Instalando factoextrapackage como:
#Cargando factoextra:
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.2.2
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
#La agrupación en clústeres de K-Means requiere que el usuario especifique #la cantidad de clústeres que se generarán. La pregunta básica es: ¿Cómo #elegir el número apropiado de conglomerados esperados (k)?
#La posición de la curva (rodilla) en el gráfico suele tomarse como una #indicación de un buen número de conglomerados. La función R fviz_nbclust() #[en realidad un paquete adicional] proporciona una solución conveniente #para estimar la cantidad óptima de clústeres. eso es todo.
library(factoextra)
fviz_nbclust(df, kmeans,method ="wss")+geom_vline(xintercept =4,linetype =2)
#El gráfico anterior representa la varianza dentro de los grupos. #Disminuye a medida que aumenta k, pero se puede ver una curva (o “codo”) #en k = 4. Esta curva indica que los grupos adicionales más allá del cuarto #tienen poco valor. En la siguiente sección, clasificaremos las observaciones #en 4 grupos.
#Como el algoritmo de agrupamiento de k-medias comienza con k centroides #seleccionados aleatoriamente, siempre se recomienda usar la función set.seed() #para establecer una semilla para el valor aleatorio de R.
set.seed(123)
#CLUSTERING DE K-MEDIAS EN R———————————————–
#generador de números El objetivo es hacer que los resultados sean #reproducibles, de modo que el lector de este artículo obtenga exactamente #los mismos resultados que los que se muestran a continuación:
km.res <-kmeans(df,4,nstart =25)
#Especificamos nstart = 25 porque el resultado final del agrupamiento de #k-medias está sujeto a asignaciones iniciales aleatorias. Agrupamiento. #El valor predeterminado de nstartin R es 1. Sin embargo, se recomienda #enfáticamente calcular la agrupación de k-medias con un valor grande de nstart.
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"
#Es posible calcular la media de cada una de las variables por clusters #utilizando los datos originales:
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
#Si desea agregar las clasificaciones de puntos a los datos originales, #use esto:
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
#La función kmeans() devuelve una lista de componentes, que incluye:
#cluster: Un vector de enteros (desde 1:k) que indica el cluster al que se #asigna cada punto
#centros: una matriz de centros de conglomerados (medios de conglomerados)
#totss: La suma total de cuadrados (TSS), i.eq(xi≠ ̄x)2. TSS mide la varianza #total en los datos.
#withinss: Vector de suma de cuadrados dentro de un grupo, un componente #por grupo
#tot.withinss: suma total de cuadrados dentro del grupo, es decir, sum(withinss)
#betweenss: la suma de cuadrados entre grupos, es decir, totss≠tot.withinss
#tamaño: El número de observaciones en cada grupo
#Se puede acceder a estos componentes de la siguiente manera:
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
#Ahora visualicemos los datos en un diagrama de dispersión, coloreando #cada punto de datos según su asignación de grupo. El problema es que #los datos contienen más de una variable. La pregunta es qué variables #elegir para el diagrama de dispersión xy. Esto se aplica a las cuatro #variables y produce dos nuevas variables utilizadas para crear la gráfica.
#En otras palabras, si tenemos un conjunto de datos multidimensional, una #solución es realizar un análisis de componentes principales (PCA) y trazar #puntos de datos de acuerdo con las coordenadas de los dos primeros componentes #principales.
#La función fviz_cluster() [factoextrapackage] se puede utilizar para visualizar #fácilmente k-meansclusters. Toma los resultados de k-medias y los datos #originales como argumentos. En la gráfica resultante, las observaciones #se representan por puntos, usando componentes principales si el número de #variables es mayor que 2. También es posible dibujar elipses de concentración #alrededor de cada grupo.
fviz_cluster(km.res,data =df,palette =c("#2E9FDF","#00AFBB","#E7B800","#FC4E07"), ellipse.type ="euclid",star.plot =TRUE,repel =TRUE,ggtheme =theme_minimal())
## Ventajas y desventajas del clustering K-means—————————-
#El agrupamiento de K-means es un algoritmo muy simple y rápido. #Puede manejar con eficiencia conjuntos de datos muy grandes. Sin embargo, #hay algunas debilidades, que incluyen:
#1. Supone un conocimiento previo de los datos y requiere que el analista #elija un número apropiado de conglomerados (k) por adelantado.
#2. El resultado final obtenido está sujeto a la selección aleatoria inicial #de los centros del clúster. ¿Por qué es esto un problema? Esto se debe a que #podemos elegir un conjunto diferente de centros iniciales cada vez que #ejecutamos el algoritmo en el mismo conjunto de datos. Esto puede conducir #a diferentes resultados de agrupamiento para diferentes iteraciones del #algoritmo.
#3. Sensible a los valores atípicos.
#4. Si reordena los datos, es muy probable que obtenga soluciones diferentes #cada vez que reordene los datos.
#Las posibles soluciones a estas debilidades incluyen:
#1. Solución al Problema 1: Calcule k-medias sobre un rango de valores de k. #Por ejemplo, variar k entre 2 y 10. Luego compare los resultados de #agrupamiento obtenidos para diferentes valores de k y elija el mejor k.
#2. Solución para el ejercicio 2: calcule el algoritmo K-Means varias veces #usando diferentes centros de conglomerados iniciales. La corrida con la suma #de cuadrados más pequeña dentro del conglomerado se elige como la solución de #conglomerado final.
#3. Para evitar el sesgo de valores atípicos excesivos, podemos usar #PAMalgorithm, que es menos sensible a los valores atípicos.
#Se le denomina medoide a un objeto dentro de un conglomerado el cual #la diferencia que presenta entre él y los demás miembros del conglomerado #es mínima. El centro de un conglomerado se calcula como el valor medio de #todos los puntos de datos en el conglomerado.
#K-medoid es una alternativa robusta al agrupamiento de K-medias, es decir, #es menos sensible al ruido y a los valores atípicos el algoritmo, a diferencia #de K-mean, medoids es un centro de conglomerado en un lugar de medios. Una de #sus utilidades es determinar el número óptimo de conglomerados, este es llamado #metodo silueta y se describe a lo largo del capitulo.
#K-medias se caracteriza por ser muy sensible a los valores atípicos, lo #cual esto afecta a la asignacion de observaciones de conglomerados. En resumen, #el algoritmo PAM brinda un algoritmo que es más robusto.
#Utilizaremos los conjuntos de datos de demostración “USArrests”, #que empezamos a escalar utilizando la función de Rcale()como se indica #a continuación:
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
#La función pam() [clusterpackage] y pamk()[fpcpackage] pueden #utilizarse para calcular PAM.
#La función pamk() no requiere que el usuario decida el número de clusters K.
#x: valores posibles
#k: El número de clusters
#metric: la métrica de la distancia a utilizar. Las opciones disponibles son #“euclidiana” y “manhattan”.
#stand: valor lógico; si es verdadero, las variables (columnas) de #x se estandarizan antes de calcular las disimilitudes. Se ignora cuando #x es una matriz de disimilitud.
library(cluster)
## Warning: package 'cluster' was built under R version 4.2.2
library(factoextra)
#Para estimar el número óptimo de clusters, utilizaremos el método de #la silueta media. La idea es calcular el algoritmo PAM utilizando diferentes #valores de clusters k. A continuación, se dibuja la silueta media de los #clusters en función del número de clusters. La silueta media mide la calidad #de una agrupación.
#La función de R fviz_nbclust() [factoextrapackage] proporciona una solución #conveniente para estimar el número óptimo de clusters.
fviz_nbclust(df, pam, method = "silhouette")+ theme_classic()
## Cálculo de la clusterización de PAM—————————————
#El código R siguiente calcula el algoritmo PAM con k = 2:
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"
#La salida muestra:
#los medoides del cluster: una matriz, cuyas filas son los medoides y #las columnas son variables.
#el vector de clustering: Un vector de enteros (de 1:k) que indica el #cluster al que se asigna cada punto.
#Si se quiere añadir las clasificaciones de puntos a los datos originales, #se utiliza esto:
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
#La función pam() devuelve un objeto de la clase pam cuyos componentes #incluyen: - medoides: Objetos que representan clusters. - clustering: #un vector que contiene el número de cluster de cada objeto
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
#Para visualizar los resultados de la partición, utilizaremos:
#la función fviz_cluster() [factoextrapackage]. Dibuja un gráfico de dispersión #de los puntos de datos coloreados por los números de cluster. Si los datos #contienen más de 2 variables, se utiliza el algoritmo de análisis de componentes #principales (PCA) para reducir la dimensionalidad de los datos. En este caso, #se utilizan las dos primeras dimensiones principales para trazar los datos.
fviz_cluster(pam.res,palette =c("#00AFBB","#FC4E07"),ellipse.type ="t", repel =TRUE,ggtheme =theme_classic())
## Resumen————————————————————
#El algoritmo K-medoids, PAM, es una alternativa robusta a k-means para #la partición de un conjunto de datos en clusters de observación. #En el método k-medoids, cada clúster está representado por un #objeto seleccionado dentro del mismo. Los objetos seleccionados #se denominan medoides y corresponden a los puntos más céntricos del clúster.
#Es una extensión de los métodos k-medoides 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 #de RAM. Esto se consigue utilizando el enfoque de muestreo.
#CLARA (Clustering Large Applictions) es una extensión de los métodos #“K-medoids” para manejar datos que contengan una gran cantidad de objetos #para reducir el tiempo de cómputo y el problema de almacenamiento en RAM.
#En vez de encontrar medoides para todo el conjunto de datos, CLARA considera #una pequeña muestra de los datos con un tamaño específico y aplica el algoritmo #PAM para generar un óptimo conjunto de medoides para la muestra. La calidad de #dichos medoides resultantes se mide por la disimilitud promedio entre cada #objeto en el conjunto de datos completo y el medoide de su grupo, definido #como la función de costo.
#CLARA repite los procesos de muestreo y agrupamiento un número predeterminado #de veces para minimizar el sesgo de muestreo. Los resultados dl agrupamiento #se refieren a este conjunto de medoides con el costo mínimo.
#El algoritmo es el siguiente:
#Dividir aleatoriamente los conjuntos de datos en múltiples subconjuntos #con tamaño fijo
#Calcule el algoritmo PAM en cada subconjunto y elija los k objetos #representativos correspondientes (medoides). Asigne cada observación #del conjunto de datos completo al medoide más cercano.
#Calcular la media (o la suma) de las diferencias de las observaciones #con su medoide más cercano.
#Conservar el conjunto de subdatos para el que la media (o suma) es mínima.
#Tenga en cuenta que cada conjunto de subdatos está obligado a contener los #medoids obtenidos del mejor conjunto de subdatos hasta ese momento.
#Aquí, se genera un conjunto de datos aleatorios. Para que el resultado #sea reproducible, se empieza usando la función set.seed().
set.seed(1234)
df <-rbind(cbind(rnorm(200,0,8),rnorm(200,0,8)),cbind(rnorm(300,50,8),rnorm(300,50,8)))
colnames(df) <-c("x","y")
rownames(df) <-paste0("S",1:nrow(df))
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
#La función clara () [cluster package] se puede usar para calcular CLARA. #El formato simplificado es el siguiente:
#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.
#k: el número de clústeres.
#metric: las métricas de distancia a utilizar. Las opciones disponibles #son “euclides” y “manhattan”. Las distancias euclidianas son la raíz de la #suma de los cuadrados de las diferencias, y las distancias de Manhattan son #la suma de las diferencias absolutas.
#soporte: valor lógico; si es cierto, las variables (columnas) en x se #estandarizan antes de calcular las diferencias.
#samples: número de muestras a extraer del conjunto de datos. #El valor predeterminado es 5, pero se recomienda un valor mucho mayor.
#pamLike:indicación lógica si se debe usar el mismo algoritmo en la función pam().
#Para crear un gráfico de los clústeres generados con la función pam(), #usaremos el paquete factoextra.
library(cluster)
library(factoextra)
#Para estimar el número óptimo de clústeres en sus datos, es posible #utilizar el método de silueta promedio. La función R fviz_nbclust() #[factoextra package] proporciona una solución para facilitar este paso.
fviz_nbclust(df, clara,method ="silhouette")+theme_classic()
## Computing CLARA———————————————————-
#El código R siguiente calcula el algoritmo PAM con k = 2:
clara.res <- clara(df,2,samples =50,pamLike =TRUE)
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"
#La salida de la función clara() incluye los siguientes componentes:
#medoids: Objetos que representan clústeres.
#clustering: un vector que contiene el número de clúster de cada objeto.
#muestra: etiquetas o números de caso de las observaciones en la mejor #muestra, es decir, la muestra utilizada por el algoritmo clara para la #partición final.
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
#Se puede acceder a los resultados devueltos por clara() como sigue:
#clara.res$medoids
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
#Los medoides son S121, S455
#Para visualizar los resultados de la partición, usaremos la función #fviz_cluster() [factoextra package]. Dibuja un diagrama de dispersión #de puntos de datos coloreados por números de clústeres.
fviz_cluster(clara.res,palette = c("#00AFBB", "#FC4E07"),ellipse.type ="t",geom ="point", pointsize = 1,ggtheme =theme_classic())
## Resumen
#El algoritmo CLARA (Clustering Large Applications) es una extensión del #método de agrupamiento PAM (Partitioning Around Medoids) para grandes #conjuntos de datos.
#Como casi todos los algoritmos de partición, requiere que #el usuario especifique el número apropiado de clústeres que #se van a producir. Esto se puede estimar utilizando la función #fviz_nbclust [infactoextraR package].
#La función de R clara () [clusterpackage] se puede utilizar para calcular #el algoritmo CLARA. El formato simplificado es clara #(x, k, pamLike - TRUE), donde “x” son los datos y k es el número #de clústeres que se generarán.
#Después de calcular CLARA, se puede usar la función de R fviz_cluster() #[factoextra package] para visualizar los resultados. #El formato es fviz_cluster(clara.res), donde clara.res son los resultados #de CLARA.