X-Git-Url: https://git.auder.net/?p=morpheus.git;a=blobdiff_plain;f=pkg%2Ftests%2Ftestthat%2Ftest-alignMatrices.R;h=63e4bd3ce6b0b33c2690aaf91b7589df3000298f;hp=59ad1d186eb5a5bf3676de945f265b8b089508a1;hb=ab35f6102896a49e86e853262c0650faa2931638;hpb=cbd88fe5729bf206a784238a2637aa60e697fcdc diff --git a/pkg/tests/testthat/test-alignMatrices.R b/pkg/tests/testthat/test-alignMatrices.R index 59ad1d1..63e4bd3 100644 --- a/pkg/tests/testthat/test-alignMatrices.R +++ b/pkg/tests/testthat/test-alignMatrices.R @@ -1,69 +1,62 @@ -context("alignMatrices") - # Helper to generate a random series of matrices to align .generateMatrices = function(d, K, N, noise) { - matrices = list( matrix(runif(d*K, min=-1, max=1),ncol=K) ) #reference - for (i in 2:N) - { - matrices[[i]] <- matrices[[1]][,sample(1:K)] - if (noise) - matrices[[i]] = matrices[[i]] + matrix(rnorm(d*K, sd=0.05), ncol=K) - } - matrices + matrices = list( matrix(runif(d*K, min=-1, max=1),ncol=K) ) #reference + for (i in 2:(N+1)) + { + matrices[[i]] <- matrices[[1]][,sample(1:K)] + if (noise) + matrices[[i]] = matrices[[i]] + matrix(rnorm(d*K, sd=0.05), ncol=K) + } + matrices } test_that("labelSwitchingAlign correctly aligns de-noised parameters", { - N = 30 #number of matrices - d_K_list = list(c(2,2), c(5,3)) - for (i in 1:2) - { - d = d_K_list[[i]][1] - K = d_K_list[[i]][2] - - # 1] Generate matrix series - matrices_permut = .generateMatrices(d,K,N,noise=FALSE) - - # 2] Call align function with mode=approx1 - matrices_aligned = - alignMatrices(matrices_permut[2:N], ref=matrices_permut[[1]], ls_mode="approx1") - - # 3] Check alignment - for (j in 2:N) - expect_equal(matrices_aligned[[j-1]], matrices_permut[[1]]) - - # 2bis] Call align function with mode=approx2 - matrices_aligned = - alignMatrices(matrices_permut[2:N], ref=matrices_permut[[1]], ls_mode="approx2") - - # 3bis] Check alignment - for (j in 2:N) - expect_equal(matrices_aligned[[j-1]], matrices_permut[[1]]) - } + N <- 30 #number of matrices + d_K_list <- list(c(2,2), c(5,3)) + for (i in 1:2) + { + d <- d_K_list[[i]][1] + K <- d_K_list[[i]][2] + + # 1] Generate matrix series + Ms <- .generateMatrices(d, K, N, noise=FALSE) + + # 2] Call align function with mode=approx1 + aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="approx1") + + # 3] Check alignment + for (j in 1:N) + expect_equal(aligned[[j]], Ms[[1]]) + + # 2bis] Call align function with mode=approx2 + aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="approx2") + + # 3bis] Check alignment + for (j in 1:N) + expect_equal(aligned[[j]], Ms[[1]]) + } }) test_that("labelSwitchingAlign correctly aligns noisy parameters", { - N = 30 #number of matrices - d_K_list = list(c(2,2), c(5,3)) - for (i in 1:2) - { - d = d_K_list[[i]][1] - K = d_K_list[[i]][2] - max_error = d * 0.2 #TODO: what value to choose ? - - # 1] Generate matrix series - matrices_permut = .generateMatrices(d,K,N,noise=TRUE) - - # 2] Call align function - matrices_aligned = alignMatrices(matrices_permut, ref="mean", ls_mode="exact") - - # 3] Check alignment - for (j in 2:N) - { - expect_that( norm(matrices_aligned[[j]] - matrices_permut[[1]]), - is_less_than(max_error) ) - } - } + N <- 30 #number of matrices + d_K_list <- list(c(2,2), c(5,3)) + for (i in 1:2) + { + d <- d_K_list[[i]][1] + K <- d_K_list[[i]][2] + max_error <- d * 0.2 #TODO: what value to choose ? + + # 1] Generate matrix series + Ms <- .generateMatrices(d, K, N, noise=TRUE) + + # 2] Call align function + aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="exact") + + # 3] Check alignment + for (j in 2:N) + expect_lt( norm(aligned[[j]] - Ms[[1]]), max_error ) + } })