-#shorthand: map 1->1, 2->2, 3->3, 4->1, ..., 149->2, 150->3, ... (is base==3)
-I = function(i, base)
- (i-1) %% base + 1
-
-test_that("computeClusters1 behave as expected",
-{
- require("MASS", quietly=TRUE)
- library("clue", quietly=TRUE)
-
- # 3 gaussian clusters, 300 items; and then 7 gaussian clusters, 490 items
- n = 300
- d = 5
- K = 3
- for (ndK in list( c(300,5,3), c(490,10,7) ))
- {
- n = ndK[1] ; d = ndK[2] ; K = ndK[3]
- cs = n/K #cluster size
- Id = diag(d)
- coefs = do.call(rbind,
- lapply(1:K, function(i) MASS::mvrnorm(cs, c(rep(0,(i-1)),5,rep(0,d-i)), Id)))
- indices_medoids = computeClusters1(coefs, K)
- # Get coefs assignments (to medoids)
- assignment = sapply(seq_len(n), function(i)
- which.min( rowSums( sweep(coefs[indices_medoids,],2,coefs[i,],'-')^2 ) ) )
- for (i in 1:K)
- expect_equal(sum(assignment==i), cs, tolerance=5)
-
- costs_matrix = matrix(nrow=K,ncol=K)
- for (i in 1:K)
- {
- for (j in 1:K)
- {
- # assign i (in result) to j (order 1,2,3)
- costs_matrix[i,j] = abs( mean(assignment[((i-1)*cs+1):(i*cs)]) - j )
- }
- }
- permutation = as.integer( clue::solve_LSAP(costs_matrix) )
- for (i in 1:K)
- {
- expect_equal(
- mean(assignment[((i-1)*cs+1):(i*cs)]), permutation[i], tolerance=0.05)
- }
- }
-})
-