tests/testthat/testSimulateIOV.R

library(testthat)

context("Test the simulate method with IOV")

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

test_that(getTestName("Simulate 1000mg QD with IOV on KA (1)"), {
  if (skipLongTest) return(TRUE)
  regFilename <- "3_boluses_iov_ka_1"
  model <- model_suite$testing$nonmem$advan4_trans4
  model <- model %>% replace(Equation("KA", "THETA_KA*exp(ETA_KA + IOV_KA)"))
  obsTimes1 <- c(15, 50, 55, 60, 65, 70) # by 0.5 in the non-regression file
  obsTimes2 <- seq(0, 72, by=0.5)
  
  for (obsTimes in list(obsTimes1, obsTimes2)) {
    dataset <- Dataset(10) %>%
      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)) %>%
      add(IOV(colname="IOV_KA", distribution=FunctionDistribution(fun="rnorm", args=list(mean=0, sd=0.2))))
    
    expect_equal(dataset %>% getIOVs() %>% getNames(), "IOV_KA")
    
    #table_rxode <- dataset %>% export(dest="RxODE", model=model, seed=seed, nocb=TRUE)
    #table_mrgsolve <- dataset %>% export(dest="mrgsolve", model=model, seed=seed, nocb=TRUE)
    
    # NOCB=FALSE
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(FALSE, "IOV_KA"))))
    test <- expression(
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())

    # NOCB=TRUE
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(TRUE, "IOV_KA"))))
    test <- expression(
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())
  }
})

test_that(getTestName("Simulate 1000mg QD with IOV on KA (2)"), {
  # This test could sometimes fail with RxODE version > 1.0.5 & < 1.1.0
  if (skipLongTest) return(TRUE)
  regFilename <- "3_boluses_iov_ka_2"
  model <- model_suite$testing$nonmem$advan4_trans4
  model <- model %>% replace(Equation("KA", "THETA_KA*exp(ETA_KA + IOV_KA)"))
  model <- model %>% add(Omega("IOV_KA", value=0.2^2))

  dataset <- Dataset(10) %>%
    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=seq(0,72, by=0.5))) %>%
    add(IOV(colname="IOV_KA", distribution=EtaDistribution(model, omega="IOV_KA")))

  # NOCB=FALSE
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(FALSE, "IOV_KA"))))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
  
  # NOCB=TRUE
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(TRUE, "IOV_KA"))))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
})

test_that(getTestName("Simulate IOV on F1"), {
  # This test always failed with RxODE version > 1.0.5 & < 1.1.0
  if (skipLongTest) return(TRUE)
  regFilename <- "3_boluses_iiv_iov_f1"

  # Model with IIV and IOV on F1
  model <- model_suite$testing$nonmem$advan4_trans4 %>%
    add(Theta("F1", value=0.75)) %>%
    add(Omega("F1", value=0.2^2)) %>%
    add(Omega("IOV_F1", index=7, index2=7, value=0.2^2, same=FALSE)) %>% # 20% IOV
    add(Bioavailability(compartment=1, rhs="F1")) %>% 
    add(Equation("F1", "THETA_F1*exp(ETA_F1 + IOV_F1)"), Position(Equation("Q")))

  getDataset <- function(model) {
    dataset <- Dataset(10) %>%
      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=seq(0,72, by=4))) %>% 
      add(IOV(colname="IOV_F1", distribution=EtaDistribution(model, omega="IOV_F1")))
    return(dataset)
  }

  # IIV only
  model_no_iov <- model %>% disable("IOV")
  dataset_no_iov <- getDataset(model_no_iov)
  datasetRegressionTest(dataset_no_iov, model_no_iov, seed=seed, filename="3_boluses_iiv_f1")

  # IIV + IOV (RxODE / mrgsolve)
  dataset <- getDataset(model)
  datasetRegressionTest(dataset, model, seed=seed, filename=regFilename)
  
  # NOCB=FALSE
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(FALSE))))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
  
  # NOCB=TRUE
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(TRUE))))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
})


