Nothing
#============================================================
# data
data(dietary_survey_IBS)
dat = dietary_survey_IBS[, -ncol(dietary_survey_IBS)]
X = center_scale(dat)
#=============================================================
context('clustering using medoids')
################################
# error handling Cluster_Medoids
################################
testthat::test_that("in case that the data is not a matrix or a data frame, it returns an error", {
tmp_x = list(X)
testthat::expect_error( Cluster_Medoids(tmp_x, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the clusters parameter is not numeric, it returns an error", {
tmp_m = data.frame(1)
testthat::expect_error( Cluster_Medoids(X, clusters = tmp_m, distance_metric = 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the length of the clusters parameter is not 1, it returns an error", {
tmp_m = c(1,2)
testthat::expect_error( Cluster_Medoids(X, clusters = tmp_m, distance_metric = 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the clusters parameter is less than 1, it returns an error", {
tmp_m = 0
testthat::expect_error( Cluster_Medoids(X, clusters = tmp_m, distance_metric = 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the distance_metric parameter is invalid, it returns an error", {
testthat::expect_error( Cluster_Medoids(X, clusters = 2, distance_metric = 'invalid', swap_phase = TRUE) )
})
testthat::test_that("in case that the distance_metric parameter is minkowski and the minkowski_p parameter is 0.0, it returns an error", {
testthat::expect_error( Cluster_Medoids(X, clusters = 2, distance_metric = 'minkowski', minkowski_p = 0.0, swap_phase = TRUE) )
})
testthat::test_that("in case that the threads parameter is less than 1, it returns an error", {
testthat::expect_error( Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, threads = 0) )
})
testthat::test_that("in case that the verbose parameter is not logical, it returns an error", {
testthat::expect_error( Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, verbose = 'invalid') )
})
testthat::test_that("in case that the swap_phase parameter is not logical, it returns an error", {
testthat::expect_error( Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = 'invalid') )
})
testthat::test_that("in case that the fuzzy parameter is not logical, it returns an error", {
testthat::expect_error( Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = 'invalid') )
})
testthat::test_that("in case that the data includes NaN or Inf values, it returns an error", {
tmp_dat = X
tmp_dat[1,1] = NaN
testthat::expect_error( Cluster_Medoids(tmp_dat, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE) )
})
##########################
# Cluster_Medoids function
##########################
testthat::test_that("in case that the data is a matrix, it returns the correct output", {
cm = Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
testthat::expect_true( sum(names(cm) %in% c("medoids", "medoid_indices", "best_dissimilarity", "dissimilarity_matrix",
"clusters", "silhouette_matrix", "fuzzy_probs", "clustering_stats")) == 8 && inherits(cm, "cluster medoids silhouette") && is.matrix(cm$medoids) && is.vector(cm$medoid_indices) &&
is.numeric(cm$best_dissimilarity) && is.vector(cm$clusters) && is.data.frame(cm$silhouette_matrix) && is.matrix(cm$fuzzy_probs) && is.data.frame(cm$clustering_stats) )
})
testthat::test_that("in case that the data is a dissimilarity matrix, it returns the correct output", {
dism_mat = distance_matrix(X, method = 'euclidean', upper = TRUE, diagonal = TRUE)
cm = Cluster_Medoids(dism_mat, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
testthat::expect_true( sum(names(cm) %in% c("medoids", "medoid_indices", "best_dissimilarity", "dissimilarity_matrix",
"clusters", "silhouette_matrix", "fuzzy_probs", "clustering_stats")) == 8 && inherits(cm, "cluster medoids silhouette") && is.vector(cm$medoids) && is.vector(cm$medoid_indices) &&
is.numeric(cm$best_dissimilarity) && is.vector(cm$clusters) && is.data.frame(cm$silhouette_matrix) && is.matrix(cm$fuzzy_probs) && is.data.frame(cm$clustering_stats) )
})
testthat::test_that("in case that the data is a matrix, it returns the correct output", {
cm = Cluster_Medoids(dat, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
testthat::expect_true( sum(names(cm) %in% c("medoids", "medoid_indices", "best_dissimilarity", "dissimilarity_matrix",
"clusters", "silhouette_matrix", "fuzzy_probs", "clustering_stats")) == 8 && inherits(cm, "cluster medoids silhouette") && is.matrix(cm$medoids) && is.vector(cm$medoid_indices) &&
is.numeric(cm$best_dissimilarity) && is.vector(cm$clusters) && is.data.frame(cm$silhouette_matrix) && is.matrix(cm$fuzzy_probs) && is.data.frame(cm$clustering_stats) )
})
testthat::test_that("in case that clusters = 1, it returns the correct output", {
cm = Cluster_Medoids(dat, clusters = 1, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
testthat::expect_true( sum(names(cm) %in% c("medoids", "medoid_indices", "best_dissimilarity", "dissimilarity_matrix",
"clusters", "silhouette_matrix", "fuzzy_probs", "clustering_stats")) == 8 && inherits(cm, "cluster medoids silhouette") && is.vector(cm$medoids) && is.vector(cm$medoid_indices) &&
is.numeric(cm$best_dissimilarity) && is.vector(cm$clusters) && is.null(cm$silhouette_matrix) && is.matrix(cm$fuzzy_probs) && is.null(cm$clustering_stats) )
})
##############################
# error handling Clara_Medoids
##############################
testthat::test_that("in case that the data is not a matrix or a data frame, it returns an error", {
tmp_x = list(X)
testthat::expect_error( Clara_Medoids(tmp_x, clusters = 2, samples = 5, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the clusters parameter is not numeric, it returns an error", {
tmp_m = data.frame(1)
testthat::expect_error( Clara_Medoids(X, clusters = tmp_m, samples = 5, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the length of the clusters parameter is not 1, it returns an error", {
tmp_m = c(1,2)
testthat::expect_error( Clara_Medoids(X, clusters = tmp_m, samples = 5, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the clusters parameter is less than 1, it returns an error", {
tmp_m = 0
testthat::expect_error( Clara_Medoids(X, clusters = tmp_m, samples = 5, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the samples parameter is not numeric, it returns an error", {
tmp_s = '0'
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = tmp_s, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the length of the samples parameter is not 1, it returns an error", {
tmp_s = c(0,1)
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = tmp_s, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the samples parameter is not less than 1, it returns an error", {
tmp_s = 0
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = tmp_s, sample_size = 0.2, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the sample_size parameter is not numeric, it returns an error", {
tmp_s = '0'
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = tmp_s, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the sample_size parameter is less than 0.0, it returns an error", {
tmp_s = -1.0
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = tmp_s, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the samples parameter is not less than 1, it returns an error", {
tmp_s = 2.0
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = tmp_s, 'euclidean', swap_phase = TRUE) )
})
testthat::test_that("in case that the distance_metric parameter is invalid, it returns an error", {
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, 'invalid', swap_phase = TRUE) )
})
testthat::test_that("in case that the distance_metric parameter is minkowski and the minkowski_p parameter is 0.0, it returns an error", {
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, 'minkowski', minkowski_p = 0.0, swap_phase = TRUE) )
})
testthat::test_that("in case that the threads parameter is less than 1, it returns an error", {
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, threads = 0, swap_phase = TRUE) )
})
testthat::test_that("in case that the verbose parameter is not logical, it returns an error", {
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, verbose = 'invalid', swap_phase = TRUE) )
})
testthat::test_that("in case that the swap_phase parameter is not logical, it returns an error", {
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, swap_phase = 'TRUE') )
})
testthat::test_that("in case that the fuzzy parameter is not logical, it returns an error", {
testthat::expect_error( Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, fuzzy = 'TRUE') )
})
testthat::test_that("in case that the data includes NaN or Inf values, it returns an error", {
tmp_dat = X
tmp_dat[1,1] = NaN
testthat::expect_error( Clara_Medoids(tmp_dat, clusters = 2, samples = 5, sample_size = 0.2, swap_phase = TRUE) )
})
#########################
# Clara_Medoids function
#########################
test_MedoidsCluster <- function(cm, nclust) {
expect_true(all(c("medoids", "medoid_indices", "sample_indices", "best_dissimilarity",
"clusters", "silhouette_matrix", "fuzzy_probs", "clustering_stats",
"dissimilarity_matrix") %in% names(cm)))
expect_is(cm, "MedoidsCluster")
expect_is(cm$medoids, "matrix")
expect_is(cm$medoid_indices, "numeric")
expect_is(cm$sample_indices, "numeric")
expect_is(cm$best_dissimilarity, "numeric")
expect_is(cm$clusters, "numeric")
expect_is(cm$fuzzy_probs, "matrix")
expect_is(cm$clustering_stats, "data.frame")
if (nclust > 1) {
expect_is(cm$silhouette_matrix, "data.frame")
} else {
expect_null(cm$silhouette_matrix)
}
}
testthat::test_that("in case that the data is a matrix, it returns the correct output", {
cm <- Clara_Medoids(X, clusters = 2, samples = 5, sample_size = 0.2, swap_phase = TRUE, fuzzy = T)
test_MedoidsCluster(cm, 2)
})
testthat::test_that("in case that the data is a data frame, it returns the correct output", {
cm <- Clara_Medoids(dat, clusters = 2, samples = 5, sample_size = 0.2, swap_phase = TRUE, fuzzy = T)
test_MedoidsCluster(cm, 2)
})
testthat::test_that("in case that the clusters parameter is 1, it returns the correct output", {
cm <- Clara_Medoids(dat, clusters = 1, samples = 5, sample_size = 0.2, swap_phase = TRUE, fuzzy = T)
test_MedoidsCluster(cm, 1)
})
#################################
# error handling predict_Medoids
#################################
testthat::test_that("in case that the data is not a matrix or a data frame, it returns an error", {
cm <- Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
tmp_x <- list(X)
testthat::expect_error(predict_Medoids(tmp_x, MEDOIDS = cm$medoids, 'euclidean', fuzzy = TRUE) )
})
testthat::test_that("in case that the MEDOIDS is NULL, it returns an error", {
testthat::expect_error( predict_Medoids(X, MEDOIDS = NULL, 'euclidean', fuzzy = TRUE) )
})
testthat::test_that("in case that the MEDOIDS is NULL, it returns an error", {
tmp_cm = data.frame(matrix(runif(82), ncol = 41, nrow = 2))
testthat::expect_error( predict_Medoids(X, MEDOIDS = tmp_cm, 'euclidean', fuzzy = TRUE) )
})
testthat::test_that("in case that the distance_metric parameter is invalid, it returns an error", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
testthat::expect_error( predict_Medoids(X, MEDOIDS = tmp_cm, 'invalid', fuzzy = TRUE) )
})
testthat::test_that("in case that the distance_metric parameter is minkowski and the minkowski_p parameter is 0.0, it returns an error", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
testthat::expect_error( predict_Medoids(X, MEDOIDS = tmp_cm, 'minkowski', minkowski_p = 0.0) )
})
testthat::test_that("in case that the threads parameter is less than 1, it returns an error", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
testthat::expect_error( predict_Medoids(X, MEDOIDS = tmp_cm, threads = 0) )
})
testthat::test_that("in case that the fuzzy parameter is not logical, it returns an error", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
testthat::expect_error( predict_Medoids(X, MEDOIDS = tmp_cm, fuzzy = 'TRUE') )
})
testthat::test_that("in case that the data includes NaN or Inf values, it returns an error", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
tmp_dat = X
tmp_dat[1,1] = NaN
testthat::expect_error( predict_Medoids(tmp_dat, MEDOIDS = tmp_cm) )
})
###########################
# predict_Medoids function
###########################
testthat::test_that("in case that the data is a matrix, it returns the correct output", {
cm = Cluster_Medoids(X, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
pr = predict_Medoids(X, MEDOIDS = cm$medoids, 'euclidean', fuzzy = TRUE)
testthat::expect_true( sum(names(pr) %in% c("clusters", "fuzzy_clusters", "dissimilarity")) == 3 && inherits(pr, "cluster medoids silhouette") && is.vector(pr$clusters) &&
is.matrix(pr$fuzzy_clusters) && is.numeric(pr$dissimilarity) )
})
testthat::test_that("in case that the data is a data frame, it returns the correct output", {
cm = Cluster_Medoids(dat, clusters = 2, distance_metric = 'euclidean', swap_phase = TRUE, fuzzy = T)
pr = predict_Medoids(dat, MEDOIDS = cm$medoids, 'euclidean', fuzzy = TRUE)
testthat::expect_true(sum(names(pr) %in% c("clusters", "fuzzy_clusters", "dissimilarity")) == 3 &&
inherits(pr, "cluster medoids silhouette") && is.vector(pr$clusters) &&
is.matrix(pr$fuzzy_clusters) && is.numeric(pr$dissimilarity))
testthat::expect_equal(pr$clusters, predict(cm, dat))
})
testthat::test_that("in case that MEDOIDS is a data frame, it returns the correct output", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
pr = predict_Medoids(X, MEDOIDS = tmp_cm, 'euclidean', fuzzy = TRUE)
testthat::expect_true(sum(names(pr) %in% c("clusters", "fuzzy_clusters", "dissimilarity")) == 3 &&
inherits(pr, "cluster medoids silhouette") && is.vector(pr$clusters) &&
is.matrix(pr$fuzzy_clusters) && is.numeric(pr$dissimilarity))
})
#########################################
# error handling Optimal_Clusters_Medoids
#########################################
testthat::test_that("in case that the data is not a matrix or a data frame, it returns an error", {
tmp_x = list(X)
testthat::expect_error( Optimal_Clusters_Medoids(tmp_x, max_clusters = 10, 'euclidean', 'dissimilarity', plot_clusters = FALSE) )
})
testthat::test_that("in case that the max_clusters parameter is not numeric, it returns an error", {
tmp_m = data.frame(1)
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = tmp_m, 'euclidean', 'dissimilarity', plot_clusters = FALSE) )
})
testthat::test_that("in case that the length of the max_clusters parameter is not 1, it returns an error", {
tmp_m = list(1,2)
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = tmp_m, 'euclidean', 'dissimilarity', plot_clusters = FALSE) )
})
testthat::test_that("in case that the max_clusters parameter is less than 1, it returns an error", {
tmp_m = 0
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = tmp_m, 'euclidean', 'dissimilarity', plot_clusters = FALSE) )
})
testthat::test_that("in case that the distance_metric parameter is invalid, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'invalid', 'dissimilarity', plot_clusters = FALSE) )
})
testthat::test_that("in case that the distance_metric parameter is minkowski and the minkowski_p parameter is 0.0, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'minkowski', minkowski_p = 0.0, 'dissimilarity', plot_clusters = FALSE) )
})
testthat::test_that("in case that the threads parameter is less than 1, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'euclidean', 'dissimilarity', plot_clusters = FALSE, threads = 0) )
})
testthat::test_that("in case that the criterion parameter is not one of 'silhouette', 'dissimilarity', it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'euclidean', 'invalid', plot_clusters = FALSE) )
})
testthat::test_that("in case that the verbose parameter is not logical, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'euclidean', 'dissimilarity', plot_clusters = FALSE, verbose = 0) )
})
testthat::test_that("in case that the swap_phase parameter is not logical, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'euclidean', 'dissimilarity', plot_clusters = FALSE, swap_phase = 0) )
})
testthat::test_that("in case that the plot_clusters parameter is not logical, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, 'euclidean', 'dissimilarity', plot_clusters = 0) )
})
testthat::test_that("in case that the one of clara_samples, clara_sample_size is 0, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = 5, clara_sample_size = 0.0, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the one of clara_samples, clara_sample_size is 0, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = 0, clara_sample_size = 0.5, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the clara_samples parameter is not numeric, it returns an error", {
tmp_s = '0'
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = tmp_s, clara_sample_size = 0.2, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the clara_samples parameter is not less than 1, it returns an error", {
tmp_s = 0
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = tmp_s, clara_sample_size = 0.2, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the clara_sample_size parameter is not numeric, it returns an error", {
tmp_s = '0'
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = 5, clara_sample_size = tmp_s, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the clara_sample_size parameter is less than 0.0, it returns an error", {
tmp_s = -1.0
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = tmp_s, clara_sample_size = 0.2, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the clara_samples parameter is not less than 1, it returns an error", {
tmp_s = 2.0
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = 5, clara_samples = 5, clara_sample_size = tmp_s, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the clara_samples and clara_sample_size parameters is greater than 0.0 and the data is a dissimilarity matrix, it returns an error", {
vec = rep(0, 10)
mat_diag = diag(vec)
testthat::expect_error( Optimal_Clusters_Medoids(mat_diag, max_clusters = 5, clara_samples = 5, clara_sample_size = 0.3, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the data includes NaN or Inf values, it returns an error", {
tmp_cm = data.frame(matrix(runif(84), ncol = 42, nrow = 2))
tmp_dat = X
tmp_dat[1,1] = NaN
testthat::expect_error( Optimal_Clusters_Medoids(tmp_dat, max_clusters = 5, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
testthat::test_that("in case that the max_clusters parameter includes a 0, it returns an error", {
testthat::expect_error( Optimal_Clusters_Medoids(X, max_clusters = c(0,3,5), clara_samples = 5, clara_sample_size = 0.5, 'euclidean', 'dissimilarity', plot_clusters = F) )
})
####################################
# Optimal_Clusters_Medoids function
####################################
testthat::test_that("in case that the data is a matrix, it returns the correct output", {
opt_md = Optimal_Clusters_Medoids(X, max_clusters = 10, 'euclidean', 'dissimilarity', plot_clusters = F)
testthat::expect_true( mean(unlist(lapply(opt_md, length))[-1]) == 6 )
})
testthat::test_that("in case that the data is a matrix, it returns the correct output [ non-contiguous vector ]", {
opt_md = Optimal_Clusters_Medoids(X, max_clusters = 6, 'euclidean', 'dissimilarity', plot_clusters = F)
opt_md1 = Optimal_Clusters_Medoids(X, max_clusters = c(2,4,6), 'euclidean', 'dissimilarity', plot_clusters = F)
clust_two = opt_md[[2]]$avg_intra_clust_dissimilarity == opt_md1[[1]]$avg_intra_clust_dissimilarity
clust_four = opt_md[[4]]$sum_intra_dissim == opt_md1[[2]]$sum_intra_dissim
clust_six = opt_md[[6]]$avg_width_silhouette == opt_md1[[3]]$avg_width_silhouette
testthat::expect_true( mean(unlist(lapply(opt_md, length))[-1]) == 6 && all(clust_two, clust_four, clust_six) )
})
testthat::test_that("in case that the data is a data frame, it returns the correct output", {
opt_md = Optimal_Clusters_Medoids(dat, max_clusters = 10, 'euclidean', 'dissimilarity', plot_clusters = FALSE)
testthat::expect_true( mean(unlist(lapply(opt_md, length))[-1]) == 6 )
})
testthat::test_that("in case of Cluster_Medoids for different parameter settings, it returns the correct output", {
tmp = c("silhouette","dissimilarity")
res = rep(NA, length(tmp))
for (i in 1:length(tmp)) {
opt_md = Optimal_Clusters_Medoids(dat, max_clusters = 10, 'euclidean', tmp[i], plot_clusters = F)
testthat::expect_equal(mean(unlist(lapply(opt_md, length))[-1]), 6)
}
})
testthat::test_that("in case of Clara_Medoids for different parameter settings, it returns the correct output", {
tmp = c("silhouette", "dissimilarity")
res = rep(NA, length(tmp))
for (i in 1:length(tmp)) {
opt_md = Optimal_Clusters_Medoids(dat, max_clusters = 10, 'euclidean', tmp[i], clara_samples = 5, clara_sample_size = 0.2, plot_clusters = F)
testthat::expect_equal(mean(unlist(lapply(opt_md, length))[-1]), 6)
}
})
############################################
# cost_clusters_from_dissim_medoids function
############################################
testthat::test_that("the cost_clusters_from_dissim_medoids function returns the correct output", {
cm = Cluster_Medoids(X, clusters = 3, distance_metric = 'euclidean', swap_phase = TRUE)
res = cost_clusters_from_dissim_medoids(data = cm$dissimilarity_matrix, medoids = cm$medoid_indices)
# dissim_cost = cm$best_dissimilarity == res$cost # for some reason (probably a rounding thing) this is not equal although the output is the same
tbl = table(cm$clusters, res$clusters)
diag(tbl) = NA_real_
tbl = as.vector(tbl) # I expect that once I set the main diagonal to 0 then all other values are equal to 0 because the clustering between the 2 objects will match
testthat::expect_true(all(na.omit(tbl) == 0))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.