R: Visualize Silhouette Information from Clustering

fviz_silhouette {factoextra} | R Documentation

## Visualize Silhouette Information from Clustering

### Description

Silhouette (Si) analysis is a cluster validation approach that measures how well an observation is clustered and it estimates the average distance between clusters. fviz_silhouette() provides ggplot2-based elegant visualization of silhouette information from i) the result of `silhouette`(), `pam`(), `clara`() and `fanny`() [in cluster package]; ii) `eclust`() and `hcut`() [in factoextra].

Read more: Clustering Validation Statistics.

### Usage

    fviz_silhouette(sil.obj, label = FALSE, print.summary = TRUE, ...)

### Arguments

`sil.obj` | an object of class silhouette: pam, clara, fanny [in cluster package]; eclust and hcut [in factoextra].
`label` | logical value. If true, x axis tick labels are shown
`print.summary` | logical value. If true a summary of cluster silhouettes are printed in fviz_silhouette().
`...` | other arguments to be passed to the function ggpubr::ggpar().

### Details

- Observations with a large silhouhette Si (almost 1) are very well clustered.

- A small Si (around 0) means that the observation lies between two clusters.

- Observations with a negative Si are probably placed in the wrong cluster.

### Value

return a ggplot

### Author(s)

Alboukadel Kassambara alboukadel.kassambara@gmail.com

### See Also

`fviz_cluster`, `hcut`, `hkmeans`, `eclust`, `fviz_dend`

### Examples

    set.seed(123)

    # Data preparation
    # +++++++++++++++
    data("iris")
    head(iris)
    # Remove species column (5) and scale the data
    iris.scaled <- scale(iris[, -5])

    # K-means clustering
    # +++++++++++++++++++++
    km.res <- kmeans(iris.scaled, 3, nstart = 2)

    # Visualize kmeans clustering
    fviz_cluster(km.res, iris[, -5], ellipse.type = "norm")+
    theme_minimal()

    # Visualize silhouhette information
    require("cluster")
    sil <- silhouette(km.res$cluster, dist(iris.scaled))
    fviz_silhouette(sil)

    # Identify observation with negative silhouette
    neg_sil_index <- which(sil[, "sil_width"] < 0)
    sil[neg_sil_index, , drop = FALSE]
    ## Not run:
    # PAM clustering
    # ++++++++++++++++++++
    require(cluster)
    pam.res <- pam(iris.scaled, 3)
    # Visualize pam clustering
    fviz_cluster(pam.res, ellipse.type = "norm")+
    theme_minimal()
    # Visualize silhouhette information
    fviz_silhouette(pam.res)

    # Hierarchical clustering
    # ++++++++++++++++++++++++
    # Use hcut() which compute hclust and cut the tree
    hc.cut <- hcut(iris.scaled, k = 3, hc_method = "complete")
    # Visualize dendrogram
    fviz_dend(hc.cut, show_labels = FALSE, rect = TRUE)
    # Visualize silhouhette information
    fviz_silhouette(hc.cut)

    ## End(Not run)

[Package factoextra version 1.0.5 Index]