# Documenting evaluation

The other vignette focuses on reproducing a single clustering workflow that assumes that the number of clusters has been decided. As the app includes a few options for evaluating clusters, some of the functions are also made available in the package. The output of the clustering functions can also be used with other packages.

library(visxhclust)
library(dplyr)

### Preprocessing and clustering

numeric_data <- iris %>% select(Sepal.Length, Sepal.Width, Petal.Width)
dmat <- compute_dmat(numeric_data, "euclidean", TRUE)
clusters <- compute_clusters(dmat, "complete")

### Gap statistic

For Gap statistic, the optimal number of clusters depends on the method use to compare cluster solutions. The package cluster includes the function cluster::maxSE() to help with that.

gap_results <- compute_gapstat(scale(numeric_data), clusters)
optimal_k <- cluster::maxSE(gap_results$gap, gap_results$SE.sim)
line_plot(gap_results, "k", "gap", xintercept = optimal_k)

### Other measures

The Shiny app also includes the option to compute average silhouette widths or Dunn index. The function compute_metric works similarly to compute_gapstat, whereas optimal_score is similar to maxSE. However, optimal_score varies only between first and global minimum and maximum.

res <- compute_metric(dmat, clusters, "dunn")
optimal_k <- optimal_score(res\$score)
line_plot(res, "k", "score", optimal_k)