tests/testthat/test-utilities-merge_alpha.R

context("Function merge alpha grids")

###############################################################################
test_that("Merge alpha grids", {
  testthat::skip_on_cran()
  
  data(monkeys)
  
  ## First fit with coarse grid
  expect_message(expect_warning(
    res1 <- PhyloEM(Y_data = monkeys$dat,
                    phylo = monkeys$phy,
                    process = "scOU",
                    random.root = TRUE,
                    stationary.root = TRUE,
                    K_max = 10,
                    alpha = c(0.2, 0.3),
                    parallel_alpha = FALSE,
                    progress.bar = FALSE),
    "Models selected by DDSE and Djump are different"),
    "There are some equivalent solutions")
  
  ## Second fit with finner grid
  expect_message(
    res2 <- PhyloEM(Y_data = monkeys$dat,
                    phylo = monkeys$phy,
                    process = "scOU",
                    random.root = TRUE,
                    stationary.root = TRUE,
                    K_max = 10,
                    alpha = c(0.22, 0.24),
                    parallel_alpha = FALSE,
                    progress.bar = FALSE),
    "There are some equivalent solutions")
  
  ## Third fit with redundancies
  expect_message(
    res3 <- PhyloEM(Y_data = monkeys$dat,
                    phylo = monkeys$phy,
                    process = "scOU",
                    random.root = TRUE,
                    stationary.root = TRUE,
                    K_max = 10,
                    alpha = c(0.26, 0.3),
                    parallel_alpha = FALSE,
                    progress.bar = FALSE),
    "There are some equivalent solutions")
  
  ## merge results
  expect_message(expect_warning(
    res_merge <- merge_alpha_grids(res1, res2, res3),
    "Models selected by DDSE and Djump are different"),
    "There are some equivalent solutions")
  
  ## large fit all alpha
  expect_message(expect_warning(
    resall <- PhyloEM(Y_data = monkeys$dat,
                      phylo = monkeys$phy,
                      process = "scOU",
                      random.root = TRUE,
                      stationary.root = TRUE,
                      K_max = 10,
                      alpha = c(0.2, 0.22, 0.24, 0.26, 0.3),
                      parallel_alpha = FALSE,
                      progress.bar = FALSE),
    "Models selected by DDSE and Djump are different"),
    "There are some equivalent solutions")
  
  ## compare
  compare_ignore_time <- function(a, b) {
    a$results_summary$time <- 0
    a$DDSE_BM1$results_summary$time <- 0
    a$Djump_BM1$results_summary$time <- 0
    a$BGHml$results_summary$time <- 0
    a$BGHmlraw$results_summary$time <- 0
    a$BGHlsq$results_summary$time <- 0
    a$BGHlsqraw$results_summary$time <- 0
    
    b$results_summary$time <- 0
    b$DDSE_BM1$results_summary$time <- 0
    b$Djump_BM1$results_summary$time <- 0
    b$BGHml$results_summary$time <- 0
    b$BGHmlraw$results_summary$time <- 0
    b$BGHlsq$results_summary$time <- 0
    b$BGHlsqraw$results_summary$time <- 0
    
    expect_equal(a, b)
  }
  compare_ignore_time(resall$alpha_max, res_merge$alpha_max)
  compare_ignore_time(resall$alpha_min, res_merge$alpha_min)
  compare_ignore_time(resall$alpha_min_raw, res_merge$alpha_min_raw)
})

###############################################################################
test_that("Merge alpha grids - errors", {
  testthat::skip_on_cran()
  data(monkeys)
  ## First fit with coarse grid
  expect_message(expect_warning(
    res1 <- PhyloEM(Y_data = monkeys$dat,
                    phylo = monkeys$phy,
                    process = "scOU",
                    random.root = TRUE,
                    stationary.root = TRUE,
                    K_max = 10,
                    alpha = c(0.2, 0.3),
                    parallel_alpha = FALSE,
                    progress.bar = FALSE),
    "Models selected by DDSE and Djump are different"),
    "There are some equivalent solutions")
  
  ## Second fit with finner grid
  monkeys$dat[1, 10] <- 0.2
  expect_message(
    res2 <- PhyloEM(Y_data = monkeys$dat,
                    phylo = monkeys$phy,
                    process = "scOU",
                    random.root = TRUE,
                    stationary.root = TRUE,
                    K_max = 10,
                    alpha = c(0.22, 0.24),
                    parallel_alpha = FALSE,
                    progress.bar = FALSE),
    "There are some equivalent solutions")
  
  expect_error(merge_alpha_grids(), "There should be at least")
  expect_equal(merge_alpha_grids(res1), res1)
  expect_error(merge_alpha_grids(res1, res2), "Component Y_data of PhyloEM results number 1 and number 2 are different.")
})
pbastide/PhylogeneticEM documentation built on Feb. 21, 2025, 9:46 a.m.