Nothing
# ==================================================================================================
# setup
# ==================================================================================================
## Original objects in env
ols <- ls()
# ==================================================================================================
# multiple k and repetitions
# ==================================================================================================
test_that("Multiple k and multiple repetitions work as expected.", {
pc_k <- tsclust(data_reinterpolated, type = "p", k = 2L:5L,
distance = "L2", centroid = "pam",
seed = 938)
expect_identical(length(pc_k), 4L)
pc_rep <- tsclust(data_reinterpolated, type = "p", k = 20L,
distance = "L2", centroid = "pam",
seed = 938, control = partitional_control(nrep = 2L))
expect_identical(length(pc_rep), 2L)
pc_krep <- tsclust(data_reinterpolated, type = "p", k = 20L:22L,
distance = "L2", centroid = "pam",
seed = 938, control = partitional_control(nrep = 2L))
expect_identical(length(pc_krep), 6L)
pc_k <- lapply(pc_k, reset_nondeterministic)
pc_rep <- lapply(pc_rep, reset_nondeterministic)
pc_krep <- lapply(pc_krep, reset_nondeterministic)
pc_rep <- lapply(pc_rep, function(obj) {
obj@call <- as.call(list("zas", a = 1))
})
pc_krep <- lapply(pc_krep, function(obj) {
obj@call <- as.call(list("zas", a = 1))
})
expect_identical(pc_rep[1L:2L], pc_krep[1L:2L])
## refs
assign("pc_k", pc_k, persistent)
assign("pc_rep", pc_rep, persistent)
assign("pc_krep", pc_krep, persistent)
})
# ==================================================================================================
# partitional algorithms
# ==================================================================================================
test_that("Partitional clustering works as expected.", {
## ---------------------------------------------------------- dtw
pc_dtwb <- tsclust(data_reinterpolated_subset, type = "p", k = 4L,
distance = "dtw_basic", centroid = "pam", seed = 938,
args = tsclust_args(dist = list(window.size = 20L)))
pc_dtwb_npampre <- tsclust(data_reinterpolated_subset, type = "p", k = 4L,
distance = "dtw_basic", centroid = "pam", seed = 938,
args = tsclust_args(dist = list(window.size = 20L)),
control = partitional_control(pam.precompute = FALSE,
pam.sparse = TRUE,
nrep = 2L))[[1L]]
pc_dtwb_npampre2 <- tsclust(data_reinterpolated_subset, type = "p", k = 4L,
distance = "dtw_basic", centroid = "pam", seed = 938,
args = tsclust_args(dist = list(window.size = 20L)),
control = partitional_control(pam.precompute = FALSE,
pam.sparse = FALSE))
pc_dtwb_distmat <- tsclust(data_reinterpolated_subset, type = "p", k = 4L,
distance = "dtw_basic", centroid = "pam", seed = 938,
args = tsclust_args(dist = list(window.size = 20L)),
control = partitional_control(distmat = pc_dtwb@distmat))
expect_warning(
pc_dtwlb <- tsclust(data_reinterpolated_subset, type = "p", k = 4L,
distance = "dtw_lb", centroid = "pam", seed = 938,
args = tsclust_args(dist = list(window.size = 20L, nn.margin = 2L)),
control = partitional_control(pam.precompute = FALSE)),
"row-wise nearest neighbors"
)
expect_identical(pc_dtwb@cluster, pc_dtwb_npampre@cluster, info = "pam.pre vs no pam.pre")
expect_identical(pc_dtwb@cluster, pc_dtwb_distmat@cluster, info = "distmat supplied")
expect_identical(pc_dtwb@cluster, pc_dtwlb@cluster, info = "dtw_basic vs dtw_lb")
expect_identical(pc_dtwb@cluster, pc_dtwb_npampre@cluster, info = "no pam.pre but sparse")
expect_identical(pc_dtwb@cluster, pc_dtwb_npampre2@cluster, info = "no pam.pre nor sparse")
pc_dtwb <- reset_nondeterministic(pc_dtwb)
pc_dtwb_npampre <- reset_nondeterministic(pc_dtwb_npampre)
pc_dtwb_distmat <- reset_nondeterministic(pc_dtwb_distmat)
pc_dtwlb <- reset_nondeterministic(pc_dtwlb)
assign("pc_dtwb", pc_dtwb, persistent)
assign("pc_dtwb_npampre", pc_dtwb_npampre, persistent)
assign("pc_dtwb_distmat", pc_dtwb_distmat, persistent)
assign("pc_dtwlb", pc_dtwlb, persistent)
## ---------------------------------------------------------- k-Shape
pc_kshape <- tsclust(data_subset, type = "p", k = 4L,
distance = "sbd", centroid = "shape",
seed = 938)
pc_kshape <- reset_nondeterministic(pc_kshape)
assign("pc_kshape", pc_kshape, persistent)
## ---------------------------------------------------------- dba
pc_dba <- tsclust(data_subset, type = "p", k = 4L,
distance = "dtw_basic", centroid = "dba",
args = tsclust_args(cent = list(max.iter = 15L)),
seed = 938)
pc_dba <- reset_nondeterministic(pc_dba)
assign("pc_dba", pc_dba, persistent)
## ---------------------------------------------------------- multivariate pam
pc_mv_pam <- tsclust(data_multivariate, type = "p", k = 4L,
distance = "dtw_basic", centroid = "pam",
seed = 938)
pc_mv_pam <- reset_nondeterministic(pc_mv_pam)
assign("pc_mv_pam", pc_mv_pam, persistent)
## ---------------------------------------------------------- multivariate dba
pc_mv_dba <- tsclust(data_multivariate, type = "p", k = 4L,
distance = "dtw_basic", centroid = "dba",
args = tsclust_args(cent = list(max.iter = 15L)),
seed = 938)
pc_mv_dba <- reset_nondeterministic(pc_mv_dba)
assign("pc_mv_dba", pc_mv_dba, persistent)
## ---------------------------------------------------------- sdtw
pc_sdtw <- tsclust(data_multivariate, type = "p", k = 4L,
distance = "sdtw", centroid = "sdtw_cent",
seed = 938)
pc_sdtw <- reset_nondeterministic(pc_sdtw)
assign("pc_sdtw", pc_sdtw, persistent)
})
test_that("sDTW is handled correctly when PAM is used", {
ans <- tsclust(data_multivariate, type = "p", k = 4L,
distance = "sdtw", seed = 938)
expect_equal(class(ans@distmat), "dist")
expect_equal(attr(ans@distmat, "method"), "SDTW")
dm <- new("DistmatLowerTriangular", distmat = ans@distmat)
n <- attr(ans@distmat, "Size")
diagonal <- dm[cbind(1:n, 1:n)]
expect_false(any(diagonal == 0.0))
})
# ==================================================================================================
# TADPole
# ==================================================================================================
test_that("TADPole works as expected", {
## ---------------------------------------------------------- TADPole
pc_tadp <- tsclust(data_reinterpolated_subset, type = "t", k = 4L,
control = tadpole_control(dc = 1.5, window.size = 20L),
seed = 938)
expect_s4_class(pc_tadp, "PartitionalTSClusters")
pc_tadp <- reset_nondeterministic(pc_tadp)
assign("pc_tadp", pc_tadp, persistent)
## ---------------------------------------------------------- TADPole with LBI
pc_tadp_lbi <- tsclust(data_reinterpolated_subset, type = "t", k = 4L,
control = tadpole_control(dc = 1.5, window.size = 20L, lb = "lbi"),
seed = 938)
expect_s4_class(pc_tadp_lbi, "PartitionalTSClusters")
pc_tadp_lbi <- reset_nondeterministic(pc_tadp_lbi)
assign("pc_tadp_lbi", pc_tadp_lbi, persistent)
## ---------------------------------------------------------- TADPole with custom centroid
pc_tadp_cent <- tsclust(data_reinterpolated_subset, type = "t", k = 4L,
preproc = zscore, centroid = shape_extraction,
control = tadpole_control(dc = 1.5, window.size = 20L),
seed = 938)
expect_s4_class(pc_tadp_cent, "PartitionalTSClusters")
pc_tadp_cent <- reset_nondeterministic(pc_tadp_cent)
expect_identical(pc_tadp_cent@centroid, "shape_extraction")
assign("pc_tadp_cent", pc_tadp_cent, persistent)
pc_tadp_sdtwc <- tsclust(data_reinterpolated_subset, type = "t", k = 2L,
centroid = sdtw_cent,
control = tadpole_control(dc = 1.5, window.size = 20L),
seed = 938)
expect_s4_class(pc_tadp_sdtwc, "PartitionalTSClusters")
expect_identical(pc_tadp_sdtwc@centroid, "sdtw_cent")
})
# ==================================================================================================
# cluster reinitialization
# ==================================================================================================
## this case causes clusters to become empty
test_that("Cluster reinitialization in partitional tsclust works.", {
expect_warning(
pc_cr <- tsclust(data_reinterpolated, k = 20,
distance = "lbk", centroid = "mean",
seed = 31231,
control = partitional_control(iter.max = 10L, version = 1L),
args = tsclust_args(dist = list(window.size = 19L))),
regexp = "converge"
)
expect_false(pc_cr@converged)
pc_cr <- reset_nondeterministic(pc_cr)
assign("pc_cr", pc_cr, persistent)
## test PAM too
expect_warning(
pc_cr <- tsclust(data_reinterpolated, k = 20,
distance = "lbk", centroid = "pam",
seed = 31231,
control = partitional_control(iter.max = 10L, version = 1L),
args = tsclust_args(dist = list(window.size = 19L))),
regexp = "converge"
)
expect_false(pc_cr@converged)
})
# ==================================================================================================
# custom centroid
# ==================================================================================================
test_that("Operations with custom centroid complete successfully.", {
## ---------------------------------------------------------- with dots
mycent <- function(x, cl_id, k, cent, cl_old, ...) {
x_split <- split(x, cl_id)
x_split <- lapply(x_split, function(xx) do.call(rbind, xx))
new_cent <- lapply(x_split, colMeans)
new_cent
}
cent_colMeans <- tsclust(data_matrix, k = 20L,
distance = "sbd", centroid = mycent, seed = 123)
expect_s4_class(cent_colMeans, "PartitionalTSClusters")
cent_colMeans <- reset_nondeterministic(cent_colMeans)
## ---------------------------------------------------------- without dots
mycent <- function(x, cl_id, k, cent, cl_old) {
x_split <- split(x, cl_id)
x_split <- lapply(x_split, function(xx) do.call(rbind, xx))
new_cent <- lapply(x_split, colMeans)
new_cent
}
cent_colMeans_nd <- tsclust(data_matrix, k = 20L,
distance = "sbd", centroid = mycent, seed = 123)
expect_s4_class(cent_colMeans_nd, "PartitionalTSClusters")
cent_colMeans_nd <- reset_nondeterministic(cent_colMeans_nd)
## ---------------------------------------------------------- refs
assign("cent_colMeans", cent_colMeans, persistent)
assign("cent_colMeans_nd", cent_colMeans_nd, persistent)
})
# ==================================================================================================
# clean
# ==================================================================================================
rm(list = setdiff(ls(), ols))
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.