tests/testthat/test.MINT.r

test_that("MINT returns correct results",{
  #skip_on_cran()
  modules = matrix(c(rep(c(1, 0, 0), each = 5),
                     rep(c(0, 1, 0), each = 5),
                     rep(c(0, 0, 1), each = 5)), 15)
  cor.hypot = CreateHypotMatrix(modules)[[4]]
  hypot.mask = matrix(as.logical(cor.hypot), 15, 15)
  mod.cor = matrix(NA, 15, 15)
  suppressWarnings(RNGversion("3.5.0"))
  set.seed(42)
  mod.cor[ hypot.mask] = runif(length(mod.cor[ hypot.mask]), 0.8, 0.9) # within-modules
  mod.cor[!hypot.mask] = runif(length(mod.cor[!hypot.mask]), 0.3, 0.4) # between-modules
  diag(mod.cor) = 1
  mod.cor = (mod.cor + t(mod.cor))/2 # correlation matrices should be symmetric
  hypothetical.modules = cbind(modules, matrix(sample(c(1, 0), 4*15, replace=TRUE), 15, 4))
  colnames(hypothetical.modules) <- letters[1:7]
  results = MINT(mod.cor, hypothetical.modules)
  #expect_equal(results[[1]], expected)
  expect_true(all(results[[2]] == modules))
  
  random_var = runif(15, 1, 10)
  out = raply(50, function(x){
    mod.cov = cov(mvtnorm::rmvnorm(50, sigma = sqrt(outer(random_var, random_var)) * mod.cor))
    hypothetical.modules = cbind(modules, matrix(sample(c(1, 0), 4*15, replace=TRUE), 15, 4))
    results = MINT(mod.cov, hypothetical.modules)[[1]]
    return(results[1,1])})
  close_enough = sum(grepl("1_2_3|2_3|1_2|1_3", out, perl = TRUE))/50
  expect_true(close_enough > 0.95)
  
  xdata = mvtnorm::rmvnorm(200, sigma = sqrt(outer(random_var, random_var)) * mod.cor)
  out_jack = JackKnifeMINT(xdata, hypothetical.modules, 100)
  close_enough_jack = sum(grepl("a_b_c", out_jack, perl = TRUE))/100
  expect_equal(out_jack[1,1], "a_b_c")
  expect_true(out_jack[1,5] > 0.95)
  
  expect_error(JackKnifeMINT(xdata, hypothetical.modules[,1]))
  expect_error(JackKnifeMINT(cov(xdata), hypothetical.modules))
})
lem-usp/EvolQG documentation built on April 14, 2024, 6:21 a.m.