tests/testthat/test.dredge_regression.r

context("dredge_regression")

library(magrittr)
#library(testthat)

rm(list = ls())
set.seed(0)
seqcol <- 1:10
seqcol_tosmall <- 1:2
chrcol <- rep(c("a", "b"), c(10,10))
y2 <- c(rnorm(10), rnorm(10, mean = 2))
y3 <- c(rnorm(10, mean = 2), rnorm(10, mean = 4))
y4 <- y3 + 1
y6 <- 1:10 + 1 %>% as.integer()
y7 <- c("q", "w", "e", "r", "t", "y", "u", "i", "o", "p")
empty_grid <-
  data.frame(
    formula = character())

#### parameters invalid on its face ####

# bad df
expect_error(
  NULL %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = 0,
      max_pvalue = 0.05),
  "data %>% is.data.frame()",
  fixed = T)

# not enough rows
expect_error(
  data.frame(seqcol_tosmall) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = 0,
      max_pvalue = 0.05),
  "data %>% nrow() >= 3",
  fixed = T)

# bad grid
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = NULL,
      min_pvalue = 0,
      max_pvalue = 0.05),
  "grid %>% is.data.frame()",
  fixed = T)

# bad min_pvalue
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = "a",
      max_pvalue = 0.05),
  "min_pvalue %>% is.numeric()",
  fixed = T)

# min_pvalue too small
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = -1,
      max_pvalue = 0.05),
  "min_pvalue >= 0",
  fixed = T)

# min_pvalue too big
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = 1,
      max_pvalue = 0.05),
  "min_pvalue < 1",
  fixed = T)

# bad max_pvalue
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = 0,
      max_pvalue = "a"),
  "max_pvalue %>% is.numeric()",
  fixed = T)

# max_pvalue too small
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = 0,
      max_pvalue = -1),
  "max_pvalue >= 0",
  fixed = T)

# max_pvalue too big
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = 0,
      max_pvalue = 1),
  "max_pvalue < 1",
  fixed = T)

# bad pvalue range
expect_error(
  data.frame(seqcol) %>%
    dredge_regression(
      grid = empty_grid,
      min_pvalue = .5,
      max_pvalue = .25),
  "min_pvalue < max_pvalue",
  fixed = T)


#### bad regression issues ####

# perfect numeric continuous regression
data <- data.frame(a = y3, b = y4, stringsAsFactors = F) 
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 1e-10,
    max_pvalue = 0.05)
expect_equal(actual %>% nrow(), 0)

# perfect integer continuous regression
data <- data.frame(a = seqcol, b = y6, stringsAsFactors = F)
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expect_equal(actual %>% nrow(), 0)

# perfect numeric ~ categorical regression
data <- data.frame(a = seqcol, b = y7, stringsAsFactors = F)
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expect_equal(actual %>% nrow(), 0)

# perfect integer ~ categorical regression
data <- data.frame(a = y6, b = y7, stringsAsFactors = F)
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expect_equal(actual %>% nrow(), 0)

#### normal analysis ####

# empty grid
data <- data.frame(a = chrcol, b = y2, stringsAsFactors = F)
actual <-
  data %>%
  dredge_regression(
    grid = empty_grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expect_equal(actual %>% nrow(), 0)

# categorical predicts continuous
data <-
  data.frame(a = chrcol, b = y2, stringsAsFactors = F) %>%
  adjust_grid_for_regression()
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expected <- data.frame(
  formula = c("b~a"),
  best_pvalue = c(0.01135),
  adjusted_r_squared = c(0.26782),
  stringsAsFactors = F)
expect_equal(actual, expected, tolerance = 0.001)

# continuous predicts continuous 
data <-
  data.frame(a = y2, b = y3, stringsAsFactors = F) %>%
  adjust_grid_for_regression()
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expected <- data.frame(
  formula = c("b~a", "a~b"),
  best_pvalue = c(0.01400, 0.01400),
  adjusted_r_squared = c(0.25210, 0.25210),
  stringsAsFactors = F)
expect_equal(actual, expected, tolerance = 0.001)

# mixed case test
data <-
  data.frame(a = chrcol, b = y2, c = y3, stringsAsFactors = F) %>%
  adjust_grid_for_regression()
grid <-
  data %>%
  make_regression_grid(max_columns = 4, beam_width = 1000)
actual <-
  data %>%
  dredge_regression(
    grid = grid,
    min_pvalue = 0,
    max_pvalue = 0.05)
expected <- data.frame(
  formula = c("c~b*a", "c~b", "b~c", "b~a", "c~a"),
  best_pvalue = c(0.00029, 0.01400, 0.01400, 0.01135, 0),
  adjusted_r_squared = c(0.67321, 0.25210, 0.25210, 0.26782, 0.67155),
  stringsAsFactors = F)
expect_equal(actual, expected, tolerance = 0.001)
markanewman/mndredge documentation built on May 9, 2019, 5:52 a.m.