tests/testthat/testSimulateNocbLocf.R

library(testthat)

context("Test the simulate method with the NOCB/LOCF switch")

seed <- 1
source(paste0("", "testUtils.R"))

test_that(getTestName("Weight as a time-varying covariate, NOCB vs LOCF"), {
  if (skipLongTest) return(TRUE)
  model <- model_suite$testing$nonmem$advan4_trans4
  equation <- model %>% find(Equation("CL"))
  model <- model %>% replace(Equation("CL", paste0(equation@rhs, "*pow(BW/70, 0.75)")))
  
  dataset <- Dataset(4) %>%
    add(Bolus(time=0, amount=1000, compartment=1)) %>%
    add(Bolus(time=24, amount=1000, compartment=1)) %>%
    add(Observations(times=c(0,3,9,16,24,26,48)))

  # Left join time-varying BW column
  table <- dataset %>% export(dest="RxODE", model=model, seed=seed) # CAREFUL, SEED NEEDED FOR REPRODUCIBILITY
  weight <- data.frame(TIME=c(0,3,9,16,24,26,48), BW=c(150,20,100,250,40,170,10))
  table <- table %>% dplyr::left_join(weight, by="TIME")
  
  # Dataset non-regression test
  datasetRegressionTest(dataset, model, seed=seed, filename="wt_as_time_varying_cov")
  
  # LOCF tests
  regFilename <- "wt_as_time_varying_cov_locf"
  simulation <- expression(simulate(model=model, dataset=table, dest=destEngine, settings=Settings(NOCB(FALSE), Declare("BW")), seed=seed))
  # Note: argument declare is only needed for mrgsolve
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
  
  # NOCB tests
  regFilename <- "wt_as_time_varying_cov_nocb"
  simulation <- expression(simulate(model=model, dataset=table, dest=destEngine, settings=Settings(NOCB(TRUE), Declare("BW")), seed=seed))
  # Note: argument declare is only needed for mrgsolve
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
})


test_that(getTestName("NOCB/LOCF should not have any effect on treatment occasion"), {
  if (skipLongTest) return(TRUE)
  model <- model_suite$testing$nonmem$advan4_trans4 %>%
    delete(Equation("KA")) %>%
    add(Equation("KA", "0")) %>%
    add(IfStatement("OCC==1", Equation("KA", "THETA_KA*1.5*exp(ETA_KA)"))) %>%
    add(IfStatement("OCC==2", Equation("KA", "THETA_KA*0.5*exp(ETA_KA)"))) %>% 
    add(IfStatement("OCC==3", Equation("KA", "THETA_KA*0.1*exp(ETA_KA)")))
  
  dataset <- Dataset(3) %>%
    add(Bolus(time=0, amount=1000, compartment=1)) %>%
    add(Bolus(time=12, amount=1000, compartment=1)) %>%
    add(Bolus(time=24, amount=1000, compartment=1)) %>%
    add(Occasion("OCC", values=c(1,2,3), doseNumbers=c(1,2,3))) %>%
    add(Observations(times=seq(24, 36)))
  
  regFilename <- "occ_as_time_varying_cov"
  # table_rxode <- dataset %>% export(dest="RxODE", model=model, seed=seed)
  # table_mrgsolve <- dataset %>% export(dest="mrgsolve", model=model, seed=seed)
  
  # Dataset non-regression test
  datasetRegressionTest(dataset, model, seed=seed, filename=regFilename)
  
  # LOCF tests
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, settings=Settings(NOCB(FALSE, "OCC")), seed=seed, outvars="KA"))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
  
  # NOCB tests
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, settings=Settings(NOCB(TRUE, "OCC")), seed=seed, outvars="KA"))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
})

test_that(getTestName("NOCB/LOCF should not have any effect on IOV, e.g. on clearance"), {
  if (skipLongTest) return(TRUE)
  regFilename <- "3_boluses_iov_cl"
  model <- model_suite$testing$nonmem$advan4_trans4
  model <- model %>% replace(Equation("CL", rhs="THETA_CL*exp(ETA_CL + IOV_CL)"))
  
  for(startTime in c(0, 20, 23, 24, 48)) {
    obsTimes <- seq(startTime,72, by=5)

    dataset <- Dataset(3) %>%
      add(Bolus(time=0, amount=1000, compartment=1)) %>%
      add(Bolus(time=24, amount=1000, compartment=1)) %>%
      add(Bolus(time=48, amount=1000, compartment=1)) %>%
      add(Observations(times=obsTimes)) %>% # BEFORE by 0.5, NOW by 5  
      add(IOV(colname="IOV_CL", distribution=FunctionDistribution(fun="rnorm", args=list(mean=0, sd=1))))
    
    # table_rxode <- dataset %>% export(dest="RxODE", model=model, seed=seed)
    # table_mrgsolve <- dataset %>% export(dest="mrgsolve", model=model, seed=seed)
    
    # LOCF tests
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, settings=Settings(NOCB(FALSE, "IOV_CL")), seed=seed))
    test <- expression(
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())
    
    # NOCB tests
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, settings=Settings(NOCB(TRUE, "IOV_CL")), seed=seed))
    test <- expression(
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())
  }
  
})
Calvagone/campsis documentation built on April 17, 2024, 5:33 a.m.