tests/testthat/test-fit_gee.R

# build_formula ----

test_that("build_formula builds the correct formula", {
  vars <- list(response = "AVAL", id = "USUBJID", arm = "ARMCD", visit = "AVISIT", covariates = c("RACE", "SEX"))
  result <- as.character(build_formula(vars))
  expected <- as.character(AVAL ~ ARMCD + RACE + SEX)
  expect_identical(result, expected)
})

test_that("build_formula works without covariates", {
  result <- expect_silent(build_formula(vars_gee()))
  expected <- AVAL ~ ARM
  expect_equal(result, expected, ignore_attr = TRUE)
})

# build_family ----

test_that("build_family returns the correct class", {
  result <- build_family("logistic")
  expected <- "tern_gee_logistic"
  expect_identical(result$class, expected)
  expect_class(result$object, "family")
})

test_that("build_family gives error message if incorrect regression type is given", {
  expect_error(build_family("BLAHHH"), "regression type BLAHHH not supported")
})

# build_cor_details ----

test_that("build_cor_details returns the correct correlation details", {
  result <- as.character(build_cor_details("unstructured", fev_vars, fev_data))
  expected <- c("unstructured", "1")
  expect_identical(result, expected)
})

test_that("build_cor_details gives error message if incorrect correlation structure is given", {
  expect_error(build_cor_details("BLAHHH", fev_vars, fev_data), "correlation structure BLAHHH not available")
})

# order_data ----

test_that("order_data works as expected", {
  vars <- list(id = "USUBJID", visit = "AVISIT")
  df <- fev_data[c(7, 2, 9, 3, 1, 5, 8, 6, 4, 10), ]
  expect_factor(df$USUBJID)
  result <- expect_silent(order_data(data = df, vars = vars))
  expect_integer(result$USUBJID, sorted = TRUE)
  result_order <- order(result$USUBJID, result$AVISIT)
  expect_identical(result_order, seq_len(nrow(result)))
})

test_that("order_data messages are as expected and can be suppressed for character visit variable", {
  vars <- list(id = "USUBJID", visit = "AVISIT")
  df <- fev_data[c(7, 2, 9, 3, 1, 5, 8, 6, 4, 10), ]
  df$AVISIT <- as.character(df$AVISIT)
  expect_message(
    expect_message(
      expect_message(
        result <- order_data(data = df, vars = vars),
        "visit variable AVISIT will be coerced to factor for ordering"
      ),
      "order is:"
    ),
    "VIS1, VIS2, VIS3, VIS4"
  )
  expect_integer(result$USUBJID, sorted = TRUE)
  result_order <- order(result$USUBJID, result$AVISIT)
  expect_identical(result_order, seq_len(nrow(result)))
})

# fit_gee ----

## logistic ----

test_that("fit_gee works as expected for unstructured correlation structure", {
  result <- expect_silent(fit_gee(
    vars = fev_vars,
    data = fev_data,
    regression = "logistic",
    cor_struct = "unstructured"
  ))
  expect_class(result, c("tern_gee_logistic", "tern_gee", "geelm"))
})

test_that("fit_gee works as expected for AR1 correlation structure", {
  result <- expect_silent(fit_gee(
    vars = fev_vars,
    data = fev_data,
    regression = "logistic",
    cor_struct = "auto-regressive"
  ))
  expect_class(result, c("tern_gee_logistic", "tern_gee", "geelm"))
})

test_that("fit_gee works as expected for compound symmetry correlation structure", {
  result <- expect_silent(fit_gee(
    vars = fev_vars,
    data = fev_data,
    regression = "logistic",
    cor_struct = "compound symmetry"
  ))
  expect_class(result, c("tern_gee_logistic", "tern_gee", "geelm"))
})

test_that("fit_gee works as expected for Toeplitz correlation structure", {
  result <- expect_silent(fit_gee(
    vars = fev_vars,
    data = fev_data,
    regression = "logistic",
    cor_struct = "toeplitz"
  ))
  expect_class(result, c("tern_gee_logistic", "tern_gee", "geelm"))
})

Try the tern.gee package in your browser

Any scripts or data that you put into this service are public.

tern.gee documentation built on Sept. 11, 2024, 8:11 p.m.