#' @templateVar class pam
#' @template title_desc_tidy
#'
#' @param x An `pam` object returned from [cluster::pam()]
#' @param col.names Column names in the input data frame.
#' Defaults to the names of the variables in x.
#' @template param_unused_dots
#'
#' @evalRd return_tidy(
#' size = "Size of each cluster.",
#' max.diss = "Maximal dissimilarity between the observations in the
#' cluster and that cluster's medoid.",
#' avg.diss = "Average dissimilarity between the observations in the
#' cluster and that cluster's medoid.",
#' diameter = "Diameter of the cluster.",
#' separation = "Separation of the cluster.",
#' avg.width = "Average silhouette width of the cluster.",
#' cluster = "A factor describing the cluster from 1:k."
#' )
#'
#' @details For examples, see the pam vignette.
#'
#' @aliases pam_tidiers
#' @export
#' @seealso [tidy()], [cluster::pam()]
#' @family pam tidiers
# skip running examples - occasionally over CRAN check time limit
#' @examplesIf rlang::is_installed(c("cluster", "modeldata", "ggplot2")) && identical(Sys.getenv("NOT_CRAN"), "true")
#'
#' # load libraries for models and data
#' library(dplyr)
#' library(ggplot2)
#' library(cluster)
#' library(modeldata)
#' data(hpc_data)
#'
#' x <- hpc_data[, 2:5]
#' p <- pam(x, k = 4)
#'
#' # summarize model fit with tidiers + visualization
#' tidy(p)
#' glance(p)
#' augment(p, x)
#'
#' augment(p, x) %>%
#' ggplot(aes(compounds, input_fields)) +
#' geom_point(aes(color = .cluster)) +
#' geom_text(aes(label = cluster), data = tidy(p), size = 10)
#'
tidy.pam <- function(x, col.names = paste0("x", 1:ncol(x$medoids)), ...) {
as_tibble(x$clusinfo) %>%
mutate(
avg.width = x$silinfo$clus.avg.widths,
cluster = as.factor(row_number())
) %>%
bind_cols(as_tibble(x$medoids)) %>%
rename(
"max.diss" = "max_diss",
"avg.diss" = "av_diss"
)
}
#' @templateVar class pam
#' @template title_desc_augment
#'
#' @inherit tidy.pam params examples
#' @template param_data
#'
#' @evalRd return_augment(".cluster")
#'
#' @export
#' @seealso [augment()], [cluster::pam()]
#' @family pam tidiers
#'
augment.pam <- function(x, data = NULL, ...) {
check_ellipses("newdata", "augment", "pam", ...)
if (is.null(data)) {
data <- x$data
}
as_augment_tibble(data) %>%
mutate(.cluster = as.factor(!!x$clustering))
}
#' @templateVar class pam
#' @template title_desc_glance
#'
#' @inherit tidy.pam params examples
#'
#' @evalRd return_glance("avg.silhouette.width")
#'
#' @export
#' @seealso [glance()], [cluster::pam()]
#' @family pam tidiers
glance.pam <- function(x, ...) {
as_glance_tibble(
avg.silhouette.width = x$silinfo$avg.width,
na_types = "r"
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.