Error when K > d for computeMu and optimParams
[morpheus.git] / pkg / tests / testthat / test-alignMatrices.R
CommitLineData
cbd88fe5
BA
1context("alignMatrices")
2
3# Helper to generate a random series of matrices to align
4.generateMatrices = function(d, K, N, noise)
5{
6dd5c2ac 6 matrices = list( matrix(runif(d*K, min=-1, max=1),ncol=K) ) #reference
2b3a6af5 7 for (i in 2:(N+1))
6dd5c2ac
BA
8 {
9 matrices[[i]] <- matrices[[1]][,sample(1:K)]
10 if (noise)
11 matrices[[i]] = matrices[[i]] + matrix(rnorm(d*K, sd=0.05), ncol=K)
12 }
13 matrices
cbd88fe5
BA
14}
15
16test_that("labelSwitchingAlign correctly aligns de-noised parameters",
17{
2b3a6af5
BA
18 N <- 30 #number of matrices
19 d_K_list <- list(c(2,2), c(5,3))
6dd5c2ac
BA
20 for (i in 1:2)
21 {
2b3a6af5
BA
22 d <- d_K_list[[i]][1]
23 K <- d_K_list[[i]][2]
cbd88fe5 24
6dd5c2ac 25 # 1] Generate matrix series
2b3a6af5 26 Ms <- .generateMatrices(d, K, N, noise=FALSE)
cbd88fe5 27
6dd5c2ac 28 # 2] Call align function with mode=approx1
2b3a6af5 29 aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="approx1")
cbd88fe5 30
6dd5c2ac 31 # 3] Check alignment
2b3a6af5
BA
32 for (j in 1:N)
33 expect_equal(aligned[[j]], Ms[[1]])
cbd88fe5 34
6dd5c2ac 35 # 2bis] Call align function with mode=approx2
2b3a6af5 36 aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="approx2")
cbd88fe5 37
6dd5c2ac 38 # 3bis] Check alignment
2b3a6af5
BA
39 for (j in 1:N)
40 expect_equal(aligned[[j]], Ms[[1]])
6dd5c2ac 41 }
cbd88fe5
BA
42})
43
44test_that("labelSwitchingAlign correctly aligns noisy parameters",
45{
2b3a6af5
BA
46 N <- 30 #number of matrices
47 d_K_list <- list(c(2,2), c(5,3))
6dd5c2ac
BA
48 for (i in 1:2)
49 {
2b3a6af5
BA
50 d <- d_K_list[[i]][1]
51 K <- d_K_list[[i]][2]
52 max_error <- d * 0.2 #TODO: what value to choose ?
cbd88fe5 53
6dd5c2ac 54 # 1] Generate matrix series
2b3a6af5 55 Ms <- .generateMatrices(d, K, N, noise=TRUE)
cbd88fe5 56
6dd5c2ac 57 # 2] Call align function
2b3a6af5 58 aligned <- alignMatrices(Ms[2:(N+1)], ref=Ms[[1]], ls_mode="exact")
cbd88fe5 59
6dd5c2ac
BA
60 # 3] Check alignment
61 for (j in 2:N)
2b3a6af5 62 expect_that( norm(aligned[[j]] - Ms[[1]]), is_less_than(max_error) )
6dd5c2ac 63 }
cbd88fe5 64})