tests/testthat/test-performance-math.R

testthat::context("performance-math")

testthat::test_that("bias", {
  set.seed(20190107)
  n <- 1000

  # No bias
  df <- data.frame(
    i = seq(n),
    b = rnorm(n = n, mean = 0.50, sd = 0.001),
    se = exp(rnorm(n = n, mean = 0.1, sd = 0.1))
  )
  s <- rsimsum::simsum(data = df, estvarname = "b", se = "se", true = 0.50)
  testthat::expect_equal(object = s$summ$est[s$summ$stat == "bias"], expected = 0, tolerance = 1e-4)

  # Positive bias
  df <- data.frame(
    i = seq(n),
    b = rnorm(n = n, mean = 0.5001, sd = 0.001),
    se = exp(rnorm(n = n, mean = 0.1, sd = 0.1))
  )
  s <- rsimsum::simsum(data = df, estvarname = "b", se = "se", true = 0.50)
  testthat::expect_true(object = (s$summ$est[s$summ$stat == "bias"] > 0))

  # Negative bias
  df <- data.frame(
    i = seq(n),
    b = rnorm(n = n, mean = 0.4999, sd = 0.001),
    se = exp(rnorm(n = n, mean = 0.1, sd = 0.1))
  )
  s <- rsimsum::simsum(data = df, estvarname = "b", se = "se", true = 0.50)
  testthat::expect_true(object = (s$summ$est[s$summ$stat == "bias"] < 0))
})

### Compare MIsim results with Stata's
testthat::test_that("MIsim, vs Stata", {
  data("MIsim", package = "rsimsum")
  r <- rsimsum::simsum(data = MIsim, estvarname = "b", se = "se", true = 0.5, methodvar = "method")$summ
  r <- r[!(r$stat %in% c("thetamean", "thetamedian", "se2mean", "se2median", "nsim", "rbias", "becover")), ]
  r$method <- as.character(r$method)
  r <- r[order(r$stat, r$method), ]
  s <- MIsim_res_stata
  s <- s[order(s$stat, s$method), ]
  # Test equivalence of estimates
  testthat::expect_equivalent(object = r$est, expected = s$est, tolerance = 1e-6)
  # Test equivalence of MCSEs
  testthat::expect_equivalent(object = r$mcse, expected = s$mcse, tolerance = 1e-3)
})

### Compare relhaz results with Stata's
testthat::test_that("relhaz, vs Stata", {
  data("relhaz", package = "rsimsum")
  relhaz$model <- as.numeric(factor(relhaz$model))
  r <- rsimsum::simsum(data = relhaz, estvarname = "theta", se = "se", true = -0.5, methodvar = "model", by = c("n", "baseline"))$summ
  r <- r[!(r$stat %in% c("thetamean", "thetamedian", "se2mean", "se2median", "nsim", "rbias", "becover")), ]
  r$model <- as.character(r$model)
  r$n <- as.character(r$n)
  r$baseline <- as.character(r$baseline)
  r <- r[order(r$stat, r$model, r$n, r$baseline), ]
  s <- relhaz_res_stata
  s <- s[order(s$stat, s$model, s$n, s$baseline), ]
  # Test equivalence of estimates
  testthat::expect_equivalent(object = r$est, expected = s$est, tolerance = 1e-6)
  # Test equivalence of MCSEs
  testthat::expect_equivalent(object = r$mcse, expected = s$mcse, tolerance = 0.005)
})
ellessenne/rsimsum documentation built on March 10, 2024, 1:21 p.m.