suppressPackageStartupMessages({
library(dplyr)
library(testthat)
library(tibble)
})
test_that("ancova", {
##################
#
# Basic usage
#
#
set.seed(101)
n <- 1000
dat <- tibble(
visit = "vis1",
age1 = rnorm(n),
age2 = rnorm(n),
grp = factor(sample(c("A", "B"), size = n, replace = TRUE)),
out = rnorm(n, mean = 50 + 3 * f2n(grp) + 4 * age1 + 8 * age2, sd = 20)
)
mod <- lm(out ~ age1 + age2 + grp, data = dat)
result_expected <- list(
"trt_vis1" = list(
"est" = mod$coefficients[[4]],
"se" = sqrt(vcov(mod)[4, 4]),
"df" = df.residual(mod)
)
)
result_actual <- ancova(
dat,
list(outcome = "out", group = "grp", covariates = c("age1", "age2"), visit = "visit")
)["trt_vis1"]
expect_equal(result_expected, result_actual)
##################
#
# No Covariates
#
#
set.seed(101)
n <- 1000
dat <- tibble(
ivis = " 1",
age1 = rnorm(n),
age2 = rnorm(n),
grp = factor(sample(c("A", "B"), size = n, replace = TRUE)),
out = rnorm(n, mean = 50 + 3 * f2n(grp) + 4 * age1 + 8 * age2, sd = 20)
)
mod <- lm(out ~ grp, data = dat)
result_expected <- list(
"trt_ 1" = list(
"est" = mod$coefficients[[2]],
"se" = sqrt(vcov(mod)[2, 2]),
"df" = df.residual(mod)
)
)
result_actual <- ancova(dat, list(outcome = "out", group = "grp", visit = "ivis"))["trt_ 1"]
expect_equal(result_expected, result_actual)
##################
#
# Single visit
#
#
n <- 1000
dat <- tibble(
age1 = rnorm(n),
age2 = rnorm(n),
vis = "visit 1",
grp = factor(sample(c("A", "B"), size = n, replace = TRUE)),
out = rnorm(n, mean = 50 + 3 * f2n(grp) + 4 * age1 + 8 * age2, sd = 20)
)
mod <- lm(out ~ age1 + age2 + grp, data = dat)
result_expected <- list(
"trt_visit 1" = list(
"est" = mod$coefficients[[4]],
"se" = sqrt(vcov(mod)[4, 4]),
"df" = df.residual(mod)
)
)
result_actual <- ancova(
dat,
list(
outcome = "out",
group = "grp",
covariates = c("age1", "age2"),
visit = "vis"
),
visits = "visit 1"
)["trt_visit 1"]
expect_equal(result_expected, result_actual)
##################
#
# Multiple Visits
#
#
n <- 1000
dat <- tibble(
age1 = rnorm(n),
age2 = rnorm(n),
vis = sample(c("visit 1", "visit 2"), size = n, replace = TRUE),
grp = factor(sample(c("A", "B"), size = n, replace = TRUE)),
out = rnorm(n, mean = 50 + 3 * f2n(grp) + 4 * age1 + 8 * age2, sd = 20)
)
mod <- lm(out ~ age1 + age2 + grp, data = filter(dat, vis == "visit 1"))
result_expected <- list(
"trt_visit 1" = list(
"est" = mod$coefficients[[4]],
"se" = sqrt(vcov(mod)[4, 4]),
"df" = df.residual(mod)
)
)
result_actual <- ancova(
dat,
list(
outcome = "out",
group = "grp",
covariates = c("age1", "age2"),
visit = "vis"
),
visits = "visit 1"
)["trt_visit 1"]
expect_equal(result_expected, result_actual)
result_actual <- ancova(
dat,
list(
outcome = "out",
group = "grp",
covariates = c("age1", "age2"),
visit = "vis"
),
visits = c("visit 1", "visit 2")
)["trt_visit 1"]
expect_equal(result_expected, result_actual)
result_actual <- ancova(
dat,
list(
outcome = "out",
group = "grp",
covariates = c("age1", "age2"),
visit = "vis"
),
visits = c("visit 1", "visit 2")
)
mod <- lm(out ~ age1 + age2 + grp, data = filter(dat, vis == "visit 2"))
result_expected <- list(
"trt_visit 2" = list(
"est" = mod$coefficients[[4]],
"se" = sqrt(vcov(mod)[4, 4]),
"df" = df.residual(mod)
)
)
expect_equal(result_expected, result_actual["trt_visit 2"])
expect_equal(
names(result_actual),
c(
"trt_visit 1", "lsm_ref_visit 1", "lsm_alt_visit 1",
"trt_visit 2", "lsm_ref_visit 2", "lsm_alt_visit 2"
)
)
##################
#
# Visit variable handling
#
#
n <- 1000
dat <- tibble(
age1 = rnorm(n),
age2 = rnorm(n),
vis = sample(c("visit 1", "visit 2"), size = n, replace = TRUE),
grp = factor(sample(c("A", "B"), size = n, replace = TRUE)),
out = rnorm(n, mean = 50 + 3 * f2n(grp) + 4 * age1 + 8 * age2, sd = 20)
)
vars <- set_vars(
outcome = "out",
group = "grp",
covariates = c("age1", "age2")
)
vars$visit <- "vi"
expect_error(
ancova(dat, vars, visits = "k"),
regex = "`vi`"
)
vars$visit <- "vis"
expect_error(
ancova(dat, vars, visits = "k"),
regex = "`k`"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.