tests/testthat/test-simpleRmsAnova.R

library("testthat")

library(rms)

test_that("Basic test for coverage for simpleRmsAnova", {
  # TODO: Add more specific tests
  # ** Borrowed code from the lrm example **
  n <- 1000 # define sample size
  set.seed(17) # so can reproduce the results
  age <- rnorm(n, 50, 10)
  blood.pressure <- rnorm(n, 120, 15)
  cholesterol <- rnorm(n, 200, 25)
  sex <- factor(sample(c("female", "male"), n, TRUE))
  label(age) <- "Age" # label is in Hmisc
  label(cholesterol) <- "Total Cholesterol"
  label(blood.pressure) <- "Systolic Blood Pressure"
  label(sex) <- "Sex"
  units(cholesterol) <- "mg/dl" # uses units.default in Hmisc
  units(blood.pressure) <- "mmHg"
  
  # To use prop. odds model, avoid using a huge number of intercepts by
  # grouping cholesterol into 40-tiles
  
  # Specify population model for log odds that Y = 1
  L <- .4 * (sex == "male") + .045 * (age - 50) +
    (log(cholesterol - 10) - 5.2) * (-2 * (sex == "female") + 2 * (sex == "male"))
  # Simulate binary y to have Prob(y = 1) = 1/[1+exp(-L)]
  y <- ifelse(runif(n) < plogis(L), 1, 0)
  cholesterol[1:3] <- NA # 3 missings, at random
  
  ddist <<- datadist(age, blood.pressure, cholesterol, sex)
  options(datadist = "ddist")
  
  fit_lrm <- lrm(y ~ blood.pressure + sex * (age + rcs(cholesterol, 4)),
    x = TRUE, y = TRUE
  )

  a_out <- anova(fit_lrm,
    dec.F = 1,
    ss = FALSE
  )

  a <- simpleRmsAnova(a_out,
    subregexps = rbind(
      c("blood.pressure", "Blood pressure"),
      c("age", "Age"),
      c("cholesterol", "Cholesterol"),
      c("sex", "Sex")
    ),
    caption = "Anova output for a logistic regression model"
  )
  expect_equivalent(dim(a), dim(a_out))
  expect_equivalent(sum(grepl("Blood pressure", dimnames(a)[[1]], fixed = TRUE)), 1)

  sink(file = ifelse(Sys.info()["sysname"] == "Windows",
    "NUL",
    "/dev/null"
  ))
  p_out <- print(a)
  sink()
  expect_true(inherits(p_out, "htmlTable"))

  a <- simpleRmsAnova(a_out,
    caption = "Anova output for a logistic regression model"
  )
  expect_equivalent(sum(grepl("Blood pressure", dimnames(a)[[1]], fixed = TRUE)), 0)
})
gforge/Greg documentation built on Feb. 3, 2024, 5:37 a.m.