-
Notifications
You must be signed in to change notification settings - Fork 303
/
pam-tidiers.R
93 lines (87 loc) · 2.3 KB
/
pam-tidiers.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#' @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
#' @examples
#'
#' library(dplyr)
#' library(ggplot2)
#' library(cluster)
#'
#' x <- iris %>%
#' select(-Species)
#' p <- pam(x, k = 3)
#'
#' tidy(p)
#' glance(p)
#' augment(p, x)
#'
#' augment(p, x) %>%
#' ggplot(aes(Sepal.Length, Sepal.Width)) +
#' 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, ...) {
if (is.null(data))
data <- x$data
as_broom_tibble(data) %>%
mutate(.cluster = as.factor(!!x$clustering))
}
#' @templateVar class pam
#' @template title_desc_glance
#'
#' @inherit tidy.pam params examples
#'
#' @evalRd return_glance("avg.silhoutte.width")
#'
#' @export
#' @seealso [glance()], [cluster::pam()]
#' @family pam tidiers
glance.pam <- function(x, ...) {
tibble(
avg.silhouette.width = x$silinfo$avg.width
)
}