tests/testthat/testCovariate.R

library(testthat)

context("Test all methods from the covariate class")

test_that("Constant covariate", {
  
  covariate <- Covariate("WT", ConstantDistribution(70)) 
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@value, 70)
  expect_equal(is(covariate, "covariate"), TRUE)
  expect_equal(is(covariate, "fixed_covariate"), TRUE)
  expect_equal(is(covariate, "time_varying_covariate"), FALSE)
  
  # No distribution argument is provided
  expect_error(Covariate("WT"))
  
  # Two values provided
  expect_error(Covariate("WT", ConstantDistribution(c(60,70))))
})

test_that("Fixed covariate", {
  
  covariate <- Covariate("WT", FixedDistribution(c(50, 60, 70)))
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@values, c(50, 60, 70))
  
  # No distribution argument is provided
  expect_error(Covariate("WT"))
  
  # Empty values list
  expect_error(Covariate("WT", FixedDistribution(numeric(0))))
})

test_that("Function covariate", {
  
  # Example 1
  covariate <- Covariate(name="VAR", FunctionDistribution(fun="sample.int", args=list(n=10, size="n")))
  expect_equal(covariate@name, "VAR")
  expect_equal(covariate@distribution@args, list(n=10, size="n"))
  
  set.seed(1)
  covariate <- covariate %>% sample(n=as.integer(5))
  expect_equal(covariate@distribution@sampled_values, c(9, 4, 7, 1, 2))
  
  # Example 2
  covariate <- Covariate(name="WT", FunctionDistribution(fun="rnorm", args=list(mean=70, sd=5)))
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@args, list(mean=70, sd=5))
  
  set.seed(1)
  covariate <- covariate %>% sample(n=as.integer(5))
  expect_equal(round(covariate@distribution@sampled_values), c(67, 71, 66, 78, 72))
})

test_that("Bootstrap covariate", {
  set.seed(1)
  data <- rnorm(n=10, mean=70, sd=10)
  
  # Example 1: replacement=FALSE (default), random=FALSE (default)
  covariate <- Covariate(name="WT", BootstrapDistribution(data=data)) 
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@data, data)
  expect_equal(covariate@distribution@replacement, FALSE)
  expect_equal(covariate@distribution@random, FALSE)
  covariate <- covariate %>% sample(n=as.integer(5))
  expect_equal(covariate@distribution@sampled_values, data[1:5])
  
  # Example 2: replacement=FALSE (default), random=TRUE (default)
  set.seed(1)
  covariate <- Covariate(name="WT", BootstrapDistribution(data=data, replacement=FALSE, random=TRUE))
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@data, data)
  expect_equal(covariate@distribution@replacement, FALSE)
  expect_equal(covariate@distribution@random, TRUE)
  covariate <- covariate %>% sample(n=as.integer(5))
  expect_equal(covariate@distribution@sampled_values, data[c(9,4,7,1,2)])  
  
  # Example 3: replacement=TRUE (default), random=TRUE (default)
  covariate <- Covariate(name="WT", BootstrapDistribution(data=data, replacement=TRUE, random=FALSE))
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@data, data)
  expect_equal(covariate@distribution@replacement, TRUE)
  expect_equal(covariate@distribution@random, FALSE)
  covariate <- covariate %>% sample(n=as.integer(12))
  expect_equal(covariate@distribution@sampled_values, c(data, data[1:2]))
  
  # Example 4: replacement=TRUE (default), random=TRUE (default)
  set.seed(1)
  covariate <- Covariate(name="WT", BootstrapDistribution(data=data, replacement=TRUE, random=TRUE))
  expect_equal(covariate@name, "WT")
  expect_equal(covariate@distribution@data, data)
  expect_equal(covariate@distribution@replacement, TRUE)
  expect_equal(covariate@distribution@random, TRUE)
  covariate <- covariate %>% sample(n=as.integer(12))
  expect_equal(covariate@distribution@sampled_values, data[c(9,4,7,1,2,7,2,3,1,5,5,10)]) # match(covariate@values, data) 
})

test_that("Event-related covariate", {
  covariate <- EventCovariate("DOSE", 100) 
  expect_equal(covariate@name, "DOSE")
  expect_equal(covariate@distribution@value, 100)
  expect_equal(is(covariate, "covariate"), TRUE)
  expect_equal(is(covariate, "event_covariate"), TRUE)
  
  # No initial distribution argument is provided
  expect_error(EventCovariate("DOSE"))
})

test_that("Time-varying covariate", {
  
  expect_error(TimeVaryingCovariate("BW", table=data.frame()),
               regexp="TIME and VALUE are mandatory columns")
  
  expect_error(TimeVaryingCovariate("BW", data.frame(TIME=1, VALUE=50)),
               regexp="Please provide a value for time 0")

  expect_error(TimeVaryingCovariate("BW", table=data.frame(ID=c(1,2,3), TIME=c(0,1,1), VALUE=c(50,50,50))),
               regexp="Some ID's don't have a value for time 0: 2,3")
  
  expect_error(TimeVaryingCovariate("BW", table=data.frame(ID=c(1,1,2), TIME=c(0,0,0), VALUE=c(50,50,100))),
               regexp="Some ID's have several values for time 0")
  
  bw1 <- data.frame(ID=1, TIME=c(0), VALUE=c(70)) # Constant
  bw2 <- data.frame(ID=2, TIME=c(0, 24), VALUE=c(100, 90))
  bw3 <- data.frame(ID=3, TIME=c(0, 12, 25, 36), VALUE=c(90, 80, 70, 60))
  bw4 <- data.frame(ID=4, TIME=c(0, 12, 25, 36), VALUE=c(50, 40, 30, 20))
  cov <- TimeVaryingCovariate("BW", table=dplyr::bind_rows(bw1, bw2, bw3, bw4))
  
  expect_equal(cov@distribution, FixedDistribution(c(70,100,90,50)))
  expect_equal(cov@table, data.frame(ID=c(2,3,3,3,4,4,4), TIME=c(24,12,25,36,12,25,36), VALUE=c(90,80,70,60,40,30,20)))
})
Calvagone/campsis documentation built on April 17, 2024, 5:33 a.m.