tests/testthat/test_aglm-input.R

context("aglm-input")
library(aglm)


createX <- function(nobs, nvar_int, nvar_numeric, nvar_ordered, nvar_factor, seed=12345) {
  set.seed(seed)
  nobs <- nobs
  nvar <- nvar_int + nvar_numeric + nvar_ordered + nvar_factor

  data <- list()
  if (nvar_int > 0) for (i in 1:nvar_int) data[[paste0("Int", i)]] <- sample(1:10, size=nobs, replace=TRUE)
  if (nvar_numeric > 0) for (i in 1:nvar_numeric) data[[paste0("Num", i)]] <- rnorm(nobs)
  if (nvar_ordered > 0) for (i in 1:nvar_ordered) data[[paste0("Ord", i)]] <- ordered(sample(1:5, size=nobs, replace=TRUE))
  if (nvar_factor > 0) for (i in 1:nvar_factor) data[[paste0("Fac", i)]] <- factor(sample(c("A", "B", "C"), nobs, replace=TRUE))

  return(data.frame(data))
}

test_that("Check returned values of newInput() for each input type", {
  x <- newInput(createX(10, 1, 1, 1, 1))

  expect_equal(x@vars_info[[1]]$id, 1)
  expect_equal(x@vars_info[[1]]$data_column_idx, 1)
  expect_equal(x@vars_info[[1]]$type, "quan")
  expect_equal(x@vars_info[[1]]$use_linear, TRUE)
  expect_equal(x@vars_info[[1]]$use_UD, FALSE)
  expect_equal(x@vars_info[[1]]$use_OD, TRUE)
  expect_true(!is.null(x@vars_info[[1]]$OD_info))
  expect_true(is.null(x@vars_info[[1]]$UD_info))

  expect_equal(x@vars_info[[2]]$id, 2)
  expect_equal(x@vars_info[[2]]$data_column_idx, 2)
  expect_equal(x@vars_info[[2]]$type, "quan")
  expect_equal(x@vars_info[[2]]$use_linear, TRUE)
  expect_equal(x@vars_info[[2]]$use_UD, FALSE)
  expect_equal(x@vars_info[[2]]$use_OD, TRUE)
  expect_true(!is.null(x@vars_info[[2]]$OD_info))
  expect_true(is.null(x@vars_info[[2]]$UD_info))

  expect_equal(x@vars_info[[3]]$id, 3)
  expect_equal(x@vars_info[[3]]$data_column_idx, 3)
  expect_equal(x@vars_info[[3]]$type, "qual")
  expect_equal(x@vars_info[[3]]$use_linear, FALSE)
  expect_equal(x@vars_info[[3]]$use_UD, TRUE)
  expect_equal(x@vars_info[[3]]$use_OD, TRUE)
  expect_true(!is.null(x@vars_info[[3]]$UD_info))
  expect_true(!is.null(x@vars_info[[3]]$OD_info))

  expect_equal(x@vars_info[[4]]$id, 4)
  expect_equal(x@vars_info[[4]]$data_column_idx, 4)
  expect_equal(x@vars_info[[4]]$type, "qual")
  expect_equal(x@vars_info[[4]]$use_linear, FALSE)
  expect_equal(x@vars_info[[4]]$use_UD, TRUE)
  expect_equal(x@vars_info[[4]]$use_OD, FALSE)
  expect_true(!is.null(x@vars_info[[4]]$UD_info))
  expect_true(is.null(x@vars_info[[4]]$OD_info))
})


test_that("Check add_xxx flags of newInput()", {
  x <- newInput(createX(10, 1, 1, 1, 1), add_interaction_columns=FALSE)
  expect_equal(length(x@vars_info), 4)

  x <- newInput(createX(10, 1, 1, 1, 1), add_linear_columns=FALSE, add_interaction_columns=FALSE)
  expect_true(all(sapply(x@vars_info, function(var) {!var$use_linear})))

  x <- newInput(createX(10, 1, 1, 1, 1), add_OD_columns_of_qualitatives=FALSE, add_interaction_columns=FALSE)
  expect_true(all(sapply(x@vars_info, function(var) {var$type=="quan" | !var$use_OD})))
})

test_that("Check bins_list of newInput()", {
  bins_list <- list(c(0, 1, 2))
  x <- newInput(createX(10, 0, 5, 0, 0), bins_list=bins_list)
  expect_equal(x@vars_info[[1]]$OD_info$breaks, bins_list[[1]])

  bins_names <- list(3)
  x <- newInput(createX(10, 0, 5, 0, 0), bins_list=bins_list, bins_names=bins_names)
  expect_equal(x@vars_info[[3]]$OD_info$breaks, bins_list[[1]])

  bins_names <- list("Num5")
  x <- newInput(createX(10, 0, 5, 0, 0), bins_list=bins_list, bins_names=bins_names)
  #expect_equal(x@vars_info[[5]]$OD_info$breaks, bins_list[[1]])
})

test_that("Check return values of getDesignMatrix()", {
  x_int <- newInput(createX(10, 1, 0, 0, 0), add_interaction_columns=FALSE)
  mat_int <- getDesignMatrix(x_int)
  #print("")
  #print(t(x_int@data))
  #print(mat_int)
  expect_equal(mat_int[,1], x_int@data[,1])
  expect_equal(dim(mat_int), c(10, dim(getODummyMatForOneVec(mat_int[,1])$dummy_mat)[2] + 1))

  x_num <- newInput(createX(10, 0, 1, 0, 0), add_interaction_columns=FALSE)
  mat_num <- getDesignMatrix(x_num)
  #print("")
  #print(t(x_num@data))
  #print(mat_num)
  expect_equal(mat_num[,1], x_num@data[,1])
  expect_equal(dim(mat_num), c(10, dim(getODummyMatForOneVec(mat_num[,1])$dummy_mat)[2] + 1))

  x_ord <- newInput(createX(10, 0, 0, 1, 0), add_interaction_columns=FALSE)
  mat_ord <- getDesignMatrix(x_ord)
  #print("")
  #print(t(x_ord@data))
  #print(mat_ord)
  expect_equal(dim(mat_ord), c(10,
                               dim(getODummyMatForOneVec(x_ord@data[,1])$dummy_mat)[2]
                               + dim(getUDummyMatForOneVec(x_ord@data[,1], drop_last=FALSE)$dummy_mat)[2]))

  x_fac <- newInput(createX(10, 0, 0, 0, 1), add_interaction_columns=FALSE)
  mat_fac <- getDesignMatrix(x_fac)
  #print("")
  #print(t(x_fac@data))
  #print(mat_fac)
  expect_equal(dim(mat_fac), c(10, dim(getUDummyMatForOneVec(x_fac@data[,1], drop_last=FALSE)$dummy_mat)[2]))

  x_all <- newInput(data.frame(x_int@data, x_num@data, x_ord@data, x_fac@data), add_interaction_columns=FALSE)
  mat_all <- getDesignMatrix(x_all)
  expect_equal(mat_all, cbind(mat_int, mat_num, mat_ord, mat_fac))


  ## Check interaction columns
  x_inter <- newInput(data.frame(x_int@data,  x_fac@data), add_interaction_columns=TRUE)
  mat_inter <- getDesignMatrix(x_inter)
  a <- dim(mat_int)[2] + dim(mat_fac)[2]
  b <- dim(x_int@data)[2] + dim(mat_fac)[2]
  expect_equal(dim(mat_inter), c(10, a + b * (b - 1) / 2))
})
kazuzowo/aglm-LVar documentation built on Dec. 10, 2019, 12:13 a.m.