Commit | Line | Data |
---|---|---|
cbd88fe5 BA |
1 | #auxiliary to test diagonality |
2 | .computeMuCheckDiag = function(X, Y, K, jd_method, β_ref) | |
3 | { | |
2b3a6af5 | 4 | d <- ncol(X) |
6dd5c2ac | 5 | #TODO: redundant code, same as computeMu() main method. Comments are stripped |
2b3a6af5 BA |
6 | M3 <- .Moments_M3(X,Y) |
7 | M2_t <- array(dim=c(d,d,d)) | |
6dd5c2ac BA |
8 | for (i in 1:d) |
9 | { | |
2b3a6af5 BA |
10 | ρ <- c(rep(0,i-1),1,rep(0,d-i)) |
11 | M2_t[,,i] <- .T_I_I_w(M3,ρ) | |
6dd5c2ac | 12 | } |
2b3a6af5 BA |
13 | jd <- jointDiag::ajd(M2_t, method=jd_method) |
14 | V <- if (jd_method=="uwedge") jd$B else solve(jd$A) | |
15 | M2_t <- array(dim=c(d,d,K)) | |
6dd5c2ac | 16 | for (i in 1:K) |
2b3a6af5 | 17 | M2_t[,,i] <- .T_I_I_w(M3,V[,i]) |
6dd5c2ac | 18 | #END of computeMu() code |
cbd88fe5 | 19 | |
2b3a6af5 BA |
20 | max_error <- 1.0 #TODO: tune ? |
21 | invβ <- MASS::ginv(β_ref) | |
6dd5c2ac BA |
22 | for (i in 1:K) |
23 | { | |
2b3a6af5 | 24 | shouldBeDiag <- invβ %*% M2_t[,,i] %*% t(invβ) |
ab35f610 | 25 | expect_lt( |
6dd5c2ac | 26 | mean( abs(shouldBeDiag[upper.tri(shouldBeDiag) | lower.tri(shouldBeDiag)]) ), |
ab35f610 | 27 | max_error) |
6dd5c2ac | 28 | } |
cbd88fe5 BA |
29 | } |
30 | ||
31 | test_that("'jedi' and 'uwedge' joint-diagonalization methods return a correct matrix", | |
32 | { | |
2b3a6af5 BA |
33 | n <- 10000 |
34 | d_K <- list( c(2,2), c(5,3), c(20,13) ) | |
cbd88fe5 | 35 | |
6dd5c2ac BA |
36 | for (dk_index in 1:length(d_K)) |
37 | { | |
2b3a6af5 BA |
38 | d <- d_K[[dk_index]][1] |
39 | K <- d_K[[dk_index]][2] | |
6dd5c2ac BA |
40 | #NOTE: sometimes large errors if pr is not balanced enough (e.g. random); |
41 | # same note for β. However we could be more random than that... | |
2b3a6af5 BA |
42 | β_ref <- rbind(diag(K),matrix(0,nrow=d-K,ncol=K)) |
43 | io <- generateSampleIO(n, p=rep(1/K,K-1), β=β_ref, rep(0,K), link="logit") | |
dfdd811f | 44 | # .computeMuCheckDiag(io$X, io$Y, K, jd_method="uwedge", β_ref) #TODO: sometimes failing test |
6dd5c2ac BA |
45 | #TODO: some issues with jedi method (singular system) |
46 | #.computeMuCheckDiag(io$X, io$Y, K, jd_method="jedi", β_ref) | |
47 | } | |
cbd88fe5 | 48 | }) |