test_that(getTestName("Simulate IOV on ALAG1"), {
  # This test always failed with RxODE version > 1.0.5 & < 1.1.0
  if (skipLongTest) return(TRUE)
  regFilename <- "3_boluses_iiv_iov_alag1"

  # Model with IIV on ALAG1
  model <- model_suite$testing$nonmem$advan4_trans4 %>%
    add(Theta("ALAG1", value=5)) %>%
    add(Omega("ALAG1", value=0.2^2)) %>%
    add(Omega("IOV_ALAG1", value=0.2^2, same=FALSE)) %>% # 20% IOV in model  
    add(LagTime(compartment=1, rhs="ALAG1")) %>%
    add(Equation("ALAG1", "THETA_ALAG1*exp(ETA_ALAG1 + IOV_ALAG1)"))

  obsTimes <- seq(0,72, by=0.5)
  getDataset <- function(model, times) {
    dataset <- Dataset(10) %>%
      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=times)) %>%
      add(IOV(colname="IOV_ALAG1", distribution=EtaDistribution(model, omega="IOV_ALAG1")))
    return(dataset)
  }

  # IIV only
  model_no_iov <- model %>% disable("IOV")
  dataset_no_iov <- getDataset(model_no_iov, obsTimes)
  datasetRegressionTest(dataset_no_iov, model_no_iov, seed=seed, filename="3_boluses_iiv_alag1")

  # IIV + IOV (RxODE / mrgsolve)
  dataset <- getDataset(model, obsTimes)
  datasetRegressionTest(dataset, model, seed=seed, filename=regFilename)

  startTimes <- c(0,24,47) # 47,48 NOT WORKING WITH MRGSOLVE LOCF
  for (startTime in startTimes) {
    #cat(startTime)
    obsTimes <- seq(startTime, 72, by=1)
    dataset <- getDataset(model, obsTimes)

    #table_rxode <- dataset %>% export(dest="RxODE", model=model, seed=seed, nocb=FALSE)
    #table_mrgsolve <- dataset %>% export(dest="mrgsolve", model=model, seed=seed, nocb=FALSE)

    # NOCB=FALSE
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(FALSE))))
    test <- expression(
      # Bug in RxODE/rxode2 (time 0 is there while it should not)
      results <- if (startTime != 0) {results %>% dplyr::filter(TIME != 0)} else {results},
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())
    
    # NOCB=TRUE
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(TRUE))))
    test <- expression(
      # Bug in RxODE/rxode2 (time 0 is there while it should not)
      results <- if (startTime != 0) {results %>% dplyr::filter(TIME != 0)} else {results},
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())
  }
})

test_that(getTestName("Simulate IOV on D1"), {
  if (skipLongTest) return(TRUE)
  regFilename <- "3_infusions_iiv_iov_d1"

  # Model with IIV on D1
  model <- model_suite$testing$nonmem$advan3_trans4 %>%
    add(Theta("D1", value=5)) %>%
    add(Omega("D1", value=0.2^2)) %>%
    add(Omega("IOV_D1", value=0.5^2, same=FALSE)) %>% # 50% IOV  
    add(InfusionDuration(compartment=1, rhs="D1")) %>%
    add(Equation("D1", "THETA_D1*exp(ETA_D1 + IOV_D1)"))

  getDataset <- function(model) {
    dataset <- Dataset(10) %>%
      add(Infusion(time=0, amount=1000, compartment=1)) %>% 
      add(Infusion(time=24, amount=1000, compartment=1)) %>% 
      add(Infusion(time=48, amount=1000, compartment=1)) %>% 
      add(Observations(times=seq(0,72, by=0.5))) %>% 
      add(IOV(colname="IOV_D1", distribution=EtaDistribution(model, omega="IOV_D1")))
    return(dataset)
  }

  # IIV only
  model_no_iov <- model %>% disable("IOV")
  dataset_no_iov <- getDataset(model_no_iov)
  datasetRegressionTest(dataset_no_iov, model_no_iov, seed=seed, filename="3_infusions_iiv_d1")

  # IIV + IOV (RxODE / mrgsolve)
  dataset <- getDataset(model)
  datasetRegressionTest(dataset, model, seed=seed, filename=regFilename)

  # NOCB=FALSE
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(FALSE))))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
  
  # NOCB=TRUE
  simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(TRUE))))
  test <- expression(
    outputRegressionTest(results, output="CP", filename=regFilename),
    spaghettiPlot(results, "CP")
  )
  campsisTest(simulation, test, env=environment())
})

test_that(getTestName("Simulate IOV on F1"), {
  if (skipLongTest) return(TRUE)
  regFilename <- "3_bolus_iov_on_f1"

  # Model with IIV on D1
  model <- model_suite$testing$nonmem$advan4_trans4 %>%
    add(Theta("F1", value=0.75)) %>%
    add(Omega("F1", value=0.09)) %>% # 30% CV  
    add(Equation("F1", "THETA_F1*exp(ETA_F1 + IOV_F1)")) %>%
    add(Bioavailability(1, rhs="F1"))

  startTimes <- c(0,24,47) # 47,48 NOT WORKING WITH MRGSOLVE LOCF
  for (startTime in startTimes) {
    #cat(startTime)
    obsTimes <- seq(startTime, 72, by=1)
    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)) %>% 
      add(IOV(colname="IOV_F1", NormalDistribution(0, 0.5))) # 50% CV in addition

    #table_rxode <- dataset %>% export(dest="RxODE", model=model, seed=seed)
    #table_mrgsolve <- dataset %>% export(dest="mrgsolve", model=model, seed=seed)
    
    # NOCB=FALSE
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(FALSE)), outvars="F1"))
    test <- expression(
      outputRegressionTest(results, output="CP", filename=regFilename, times=obsTimes),
      spaghettiPlot(results, "CP")
    )
    campsisTest(simulation, test, env=environment())
    
    # NOCB=TRUE
    simulation <- expression(simulate(model=model, dataset=dataset, dest=destEngine, seed=seed, settings=Settings(NOCB(TRUE)), outvars="F1"))
    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.