tests/testthat/test-focei-wang2007.R

nmTest({

  .nlmixr <- function(...) {
    rxode2::rxUnloadAll()
    suppressMessages(suppressWarnings(nlmixr(...)))
  }
  #.nlmixr <- function(...) nlmixr(...)


  dat <- Wang2007
  dat$DV <- dat$Y

  ## Enhance data frame to include dosing records.
  dat2 <- dat[dat$Time == 0, ]
  dat2$EVID <- 101
  dat2$AMT <- 10
  dat2 <- rbind(dat2, data.frame(dat, EVID = 0, AMT = 0))
  dat2 <- dat2[(order(dat2$ID, -dat2$EVID, dat2$Time)), ]

  datl <- dat
  datl$DV <- log(datl$DV)

  datl2 <- dat2
  datl2$DV <- log(datl2$DV)

  f <- function() {
    ini({
      tke <- 0.5
      eta.ke ~ 0.04
      prop.sd <- sqrt(0.1)
    })
    model({
      ke <- tke * exp(eta.ke)
      ipre <- 10 * exp(-ke * t)
      f2 <- ipre / (ipre + 5)
      f3 <- f2 * 3
      lipre <- log(ipre)
      ipre ~ prop(prop.sd)
    })
  }

  f <- nlmixr(f)

  fit.prop <- .nlmixr(f, dat, "focei", foceiControl(maxOuterIterations = 0, covMethod = ""))

  fo <- function() {
    ini({
      tke <- 0.5
      eta.ke ~ 0.04
      prop.sd <- sqrt(0.1)
    })
    model({
      ke <- tke * exp(eta.ke)
      d/dt(ipre) <- -ke * ipre
      f2 <- ipre / (ipre + 5)
      f3 <- f2 * 3
      lipre <- log(ipre)
      ipre ~ prop(prop.sd)
    })
  }

  fo <- nlmixr(fo)

  testErr <- function(type, fun, val = rep(NA_real_, 6), addProp = 2, log=FALSE) {
    .f <- fun(f)
    .fo <- fun(fo)
    .dode <- dat2
    .d <- dat
    if (log) {
      .d <- datl
      .dode <- datl2
    }
    fit1 <- .nlmixr(.fo, .dode, "focei",
                    control = foceiControl(
                      maxOuterIterations = 0, covMethod = "",
                      addProp = paste0("combined", addProp)))

    fit2 <- .nlmixr(.f, .d, "focei",
                    control = foceiControl(
                      maxOuterIterations = 0, covMethod = "",
                      addProp = paste0("combined", addProp)))

    fit3 <- .nlmixr(.fo, .dode, "foce",
                    control = foceiControl(
                      maxOuterIterations = 0, covMethod = "",
                      addProp = paste0("combined", addProp)))

    fit4 <- .nlmixr(.f, .d, "foce",
                    control = foceiControl(
                      maxOuterIterations = 0, covMethod = "",
                      addProp = paste0("combined", addProp)))

    fit5 <- .nlmixr(.fo, .dode, "fo",
                    control = foceiControl(
                      maxOuterIterations = 0, covMethod = "",
                      addProp = paste0("combined", addProp)))
    setOfv(fit5, "fo")

    fit6 <- .nlmixr(.f, .dode, "fo", control = foceiControl(
      maxOuterIterations = 0, covMethod = "",
      addProp = paste0("combined", addProp)))
    setOfv(fit6, "fo")


    .n <- paste(type, c("focei ode", "focei", "foce ode", "foce", "fo ode", "fo"), paste0("combined", addProp))
    ret <- c(fit1$objective, fit2$objective, fit3$objective, fit4$objective, fit5$objective, fit6$objective)
    ret <- setNames(ret, .n)
    val <- setNames(val, .n)
    ## Now test
    if (!all(is.na(val))) {
      test_that(
        type,{
          expect_equal(setNames(ret, NULL), setNames(val, NULL), tolerance=1e-3)
        })
      test_that(paste0(type, " print"),{
        utils::capture.output(suppressMessages({
          withr::with_options(list(cli.unicode=TRUE),expect_error(print(fit1), NA))
          withr::with_options(list(cli.unicode=FALSE),expect_error(print(fit1), NA))
          withr::with_options(list(cli.unicode=TRUE),expect_error(print(fit2), NA))
          withr::with_options(list(cli.unicode=FALSE),expect_error(print(fit2), NA))
          withr::with_options(list(cli.unicode=TRUE),expect_error(print(fit3), NA))
          withr::with_options(list(cli.unicode=FALSE),expect_error(print(fit3), NA))
          withr::with_options(list(cli.unicode=TRUE),expect_error(print(fit4), NA))
          withr::with_options(list(cli.unicode=FALSE),expect_error(print(fit4), NA))
          withr::with_options(list(cli.unicode=TRUE),expect_error(print(fit5), NA))
          withr::with_options(list(cli.unicode=FALSE),expect_error(print(fit5), NA))
          withr::with_options(list(cli.unicode=TRUE),expect_error(print(fit6), NA))
          withr::with_options(list(cli.unicode=FALSE),expect_error(print(fit6), NA))
        }))
      })
    }
    return(invisible(ret))
  }


  fit.prop2 <- .nlmixr(fo, dat2, "focei", foceiControl(maxOuterIterations = 0, covMethod = ""))

  out.focei.prop <- qs::qread("out.focei.prop.qs")

  test_that("Matches NONMEM objective proportional function; (Based on Wang2007)", {
    expect_equal(fit.prop$objective, 39.458, tolerance=1e-3) # Matches Table 2 Prop FOCEI for NONMEM
    expect_equal(fit.prop$eta.ke, out.focei.prop$ETA1, tolerance=1e-3) # match NONMEM output
    ## Individual properties
    expect_equal(fit.prop$IPRED, out.focei.prop$IPRE, tolerance=1e-3)
    expect_equal(fit.prop$IRES, out.focei.prop$IRES, tolerance=1e-3)
    expect_equal(fit.prop$IWRES, out.focei.prop$IWRES, tolerance=1e-3)
    ## WRES variants
    expect_equal(fit.prop$PRED, out.focei.prop$NPRED, tolerance=1e-3) # matches output of PRED from NONMEM
    expect_equal(fit.prop$PRED, out.focei.prop$PRED, tolerance=1e-3) # matches output of PRED from NONMEM
    expect_equal(fit.prop$RES, out.focei.prop$RES, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop$RES, out.focei.prop$NRES, tolerance=1e-3) # match NONMEM output
    ## FOI equivalents
    expect_equal(fit.prop$PRED, out.focei.prop$PREDI, tolerance=1e-3) # matches output of PRED from NONMEM
    ## CWRES variants
    expect_equal(fit.prop$CRES, out.focei.prop$CRES, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop$CPRED, out.focei.prop$CPRED, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop$CWRES, out.focei.prop$CWRES, tolerance=1e-3) # match NONMEM output
    ## Note that E[x] for CPRED and CPREDI are equal
    expect_equal(fit.prop$CRES, out.focei.prop$CRESI, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop$CPRED, out.focei.prop$CPREDI, tolerance=1e-3) # match NONMEM output
  })


  test_that("Matches NONMEM objective proportional function; (Based on Wang2007; unoptimized)", {
    # Check unoptimized expression
    expect_equal(fit.prop2$objective, 39.458, tolerance=1e-3) # Matches Table 2 Prop FOCEI for NONMEM
    expect_equal(fit.prop2$eta.ke, out.focei.prop$ETA1, tolerance=1e-3) # match NONMEM output
    ## Individual properties
    expect_equal(fit.prop2$IPRED, out.focei.prop$IPRE, tolerance=1e-3)
    expect_equal(fit.prop2$IRES, out.focei.prop$IRES, tolerance=1e-3)
    expect_equal(fit.prop2$IWRES, out.focei.prop$IWRES, tolerance=1e-3)
    ## WRES variants
    expect_equal(fit.prop2$PRED, out.focei.prop$NPRED, tolerance=1e-3) # matches output of PRED from NONMEM
    expect_equal(fit.prop2$PRED, out.focei.prop$PRED, tolerance=1e-3) # matches output of PRED from NONMEM
    expect_equal(fit.prop2$RES, out.focei.prop$RES, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop2$RES, out.focei.prop$NRES, tolerance=1e-3) # match NONMEM output
    ## FOI equivalents
    expect_equal(fit.prop2$PRED, out.focei.prop$PREDI, tolerance=1e-3) # matches output of PRED from NONMEM
    ## CWRES variants
    expect_equal(fit.prop2$CRES, out.focei.prop$CRES, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop2$CPRED, out.focei.prop$CPRED, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop2$CWRES, out.focei.prop$CWRES, tolerance=1e-3) # match NONMEM output
    ## Note that E[x] for CPRED and CPREDI are equal
    expect_equal(fit.prop2$CRES, out.focei.prop$CRESI, tolerance=1e-3) # match NONMEM output
    expect_equal(fit.prop2$CPRED, out.focei.prop$CPREDI, tolerance=1e-3) # match NONMEM output
  })


  .propVals <- c(39.458, 39.458, 39.275, 39.207, 39.213, 39.207)
  .propModVals <- c(63.353, 63.353, 63.001, 63.063, 63.063, 63.063)
  .propFVals <- c(6.496, 6.496, 6.488, 6.275, 9.262, 9.262)
  .propFModVals <- c(19.177, 19.177, 19.07, 18.202, 18.333, 18.333)

  .addVals <- c(-2.059, -2.059, -2.059, -2.059, 0.026, 0.026)

  .powVals <- c(9.966, 9.966, 9.948, 9.331, 9.651, 9.651)
  .powFModVals <- c(0.776, 0.776, 0.772, 0.58, 3.2, 3.2)
  .powF1Vals <- c(27.301, 27.301, 27.147, 26.854, 26.888, 26.888)
  .powF2Vals <- c(17.831, 17.831, 17.785, 16.617, 16.852, 16.852)
  .powF3Vals <- c(79.733, 79.733, 79.371, 79.448, 79.448, 79.448)
  .powFMod1Vals <- c(24.877, 24.877, 24.773, 24.518, 24.554, 24.554)
  .powFMod2Vals <- c(49.312, 49.312, 49.311, 49.296, 52.603, 52.603)
  .powFMod3Vals <- c(10.848, 10.848, 10.784, 9.446, 9.96, 9.96)
  .addProp2 <- c(39.735, 39.735, 39.562, 39.499, 39.505, 39.499)
  .addModPropMod2 <- c(106.308, 106.308, 106.013, 106.079, 106.079, 106.079)
  .addProp1 <- c(43.554, 43.554, 43.416, 43.394, 43.398, 43.394)
  .addPow1 <- c(16.231, 16.231, 16.219, 16.008, 16.093, 16.093)
  .addPow2 <- c(10.886, 10.886, 10.868, 10.417, 10.662, 10.662)
  .addModVals <- c(3.238, 3.238, 3.207, 2.438, 3.311, 3.311)
  .addModPropMod1 <- c(106.308, 106.308, 106.013, 106.079, 106.079, 106.079)
  .addModPropFModVals2 <- c(54.317, 54.317, 54.14, 54.165, 54.166, 54.166)
  .addPropFVals2 <- c(-2.321, -2.321, -2.322, -2.454, -0.65, -0.65)

  ################################################################################
  # Propotional tests
  ################################################################################
  testErr("prop", function(f) {
    f %>% model(ipre ~ prop(prop.sd)) %>% ini(prop.sd=sqrt(0.1))
  }, .propVals)

  testErr("propMod", function(f) {
    f %>% model(ipre ~ prop(f2))
  }, .propModVals)

  # In this case propT = prop
  testErr("propT", function(f) {
    f %>% model(ipre ~ propT(prop.sd)) %>% ini(prop.sd=sqrt(0.1))
  }, .propVals)

  testErr("propTMod", function(f) {
    f %>% model(ipre ~ propT(f2))
  }, .propModVals)

  testErr("propF", function(f) {
    f %>% model(ipre ~ propF(prop.sd, f2)) %>% ini(prop.sd=sqrt(0.1))
  }, .propFVals)

  testErr("propFMod", function(f) {
    f %>% model(ipre ~ propF(lipre, f2))
  }, .propFModVals)

  ################################################################################
  # Additive Model Tests
  ################################################################################
  testErr("add", function(f) {
    f %>% model(ipre ~ add(add.sd)) %>% ini(add.sd=sqrt(0.1))
  }, .addVals)

  testErr("addMod", function(f) {
    f %>% model(ipre ~ add(f2))
  }, .addModVals)

  skip_on_cran()
  rxode2::rxUnloadAll() # don't do too much on windows because of dll overloading
  skip_on_os("windows")

  ################################################################################
  # Power Model Tests
  ################################################################################
  testErr("pow1=prop", function(f) {
    f %>% model(ipre ~ pow(pow.sd, pw)) %>% ini(pow.sd=sqrt(0.1), pw=1)
  }, .propVals)

  testErr("powT1=propT=prop", function(f) {
    f %>% model(ipre ~ powT(pow.sd, pw)) %>% ini(pow.sd=sqrt(0.1), pw=1)
  }, .propVals)

  testErr("powF1=propF", function(f) {
    f %>% model(ipre ~ powF(pow.sd, pw, f2)) %>% ini(pow.sd=sqrt(0.1), pw=1)
  }, .propFVals)

  testErr("pow1Mod=propMod", function(f) {
    f %>% model(ipre ~ pow(f2, pw)) %>% ini(pw=1)
  }, .propModVals)

  testErr("pow", function(f) {
    f %>% model(ipre ~ pow(pow.sd, pw)) %>% ini(pow.sd=sqrt(0.1), pw=0.5)
  }, .powVals)

  testErr("powF1", function(f) {
    f %>% model(ipre ~ pow(f2, pw)) %>% ini(pw=0.5)
  }, .powF1Vals)

  testErr("powF2", function(f) {
    f %>% model(ipre ~ pow(pow.sd, f2)) %>% ini(pow.sd=sqrt(0.1))
  }, .powF2Vals)

  testErr("powF3", function(f) {
    f %>% model(ipre ~ pow(lipre, f2))
  }, .powF3Vals)

  testErr("powT", function(f) {
    f %>% model(ipre ~ powT(pow.sd, pw)) %>% ini(pow.sd=sqrt(0.1), pw=0.5)
  }, .powVals)

  testErr("powTF1", function(f) {
    f %>% model(ipre ~ powT(f2, pw)) %>% ini(pw=0.5)
  }, .powF1Vals)

  testErr("powFT2", function(f) {
    f %>% model(ipre ~ powT(pow.sd, f2)) %>% ini(pow.sd=sqrt(0.1))
  }, .powF2Vals)

  testErr("powTF3", function(f) {
    f %>% model(ipre ~ powT(lipre, f2))
  }, .powF3Vals)

  testErr("powFMod", function(f) {
    f %>% model(ipre ~ powF(pow.sd, pw, f2)) %>% ini(pow.sd=sqrt(0.1), pw=0.5)
  }, .powFModVals)

  testErr("powFMod1", function(f) {
    f %>% model(ipre ~ powF(lipre, pw, f2)) %>% ini(pw=0.5)
  }, .powFMod1Vals)

  testErr("powFMod2", function(f) {
    f %>% model(ipre ~ powF(pow.sd, lipre, f2)) %>% ini(pow.sd=sqrt(0.1))
  }, .powFMod2Vals)

  testErr("powFMod3", function(f) {
    f %>% model(ipre ~ powF(lipre, f3, f2))
  }, .powFMod3Vals)

  ################################################################################
  # Add+Proportional tests (combined 2)
  ################################################################################
  testErr("add+prop, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 2)

  testErr("addMod+prop, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(prop.sd)) %>% ini(prop.sd=0)
  }, .addModVals, addProp = 2)

  testErr("add+prop, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propVals, addProp = 2)

  testErr("add+propMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(f2)) %>% ini(add.sd=0)
  }, .propModVals, addProp = 2)

  testErr("addMod+propMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(f3))
  },  .addModPropMod2, addProp = 2)

  testErr("add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 2)

  testErr("add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 1)

  ## propT
  testErr("add+propT, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 2)

  testErr("addMod+propT, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(prop.sd)) %>% ini(prop.sd=0)
  }, .addModVals, addProp = 2)

  testErr("add+propT, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propVals, addProp = 2)

  testErr("add+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(f2)) %>% ini(add.sd=0)
  }, .propModVals, addProp = 2)

  testErr("addMod+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(f3))
  },  .addModPropMod2, addProp = 2)

  testErr("add+propT, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 2)

  testErr("add+propT, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 1)

  # propF
  testErr("add+propF, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 2)

  testErr("addMod+propF, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(prop.sd, f2)) %>% ini(prop.sd=0)
  }, .addModVals, addProp = 2)

  testErr("add+propF, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propFVals, addProp = 2)

  testErr("add+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(lipre, f2)) %>% ini(add.sd=0)
  }, .propFModVals, addProp = 2)

  testErr("addMod+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(lipre, f3))
  }, .addModPropFModVals2, addProp = 2)

  testErr("add+propF, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  },  .addPropFVals2, addProp = 2)

  testErr("add+propF, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addPropFVals2, addProp = 1)

  ################################################################################
  # Add+Proportional tests (combined 1)
  ################################################################################
  testErr("add+prop, combined 1->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 1)

  testErr("addMod+prop, combined 1->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(prop.sd)) %>% ini(prop.sd=0)
  }, .addModVals, addProp = 1)

  testErr("add+prop, combined 1->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propVals, addProp = 1)

  testErr("add+propMod, combined 1->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(f2)) %>% ini(add.sd=0)
  }, .propModVals, addProp = 1)

  testErr("addMod+propMod, combined 1->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(f3))
  },  .addModPropMod1, addProp = 2)

  testErr("add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 2)

  testErr("add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 1)

  ## propT
  testErr("add+propT, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 2)

  testErr("addMod+propT, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(prop.sd)) %>% ini(prop.sd=0)
  }, .addModVals, addProp = 2)

  testErr("add+propT, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propVals, addProp = 2)

  testErr("add+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(f2)) %>% ini(add.sd=0)
  }, .propModVals, addProp = 2)

  testErr("addMod+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(f3))
  },  .addModPropMod2, addProp = 2)

  testErr("add+propT, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 2)

  testErr("add+propT, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 1)

  # propF
  testErr("add+propF, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 2)

  testErr("addMod+propF, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(prop.sd, f2)) %>% ini(prop.sd=0)
  }, .addModVals, addProp = 2)

  testErr("add+propF, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propFVals, addProp = 2)

  testErr("add+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(lipre, f2)) %>% ini(add.sd=0)
  }, .propFModVals, addProp = 2)

  testErr("addMod+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(lipre, f3))
  }, .addModPropFModVals2, addProp = 2)

  testErr("add+propF, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  },  .addPropFVals2, addProp = 2)

  testErr("add+propF, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addPropFVals2, addProp = 1)

  #################################################################################################
  testErr("add+prop, combined 1", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp1, addProp = 1)

  testErr("add+prop, combined 1->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=sqrt(0.1), prop.sd=0)
  }, .addVals, addProp = 1)

  testErr("add+prop, combined 1->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd)) %>% ini(add.sd=0, prop.sd=sqrt(0.1))
  }, .propVals, addProp = 1)

  testErr("add+prop, combined 1 (override)", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + combined1()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp1, addProp = 2)

  testErr("add+prop, combined 2 (override)", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + combined2()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .addProp2, addProp = 1)

  ################################################################################
  # Add+Pow tests (combined 2)
  ################################################################################

  testErr("add+pow combined 2 -> add+prop combined2", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .addProp2, addProp = 2)

  testErr("add+pow combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, c(10.886, 10.886, 10.868, 10.417, 10.662, 10.662), addProp = 2)

  testErr("add+pow combined 1->add+prop combined1", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .addProp1, addProp = 1)

  testErr("add+pow combined 1", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .addPow1, addProp = 1)

  testErr("add+pow combined 1 (override)", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + combined1()) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .addPow1, addProp = 2)


  ## start looking at transformations

  ################################################################################
  ## lognormal error structures
  ################################################################################

  .lnorm <- c(40.039, 40.039, 40.039, 40.039, 40.055, 40.039)

  .lnormProp <- c(118.419, 118.419, 118.279, 118.311, 118.311, 118.311)
  .lnormPropT <- c(65.886, 65.886, 65.827, 65.832, 65.832, 65.832)
  .lnormPropF <- c(27.293, 27.293, 27.274, 26.643, 27.035, 27.035)

  .lnormPow <- c(77.87, 77.87, 77.826, 77.836, 77.836, 77.836)
  .lnormPowT <- c(52.616, 52.616, 52.601, 52.584, 52.587, 52.587)
  .lnormPowF <- c(32.834, 32.834, 32.834, 32.697, 32.784, 32.784)

  .lnormProp1 <- c(123.318, 123.318, 123.219, 123.24, 123.24, 123.24)
  .lnormPropT1 <- c(81.152, 81.152, 81.13, 81.135, 81.135, 81.135)
  .lnormPropF1 <- c(56.785, 56.785, 56.78, 56.774, 56.775, 56.775)

  .lnormPowT1 <- c(72.356, 72.356, 72.351, 72.351, 72.351, 72.351)
  .lnormPowF1 <- c(60.494, 60.494, 60.492, 60.489, 60.49, 60.49)
  .lnormPow1 <- c(89.824, 89.824, 89.803, 89.809, 89.809, 89.809)

  .lnormProp2 <- c(118.777, 118.777, 118.646, 118.676, 118.676, 118.676)
  .lnormPropT2 <- c(69.981, 69.981, 69.947, 69.951, 69.951, 69.951)
  .lnormPropF2 <- c(45.498, 45.498, 45.495, 45.482, 45.49, 45.49)

  .lnormPow2 <- c(80.244, 80.244, 80.212, 80.219, 80.219, 80.219)
  .lnormPowF2 <- c(48.202, 48.202, 48.2, 48.193, 48.198, 48.198)
  .lnormPowT2 <- c(59.837, 59.837, 59.831, 59.826, 59.827, 59.827)

  testErr("lnorm", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd)) %>% ini(lnorm.sd=sqrt(0.1))
  }, .lnorm, addProp = 1)

  test_that("lognormal likelihood can be determined by data too", {
    suppressWarnings({
      expect_equal(setNames(round(testErr("add lnorm", function(f) {
        f %>% model(lipre ~ add(add.sd)) %>% ini(add.sd=sqrt(0.1))
      },  log=TRUE) + 2 * sum(datl$DV), 3), NULL),
      .lnorm, tolerance=5e-3)
    })
  })


  ################################################################################
  ## lnorm(NA) tests
  ################################################################################

  testErr("lnorm(NA)+prop", function(f) {
    f %>% model(ipre ~ lnorm(NA) + prop(prop.sd)) %>% ini(prop.sd=sqrt(0.1))
  }, .lnormProp, addProp = 1)

  testErr("lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ lnorm(NA) + propT(prop.sd)) %>% ini(prop.sd=sqrt(0.1))
  }, .lnormPropT, addProp = 1)

  testErr("lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ lnorm(NA) + propF(prop.sd, f2)) %>% ini(prop.sd=sqrt(0.1))
  }, .lnormPropF, addProp = 1)

  testErr("lnorm(NA)+pow->lnorm(NA)+prop", function(f) {
    f %>% model(ipre ~ lnorm(NA) + pow(prop.sd, pw)) %>% ini(prop.sd=sqrt(0.1), pw=1)
  }, .lnormProp, addProp = 1)

  testErr("lnorm(NA)+powT->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ lnorm(NA) + powT(prop.sd, pw)) %>% ini(prop.sd=sqrt(0.1), pw=1)
  }, .lnormPropT, addProp = 1)

  testErr("lnorm(NA)+powF->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ lnorm(NA) + powF(prop.sd, pw, f2)) %>% ini(prop.sd=sqrt(0.1), pw=1)
  }, .lnormPropF, addProp = 1)

  testErr("lnorm(NA)+pow", function(f) {
    f %>% model(ipre ~ lnorm(NA) + pow(prop.sd, pw)) %>% ini(prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPow, addProp = 1)

  testErr("lnorm(NA)+powT", function(f) {
    f %>% model(ipre ~ lnorm(NA) + powT(prop.sd, pw)) %>% ini(prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPowT, addProp = 1)

  testErr("lnorm(NA)+powF", function(f) {
    f %>% model(ipre ~ lnorm(NA) + powF(prop.sd, pw, f2)) %>% ini(prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPowF, addProp = 1)


  ################################################################################
  ## lnorm combined1
  ################################################################################

  testErr("lnorm+prop combined1->lnorm(NA)+prop", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + prop(prop.sd)) %>% ini(lnorm.sd=0, prop.sd=sqrt(0.1))
  }, .lnormProp, addProp = 1)

  testErr("lnorm+propT combined1->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propT(prop.sd)) %>% ini(lnorm.sd=0, prop.sd=sqrt(0.1))
  }, .lnormPropT, addProp = 1)

  testErr("lnorm+propF combined1->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propF(prop.sd, f2)) %>% ini(lnorm.sd=0, prop.sd=sqrt(0.1))
  }, .lnormPropF, addProp = 1)

  testErr("lnorm+prop combined1->lnorm(NA)", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + prop(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=0)
  }, .lnorm, addProp = 1)

  testErr("lnorm+propT combined1->lnorm(NA)", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propT(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=0)
  }, .lnorm, addProp = 1)

  testErr("lnorm+propF combined1->lnorm(NA)", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propF(prop.sd, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=0)
  }, .lnorm, addProp = 1)

  testErr("lnorm+prop combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + prop(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .lnormProp1, addProp = 1)

  testErr("lnorm+propT combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propT(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .lnormPropT1, addProp = 1)

  testErr("lnorm+propF combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propF(prop.sd, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .lnormPropF1, addProp = 1)

  testErr("lnorm+powF->lnorm+propF combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powF(prop.sd, pw, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormPropF1, addProp = 1)

  testErr("lnorm+pow->lnorm+prop combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + pow(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormProp1, addProp = 1)

  testErr("lnorm+powT->lnorm+propT combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powT(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormPropT1, addProp = 1)

  testErr("lnorm+powF combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powF(prop.sd, pw, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPowF1, addProp = 1)

  testErr("lnorm+pow combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + pow(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPow1, addProp = 1)

  testErr("lnorm+powT combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powT(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPowT1, addProp = 1)

  ################################################################################
  ## lnorm combined2
  ################################################################################

  testErr("lnorm+propT combined2->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propT(prop.sd)) %>% ini(lnorm.sd=0, prop.sd=sqrt(0.1))
  }, .lnormPropT, addProp = 2)

  testErr("lnorm+propF combined2->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propF(prop.sd, f2)) %>% ini(lnorm.sd=0, prop.sd=sqrt(0.1))
  }, .lnormPropF, addProp = 2)

  testErr("lnorm+prop combined2->lnorm(NA)", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + prop(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=0)
  }, .lnorm, addProp = 2)

  testErr("lnorm+propT combined2->lnorm(NA)", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propT(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=0)
  }, .lnorm, addProp = 2)

  testErr("lnorm+propF combined2->lnorm(NA)", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propF(prop.sd, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=0)
  }, .lnorm, addProp = 2)

  testErr("lnorm+pow->lnorm+prop combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + pow(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormProp2, addProp = 2)

  testErr("lnorm+prop combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + prop(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .lnormProp2 ,addProp = 2)

  testErr("lnorm+propT combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propT(prop.sd)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .lnormPropT2, addProp = 2)

  testErr("lnorm+propF combined1", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + propF(prop.sd, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .lnormPropF2, addProp = 2)

  testErr("lnorm+powF->lnorm+propF combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powF(prop.sd, pw, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormPropF2, addProp = 2)

  testErr("lnorm+pow->lnorm+prop combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + pow(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormProp2, addProp = 2)

  testErr("lnorm+powT->lnorm+propT combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powT(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .lnormPropT2, addProp = 2)

  testErr("lnorm+powF combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powF(prop.sd, pw, f2)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPowF2, addProp = 2)

  testErr("lnorm+pow combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + pow(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPow2, addProp = 2)

  testErr("lnorm+powT combined2", function(f) {
    f %>% model(ipre ~ lnorm(lnorm.sd) + powT(prop.sd, pw)) %>% ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .lnormPowT2, addProp = 2)


  #################################################################################
  # Box-Cox Regression
  #################################################################################

  .boxCoxPropTVals <- c(35.132, 35.132, 34.879, 34.694, 34.709, 34.709)
  .boxCoxPropTModVals <- c(58.21, 58.21, 57.741, 57.802, 57.803, 57.803)
  .boxCoxPowTVals <- c(9.11, 9.11, 9.095, 8.215, 8.644, 8.644)
  .boxCoxPowTF1Vals <- c(25.57, 25.57, 25.388, 24.951, 25.002, 25.002)
  .boxCoxPowTF2Vals <- c(16.507, 16.507, 16.423, 14.981, 15.314, 15.314)
  .boxCoxPowTF3Vals <- c(76.496, 76.496, 76.097, 76.179, 76.179, 76.179)
  .boxCoxAddModPropTMod2 <- c(100.737, 100.737, 100.351, 100.437, 100.437, 100.437)
  .boxCoxAddPropT2Vals <- c(35.457, 35.457, 35.224, 35.056, 35.07, 35.07)
  .boxCoxPropT2ModVals <- c(58.21, 58.21, 57.741, 57.802, 57.803, 57.803)
  .boxCoxPropAddPropT2Vals <- c(100.737, 100.737, 100.351, 100.437, 100.437, 100.437)

  testErr("prop+boxCox->prop", function(f) {
    f %>% model(ipre ~ prop(prop.sd) + boxCox(lambda)) %>% ini(prop.sd=sqrt(0.1), lambda=1)
  }, .propVals)

  testErr("prop+boxCox->propMod", function(f) {
    f %>% model(ipre ~ prop(f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .propModVals)

  # In this case propT = prop
  testErr("propT+boxCox->propT", function(f) {
    f %>% model(ipre ~ propT(prop.sd) + boxCox(lambda)) %>% ini(prop.sd=sqrt(0.1), lambda=1)
  }, .boxCoxPropTVals)

  testErr("propTMod+boxCox->propTMod", function(f) {
    f %>% model(ipre ~ propT(f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .boxCoxPropTModVals)

  testErr("propF+boxCox->propF", function(f) {
    f %>% model(ipre ~ propF(prop.sd, f2) + boxCox(lambda)) %>% ini(prop.sd=sqrt(0.1), lambda=1)
  }, .propFVals)

  testErr("propFMod+boxCox->propFMod", function(f) {
    f %>% model(ipre ~ propF(lipre, f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .propFModVals)

  ################################################################################
  # boxCox -> Additive Model Tests
  ################################################################################
  testErr("add+boxCox->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + boxCox(lambda)) %>% ini(add.sd=sqrt(0.1), lambda=1)
  }, .addVals)

  testErr("addMod+boxCox->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .addModVals)

  ################################################################################
  # boxCox -> Power Model Tests
  ################################################################################
  testErr("boxCox+pow1->prop", function(f) {
    f %>% model(ipre ~ pow(pow.sd, pw) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), pw=1, lambda=1)
  }, .propVals)

  testErr("boxCox+powT1=propT=prop", function(f) {
    f %>% model(ipre ~ powT(pow.sd, pw) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), pw=1, lambda=1)
  }, .boxCoxPropTVals)

  testErr("boxCox+powF1=propF", function(f) {
    f %>% model(ipre ~ powF(pow.sd, pw, f2) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), pw=1, lambda=1)
  }, .propFVals)

  testErr("boxCox+pow1Mod=propMod", function(f) {
    f %>% model(ipre ~ pow(f2, pw) + boxCox(lambda)) %>% ini(pw=1, lambda=1)
  }, .propModVals)

  testErr("boxCox+pow->pow", function(f) {
    f %>% model(ipre ~ pow(pow.sd, pw) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), pw=0.5, lambda=1)
  }, .powVals)

  testErr("boxCox+powF1->powF1", function(f) {
    f %>% model(ipre ~ pow(f2, pw) + boxCox(lambda)) %>% ini(pw=0.5, lambda=1)
  }, .powF1Vals)

  testErr("boxCox+powF2->powF2", function(f) {
    f %>% model(ipre ~ pow(pow.sd, f2) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), lambda=1)
  }, .powF2Vals)

  testErr("boxCox+powF3->powF3", function(f) {
    f %>% model(ipre ~ pow(lipre, f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .powF3Vals)

  testErr("boxCox+powT->powT", function(f) {
    f %>% model(ipre ~ powT(pow.sd, pw) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), pw=0.5, lambda=1)
  }, .boxCoxPowTVals)

  testErr("boxCox+powTF1->powTF1", function(f) {
    f %>% model(ipre ~ powT(f2, pw) + boxCox(lambda)) %>% ini(pw=0.5, lambda=1)
  }, .boxCoxPowTF1Vals)

  testErr("boxCox+powFT2->powFT2", function(f) {
    f %>% model(ipre ~ powT(pow.sd, f2) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), lambda=1)
  }, .boxCoxPowTF2Vals)

  testErr("boxCox+powTF3->powTF3", function(f) {
    f %>% model(ipre ~ powT(lipre, f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .boxCoxPowTF3Vals)

  testErr("boxCox+powFMod->powFMod", function(f) {
    f %>% model(ipre ~ powF(pow.sd, pw, f2) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), pw=0.5, lambda=1)
  }, .powFModVals)

  testErr("boxCox+powFMod1->powFMod1", function(f) {
    f %>% model(ipre ~ powF(lipre, pw, f2) + boxCox(lambda)) %>% ini(pw=0.5, lambda=1)
  }, .powFMod1Vals)

  testErr("boxCox+powFMod2->powFMod2", function(f) {
    f %>% model(ipre ~ powF(pow.sd, lipre, f2) + boxCox(lambda)) %>% ini(pow.sd=sqrt(0.1), lambda=1)
  }, .powFMod2Vals)

  testErr("boxCox+powFMod3->powFMod3", function(f) {
    f %>% model(ipre ~ powF(lipre, f3, f2) + boxCox(lambda)) %>% ini(lambda=1)
  }, .powFMod3Vals)

  ################################################################################
  # Box-Cox Add+Proportional tests (combined 2)
  ################################################################################
  testErr("boxCox+add+prop, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>% ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 2)

  testErr("boxCox+addMod+prop, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(prop.sd) + boxCox(lambda)) %>% ini(prop.sd=0, lambda=1)
  }, .addModVals, addProp = 2)

  testErr("boxCox+add+prop, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>% ini(add.sd=0, prop.sd=sqrt(0.1), lambda=1)
  }, .propVals, addProp = 2)

  testErr("boxCox+add+propMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(f2) + boxCox(lambda)) %>% ini(add.sd=0, lambda=1)
  }, .propModVals, addProp = 2)

  testErr("boxCox+addMod+propMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(f3) + boxCox(lambda)) %>% ini(lambda=1)
  }, .addModPropMod2, addProp = 2)

  testErr("boxCox+add+prop, combined 2->add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>% ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp2, addProp = 2)

  testErr("boxCox+add+prop, combined 2->add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp2, addProp = 1)

  ## propT
  testErr("boxCox+add+propT, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 2)

  testErr("boxCox+addMod+propT, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(prop.sd=0, lambda=1)
  }, .addModVals, addProp = 2)

  testErr("boxCox+add+propT, combined 2->propT", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=1)
  }, addProp = 2)

  testErr("boxCox+add+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(f2) + boxCox(lambda)) %>%
      ini(add.sd=0, lambda=1)
  }, .boxCoxPropTModVals, addProp = 2)

  testErr("boxCox+addMod+propTMod, combined 2->propTMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(f3) + boxCox(lambda)) %>%
      ini(lambda=1)
  }, .boxCoxAddModPropTMod2, addProp = 2)

  .boxCoxAddPropTc2Vals <- c(35.457, 35.457, 35.224, 35.056, 35.07, 35.07)

  testErr("boxCox+add+propT, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .boxCoxAddPropTc2Vals, addProp = 2)

  testErr("boxCox+add+propT, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .boxCoxAddPropTc2Vals, addProp = 1)

  # propF
  testErr("boxCox+add+propF, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda)) %>% ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 2)

  testErr("boxCox+addMod+propF, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(prop.sd, f2) + boxCox(lambda)) %>% ini(prop.sd=0, lambda=1)
  }, .addModVals, addProp = 2)

  testErr("boxCox+add+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(lipre, f2) + boxCox(lambda)) %>% ini(add.sd=0, lambda=1)
  }, .propFModVals, addProp = 2)

  testErr("boxCox+addMod+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(lipre, f3) + boxCox(lambda)) %>%
      ini(lambda=1)
  }, .addModPropFModVals2, addProp = 2)

  testErr("boxCox+add+propF, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  },  .addPropFVals2, addProp = 2)

  testErr("boxCox+add+propF, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addPropFVals2, addProp = 1)

  ################################################################################
  # Box-Box Add+Proportional tests (combined 1)
  ################################################################################
  testErr("boxCox+add+prop, combined 1->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 1)

  testErr("boxCox+addMod+prop, combined 1->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(prop.sd=0, lambda=1)
  }, .addModVals, addProp = 1)

  testErr("boxCox+add+prop, combined 1->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=1)
  }, .propVals, addProp = 1)

  testErr("boxCox+add+propMod, combined 1->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(f2) + boxCox(lambda)) %>%
      ini(add.sd=0, lambda=1)
  }, .propModVals, addProp = 1)

  testErr("boxCox+addMod+propMod, combined 1->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + prop(f3) + boxCox(lambda)) %>%
      ini(lambda=1)
  },  .addModPropMod1, addProp = 2)

  testErr("boxCox+add+prop, combined 2->add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp2, addProp = 2)

  testErr("boxCox+add+prop, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp2, addProp = 1)

  ## propT
  testErr("boxCox+add+propT, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 2)

  testErr("boxCox+addMod+propT, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(prop.sd=0, lambda=1)
  }, .addModVals, addProp = 2)

  .boxCoxPropT <- c(35.132, 35.132, 34.879, 34.694, 34.709, 34.709)

  testErr("boxCox+add+propT, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=1)
  }, .boxCoxPropT, addProp = 2)

  testErr("boxCox+add+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(f2) + boxCox(lambda)) %>%
      ini(add.sd=0, lambda=1)
  }, .boxCoxPropT2ModVals, addProp = 2)

  .boxCoxAddPropT3Vals <- c(100.737, 100.737, 100.351, 100.437, 100.437, 100.437)

  testErr("boxCox+addMod+propTMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propT(f3) + boxCox(lambda)) %>%
      ini(lambda=1)
  },  .boxCoxAddPropT3Vals, addProp = 2)

  .boxCoxAddPropT2Vals <- c(35.457, 35.457, 35.224, 35.056, 35.07, 35.07)

  testErr("boxCox+add+propT, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .boxCoxAddPropT2Vals, addProp = 1)

  # propF
  testErr("boxCox+add+propF, combined 2->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 2)

  testErr("boxCox+addMod+propF, combined 2->addMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(prop.sd, f2) + boxCox(lambda)) %>%
      ini(prop.sd=0, lambda=1)
  }, .addModVals, addProp = 2)

  testErr("boxCox+add+propF, combined 2->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=1)
  }, .propFVals, addProp = 2)

  testErr("boxCox+add+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(lipre, f2) + boxCox(lambda)) %>%
      ini(add.sd=0, lambda=1)
  }, .propFModVals, addProp = 2)

  testErr("boxCox+addMod+propFMod, combined 2->propMod", function(f) {
    f %>% model(ipre ~ add(f2) + propF(lipre, f3) + boxCox(lambda)) %>%
      ini(lambda=1)
  }, .addModPropFModVals2, addProp = 2)

  testErr("boxCox+add+propF, combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  },  .addPropFVals2, addProp = 2)

  testErr("boxCox+add+propF, combined 2 (specified)", function(f) {
    f %>% model(ipre ~ add(add.sd) + propF(prop.sd, f2) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addPropFVals2, addProp = 1)

  #################################################################################################
  testErr("boxCox+add+prop, combined 1", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp1, addProp = 1)

  testErr("boxCox+add+prop, combined 1->add", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=0, lambda=1)
  }, .addVals, addProp = 1)

  testErr("boxCox+add+prop, combined 1->prop", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=1)
  }, .propVals, addProp = 1)

  testErr("boxCox+add+prop, combined 1 (override)", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda) + combined1()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp1, addProp = 2)

  testErr("boxCox+add+prop, combined 2 (override)", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + boxCox(lambda) + combined2()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lambda=1)
  }, .addProp2, addProp = 1)

  ################################################################################
  # Add+Pow tests (combined 2)
  ################################################################################
  testErr("boxCox+add+pow combined 2 -> add+prop combined2", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lambda=1)
  }, .addProp2, addProp = 2)

  testErr("boxCox+add+pow combined 2 -> add+pow combined 2", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lambda=1)
  }, c(10.886, 10.886, 10.868, 10.417, 10.662, 10.662), addProp = 2)

  testErr("boxCox+add+pow combined 1 -> add+prop combined1", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lambda=1)
  }, .addProp1, addProp = 1)

  testErr("boxCox+add+pow combined 1", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lambda=1)
  }, .addPow1, addProp = 1)

  testErr("boxCox+add+pow combined 1 (override)->add+pow combined 1 (override)", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + boxCox(lambda) + combined1()) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lambda=1)
  }, .addPow1, addProp = 2)


  ################################################################################
  ## BoxCox(0) and lnorm equivalence
  ################################################################################

  testErr("boxCox(0)+add-> lnorm", function(f) {
    f %>% model(ipre ~ add(add.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), lambda=0)
  }, .lnorm, addProp = 1)

  ################################################################################
  ## boxCox(0)+prop -> lnorm(NA) tests
  ################################################################################

  testErr("boxCox(0)+prop->lnorm(NA)+prop", function(f) {
    f %>% model(ipre ~ boxCox(lambda) + prop(prop.sd)) %>% ini(prop.sd=sqrt(0.1), lambda=0)
  }, .lnormProp, addProp = 1)

  testErr("boxCox(0)+propT->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ boxCox(lambda) + propT(prop.sd)) %>%
      ini(prop.sd=sqrt(0.1), lambda=0)
  }, .lnormPropT, addProp = 1)

  testErr("boxCox(0)+propF->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ boxCox(lm) + propF(prop.sd, f2)) %>%
      ini(prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropF, addProp = 1)

  testErr("boxCox(0)+pow->lnorm(NA)+prop", function(f) {
    f %>% model(ipre ~ boxCox(lm) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormProp, addProp = 1)

  testErr("boxCox(0)+powT->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powT(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormPropT, addProp = 1)

  testErr("boxCox(0)+powF->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powF(prop.sd, pw, f2)) %>%
      ini(prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormPropF, addProp = 1)

  testErr("boxCox(0)+pow->lnorm(NA)+pow", function(f) {
    f %>% model(ipre ~ boxCox(lm) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPow, addProp = 1)

  testErr("boxCox(0)+powT->lnorm(NA)+powT", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powT(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPowT, addProp = 1)

  testErr("boxCox(0)+powF->lnorm(NA)+powF", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powF(prop.sd, pw, f2)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPowF, addProp = 1)


  ################################################################################
  ## lnorm combined1
  ################################################################################

  testErr("boxCox(0)+add+prop combined1->lnorm(NA)+prop", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0)
  }, .lnormProp, addProp = 1)

  testErr("boxCox(0)+add+propT combined1->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropT, addProp = 1)

  testErr("boxCox(0)+add+propF combined1->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propF(prop.sd, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropF, addProp = 1)

  testErr("boxCox(0)+add+prop combined1->lnorm(NA)", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0)
  }, .lnorm, addProp = 1)

  testErr("boxCox(0)+add+propT combined1->lnorm(NA)", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0)
  }, .lnorm, addProp = 1)

  testErr("boxCox(0)+add+propF combined1->lnorm(NA)", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propF(prop.sd, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0)
  }, .lnorm, addProp = 1)

  testErr("boxCox(0)+add+prop combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0)
  }, .lnormProp1, addProp = 1)

  testErr("boxCox(0)+add+propT combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropT1, addProp = 1)

  testErr("boxCox(0)+add+propF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propF(prop.sd, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropF1, addProp = 1)

  testErr("boxCox(0)+add+powF->lnorm+propF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powF(prop.sd, pw, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormPropF1, addProp = 1)

  testErr("boxCox(0)+add+pow->lnorm+prop combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + pow(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormProp1, addProp = 1)

  testErr("boxCox(0)+add+powT->lnorm+propT combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powT(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormPropT1, addProp = 1)

  testErr("boxCox(0)+add+powF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powF(prop.sd, pw, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPowF1, addProp = 1)

  testErr("boxCox(0)+add+pow combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + pow(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPow1, addProp = 1)

  testErr("boxCox(0)+add+powT combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powT(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPowT1, addProp = 1)

  ################################################################################
  ## lnorm combined2
  ################################################################################

  testErr("boxCox(0)+add+propT combined2->lnorm(NA)+propT", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=0)
  }, .lnormPropT, addProp = 2)

  testErr("boxCox(0)+add+propF combined2->lnorm(NA)+propF", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm)+ propF(prop.sd, f2)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropF, addProp = 2)

  testErr("boxCox(0)+add+prop combined2->lnorm(NA)", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0)
  }, .lnorm, addProp = 2)

  testErr("boxCox(0)+add+propT combined2->lnorm(NA)", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + propT(prop.sd)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0)
  }, .lnorm, addProp = 2)

  testErr("boxCox(0)+add+propF combined2->lnorm(NA)", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm) + propF(prop.sd, f2)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0)
  }, .lnorm, addProp = 2)

  testErr("boxCox(0)+add+pow->lnorm+prop combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + pow(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormProp2, addProp = 2)

  testErr("boxCox(0)+add+prop combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0)
  }, .lnormProp2 ,addProp = 2)

  testErr("boxCox(0)+add+propT combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropT2, addProp = 2)

  testErr("boxCox(0)+add+propF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm)+ propF(prop.sd, f2)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0)
  }, .lnormPropF2, addProp = 2)

  testErr("boxCox(0)+add+powF->lnorm+propF combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powF(prop.sd, pw, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormPropF2, addProp = 2)


  testErr("boxCox(0)+add+pow->lnorm+prop combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm)+ pow(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormProp2, addProp = 2)

  testErr("boxCox(0)+add+powT->lnorm+propT combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powT(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0)
  }, .lnormPropT2, addProp = 2)

  testErr("boxCox(0)+add+powF combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + powF(prop.sd, pw, f2)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPowF2, addProp = 2)

  testErr("boxCox(0)+add+pow combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + pow(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPow2, addProp = 2)

  testErr("boxCox(0)+add+powT combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + powT(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0)
  }, .lnormPowT2, addProp = 2)


  ## Test lambda=0.5

  ################################################################################
  ## BoxCox(0.5)
  ################################################################################

  .boxCoxAdd <- c(10.402, 10.402, 10.402, 10.402, 11.078, 11.078)

  testErr("boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ add(add.sd) + boxCox(lambda)) %>%
      ini(add.sd=sqrt(0.1), lambda=0.5)
  }, .boxCoxAdd, addProp = 1)

  ################################################################################
  ## boxCox(0.5)+prop
  ################################################################################

  .boxCoxProp <- c(77.857, 77.857, 77.698, 77.732, 77.732, 77.732)
  testErr("boxCox(0.5)+prop", function(f) {
    f %>% model(ipre ~ boxCox(lambda) + prop(prop.sd)) %>% ini(prop.sd=sqrt(0.1), lambda=0.5)
  }, .boxCoxProp, addProp = 1)

  .boxCoxPropT <- c(48.455, 48.455, 48.321, 48.287, 48.291, 48.291)
  testErr("boxCox(0.5)+propT", function(f) {
    f %>% model(ipre ~ boxCox(lambda) + propT(prop.sd)) %>%
      ini(prop.sd=sqrt(0.1), lambda=0.5)
  }, .boxCoxPropT, addProp = 1)

  .boxCoxPropF <- c(4.243, 4.243, 4.216, 3.537, 6.584, 6.584)
  testErr("boxCox(0.5)+propF", function(f) {
    f %>% model(ipre ~ boxCox(lm) + propF(prop.sd, f2)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxPropF, addProp = 1)

  testErr("boxCox(0.5)+pow->boxCox(0.5)+prop", function(f) {
    f %>% model(ipre ~ boxCox(lm) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxProp, addProp = 1)

  testErr("boxCox(0.5)+powT->boxCox(0.5)+propT", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powT(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxPropT, addProp = 1)

  testErr("boxCox(0.5)+powF->boxCox(0.5)+propF", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powF(prop.sd, pw, f2)) %>%
      ini(prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxPropF, addProp = 1)

  .boxCoxPow <- c(39.674, 39.674, 39.629, 39.563, 39.573, 39.573)
  testErr("boxCox(0.5)+pow", function(f) {
    f %>% model(ipre ~ boxCox(lm) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxPow, addProp = 1)

  .boxCoxPowT <- c(27.311, 27.311, 27.296, 27.082, 27.148, 27.148)
  testErr("boxCox(0.5)+powT", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powT(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxPowT, addProp = 1)

  .boxCoxPowF <- c(7.046, 7.046, 7.032, 6.617, 8.287, 8.287)
  testErr("boxCox(0.5)+powF", function(f) {
    f %>% model(ipre ~ boxCox(lm) + powF(prop.sd, pw, f2)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxPowF, addProp = 1)


  ################################################################################
  ## lnorm combined1
  ################################################################################

  testErr("boxCox(0.5)+add+prop combined1->boxCox(0.5)+prop", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxProp, addProp = 1)

  testErr("boxCox(0.5)+add+propT combined1->boxCox(0.5)+propT", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxPropT, addProp = 1)

  testErr("boxCox(0.5)+add+propF combined1->boxCox(0.5)+propF", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propF(prop.sd, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxPropF, addProp = 1)

  testErr("boxCox(0.5)+add+prop combined1->boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0.5)
  }, .boxCoxAdd, addProp = 1)

  testErr("boxCox(0.5)+add+propT combined1->boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0.5)
  }, .boxCoxAdd, addProp = 1)

  testErr("boxCox(0.5)+add+propF combined1->boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propF(prop.sd, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0.5)
  }, .boxCoxAdd, addProp = 1)

  .boxCoxAddProp1 <- c(82.622, 82.622, 82.508, 82.534, 82.534, 82.534)
  testErr("boxCox(0.5)+add+prop combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxAddProp1, addProp = 1)

  .boxCoxAddPropT1 <- c(57.327, 57.327, 57.252, 57.256, 57.257, 57.257)
  testErr("boxCox(0.5)+add+propT combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxAddPropT1, addProp = 1)

  .boxCoxAddPropF1 <- c(22.065, 22.065, 22.064, 21.96, 22.067, 22.067)
  testErr("boxCox(0.5)+add+propF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propF(prop.sd, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxAddPropF1, addProp = 1)

  testErr("boxCox(0.5)+add+powF->boxCox(0.5)+add+propF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powF(prop.sd, pw, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddPropF1, addProp = 1)

  testErr("boxCox(0.5)+add+pow->boxCox(0.5)+add+prop combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + pow(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddProp1, addProp = 1)

  testErr("boxCox(0.5)+add+powT->boxCox(0.5)+add+propT combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powT(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddPropT1, addProp = 1)

  .boxCoxAddPowF1 <- c(24.676, 24.676, 24.676, 24.631, 24.692, 24.692)
  testErr("boxCox(0.5)+add+powF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powF(prop.sd, pw, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxAddPowF1, addProp = 1)


  .boxCoxAddPow1 <- c(50.265, 50.265, 50.241, 50.23, 50.232, 50.232)
  testErr("boxCox(0.5)+add+pow combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + pow(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxAddPow1, addProp = 1)

  .boxCoxAddPowT1 <- c(40.45, 40.45, 40.436, 40.41, 40.416, 40.416)
  testErr("boxCox(0.5)+add+powT combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powT(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxAddPowT1, addProp = 1)

  ################################################################################
  ## boxCox(0.5) combined2
  ################################################################################

  testErr("boxCox(0.5)+add+propT combined2->boxCox(0.5)+propT", function(f) {
    f %>% model(ipre ~ add(add.sd) + propT(prop.sd) + boxCox(lambda)) %>%
      ini(add.sd=0, prop.sd=sqrt(0.1), lambda=0.5)
  }, .boxCoxPropT, addProp = 2)

  testErr("boxCox(0.5)+add+propF combined2->boxCox(0.5)+propF", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm)+ propF(prop.sd, f2)) %>%
      ini(lnorm.sd=0, prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxPropF, addProp = 2)

  testErr("boxCox(0.5)+add+prop combined2->boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0.5)
  }, .boxCoxAdd, addProp = 2)

  testErr("boxCox(0.5)+add+propT combined2->boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + propT(prop.sd)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0.5)
  }, .boxCoxAdd, addProp = 2)

  testErr("boxCox(0.5)+add+propF combined2->boxCox(0.5)+add", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm) + propF(prop.sd, f2)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=0, lm=0.5)
  }, .boxCoxAdd, addProp = 2)

  .boxCoxAddProp2 <- c(78.202, 78.202, 78.052, 78.084, 78.084, 78.084)
  testErr("boxCox(0.5)+add+pow->boxCox(0.5)+add+prop combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + pow(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddProp2, addProp = 2)

  testErr("boxCox(0.5)+add+prop combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + prop(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxAddProp2 ,addProp = 2)


  .boxCoxAddPropT2 <- c(49.798, 49.798, 49.689, 49.668, 49.671, 49.671)
  testErr("boxCox(0.5)+add+propT combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + propT(prop.sd) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxAddPropT2, addProp = 2)

  .boxCoxAddPropF2 <- c(14.213, 14.213, 14.21, 14.085, 14.498, 14.498)
  testErr("boxCox(0.5)+add+propF combined1", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm)+ propF(prop.sd, f2)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .boxCoxAddPropF2, addProp = 2)

  testErr("boxCox(0.5)+add+powF->lnorm+propF combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powF(prop.sd, pw, f2) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddPropF2, addProp = 2)

  .boxCoxAddPropF2 <- c(78.202, 78.202, 78.052, 78.084, 78.084, 78.084)
  testErr("boxCox(0.5)+add+pow->lnorm+prop combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + boxCox(lm)+ pow(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddPropF2, addProp = 2)

  testErr("boxCox(0.5)+add+powT->boxCox(0.5)+add+propT combined2", function(f) {
    f %>% model(ipre ~ add(lnorm.sd) + powT(prop.sd, pw) + boxCox(lm)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1, lm=0.5)
  }, .boxCoxAddPropT2, addProp = 2)

  .boxCoxAddPowF2 <- c(15.857, 15.857, 15.856, 15.771, 16.06, 16.06)
  testErr("boxCox(0.5)+add+powF combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + powF(prop.sd, pw, f2)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxAddPowF2, addProp = 2)

  .boxCoxAddPow2 <- c(41.665, 41.665, 41.631, 41.589, 41.596, 41.596)
  testErr("boxCox(0.5)+add+pow combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + pow(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxAddPow2, addProp = 2)

  .boxCoxAddPowT2 <- c(30.736, 30.736, 30.722, 30.625, 30.657, 30.657)
  testErr("boxCox(0.5)+add+powT combined2", function(f) {
    f %>% model(ipre ~ boxCox(lm) + add(lnorm.sd) + powT(prop.sd, pw)) %>%
      ini(lnorm.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .boxCoxAddPowT2, addProp = 2)


  # Now yeoJohnson
  .yeoJohnsonAdd <- c(11.279, 11.279, 11.279, 11.279, 11.738, 11.738)
  testErr("add+yeoJohnson", function(f) {
    f %>% model(ipre ~ add(add.sd) + yeoJohnson(lm)) %>% ini(add.sd=sqrt(0.1), lm=0.5)
  })

  .yeoJohnsonProp <- c(80.257, 80.257, 80.102, 80.136, 80.136, 80.136)
  testErr("prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ prop(prop.sd) + yeoJohnson(lm)) %>% ini(prop.sd=sqrt(0.1), lm=0.5)
  })

  .yeoJohnsonPow <- c(41.644, 41.644, 41.598, 41.552, 41.559, 41.559)
  testErr("pow+yeoJohnson", function(f) {
    f %>% model(ipre ~ pow(prop.sd, pw) + yeoJohnson(lm)) %>% ini(prop.sd=sqrt(0.1), lm=0.5, pw=0.5)
  }, c(41.644, 41.644, 41.598, 41.552, 41.559, 41.559))

  .yeoJohnsonAddProp1 <- c(85.048, 85.048, 84.937, 84.961, 84.962, 84.962)
  testErr("add+prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .yeoJohnsonAddProp1, addProp = 1)

  .yeoJohnsonAddProp2 <- c(80.605, 80.605, 80.458, 80.49, 80.491, 80.491)
  testErr("add+prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ add(add.sd) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .yeoJohnsonAddProp2, addProp = 2)

  .yeoJohnsonAddPow1 <- c(52.481, 52.481, 52.456, 52.451, 52.452, 52.452)
  testErr("add+pow+yeoJohnson", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .yeoJohnsonAddPow1, addProp = 1)

  .yeoJohnsonAddPow2 <- c(43.704, 43.704, 43.669, 43.641, 43.645, 43.645)
  testErr("add+pow+yeoJohnson", function(f) {
    f %>% model(ipre ~ add(add.sd) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(add.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5, lm=0.5)
  }, .yeoJohnsonAddPow2, addProp = 2)

  ## logitNorm
  .logitNormAdd <- c(0.612, 0.612, 0.612, 0.612, 0.786, 0.786)
  testErr("logitNorm", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12)) %>%
      ini(logit.sd=sqrt(0.1))
  }, .logitNormAdd)

  .logitNormProp <- c(67.882, 67.882, 67.731, 67.765, 67.765, 67.765)
  testErr("logitNorm(NA)+prop", function(f) {
    f %>% model(ipre ~ logitNorm(NA, 0, 12) + prop(prop.sd)) %>%
      ini(prop.sd=sqrt(0.1))
  }, .logitNormProp)

  testErr("logitNorm(NA)+pow->logitNorm(NA)+prop", function(f) {
    f %>% model(ipre ~ logitNorm(NA, 0, 12) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=1)
  }, .logitNormProp)

  .logitNormPow <- c(29.055, 29.055, 29.007, 28.987, 28.989, 28.989)
  testErr("logitNorm(NA)+pow->logitNorm(NA)+prop", function(f) {
    f %>% model(ipre ~ logitNorm(NA, 0, 12) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5)
  }, .logitNormPow)

  .logitNormAddProp1 <- c(72.699, 72.699, 72.591, 72.615, 72.615, 72.615)
  testErr("logitNorm+prop", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + prop(prop.sd)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .logitNormAddProp1, addProp = 1)

  testErr("logitNorm+pow->logitNorm+prop", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + pow(prop.sd, pw)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .logitNormAddProp1, addProp = 1)

  .logitNormAddPow1 <- c(40.053, 40.053, 40.028, 40.028, 40.029, 40.029)
  testErr("logitNorm+prop", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + pow(prop.sd, pw)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .logitNormAddPow1, addProp = 1)

  ## logitNorm + yeoJohnson
  .logitNormAddYeoJohnson <- c(9.019, 9.019, 9.019, 9.019, 9.576, 9.576)
  testErr("logitNorm+yeoJohnson", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + yeoJohnson(lm)) %>%
      ini(logit.sd=sqrt(0.1), lm=0.5)
  }, .logitNormAddYeoJohnson)

  .logitNormPropAddYeoJohnson <- c(78.136, 78.136, 77.984, 78.017, 78.017, 78.017)
  testErr("logitNorm(NA)+prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ logitNorm(NA, 0, 12) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5)
  }, .logitNormPropAddYeoJohnson)

  testErr("logitNorm(NA)+pow+yeoJohnson->logitNorm(NA)+prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ logitNorm(NA, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5, pw=1)
  }, .logitNormPropAddYeoJohnson)

  .logitNormPowYeoJohnson <- c(39.334, 39.334, 39.287, 39.251, 39.256, 39.256)
  testErr("logitNorm(NA)+pow+yeoJohnson", function(f) {
    f %>% model(ipre ~ logitNorm(NA, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5, pw=0.5)
  }, .logitNormPowYeoJohnson)

  .logitNormAddPropAddYeoJohnson1 <- c(82.941, 82.941, 82.833, 82.857, 82.857, 82.857)
  testErr("logitNorm+add+prop+yeoJohnson combined 1", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .logitNormAddPropAddYeoJohnson1, addProp=1)

  .logitNormAddPropAddYeoJohnson2 <- c(78.485, 78.485, 78.341, 78.373, 78.373, 78.373)
  testErr("logitNorm+add+prop+yeoJohnson combined2", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .logitNormAddPropAddYeoJohnson2, addProp = 2)


  .logitNormAddPowAddYeoJohnson1 <- c(82.941, 82.941, 82.833, 82.857, 82.857, 82.857)
  testErr("logitNorm+pow+yeoJohnson combined2", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .logitNormAddPowAddYeoJohnson1, addProp = 1)

  .logitNormAddPowAddYeoJohnson2 <- c(78.485, 78.485, 78.341, 78.373, 78.373, 78.373)
  testErr("logitNorm+pow+yeoJohnson combined2", function(f) {
    f %>% model(ipre ~ logitNorm(logit.sd, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(logit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .logitNormAddPowAddYeoJohnson2, addProp = 2)


  .probitNormAdd <- c(12.827, 12.827, 12.827, 12.827, 12.847, 12.847)
  testErr("probitNorm", function(f) {
    f %>% model(ipre ~ probitNorm(logit.sd, 0, 12)) %>%
      ini(logit.sd=sqrt(0.1))
  }, .probitNormAdd)

  .probitNormProp <- c(88.875, 88.875, 88.733, 88.766, 88.766, 88.766)
  testErr("probitNorm(NA)+prop", function(f) {
    f %>% model(ipre ~ probitNorm(NA, 0, 12) + prop(prop.sd)) %>%
      ini(prop.sd=sqrt(0.1))
  }, .probitNormProp)

  testErr("probitNorm(NA)+pow->probitNorm(NA)+prop", function(f) {
    f %>% model(ipre ~ probitNorm(NA, 0, 12) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=1)
  }, .probitNormProp)

  .probitNormPow <- c(48.625, 48.625, 48.579, 48.587, 48.587, 48.587)
  testErr("probitNorm(NA)+pow->probitNorm(NA)+prop", function(f) {
    f %>% model(ipre ~ probitNorm(NA, 0, 12) + pow(prop.sd, pw)) %>%
      ini(prop.sd=sqrt(0.1), pw=0.5)
  }, .probitNormPow)

  .probitNormAddProp1 <- c(93.761, 93.761, 93.661, 93.682, 93.682, 93.682)
  testErr("probitNorm+prop", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + prop(prop.sd)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1))
  }, .probitNormAddProp1, addProp = 1)

  testErr("probitNorm+pow->probitNorm+prop", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + pow(prop.sd, pw)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=1)
  }, .probitNormAddProp1, addProp = 1)

  .probitNormAddPow1 <- c(60.418, 60.418, 60.396, 60.401, 60.401, 60.401)
  testErr("probitNorm+pow, combined1", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + pow(prop.sd, pw)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1), pw=0.5)
  }, .probitNormAddPow1, addProp = 1)

  ## probitNorm + yeoJohnson
  .probitNormAddYeoJohnson <- c(19.69, 19.69, 19.69, 19.69, 19.729, 19.729)
  testErr("probitNorm+yeoJohnson", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + yeoJohnson(lm)) %>%
      ini(probit.sd=sqrt(0.1), lm=0.5)
  }, .probitNormAddYeoJohnson)

  .probitNormPropAddYeoJohnson <- c(96.041, 96.041, 95.899, 95.931, 95.931, 95.931)
  testErr("probitNorm(NA)+prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ probitNorm(NA, 0, 12) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5)
  }, .probitNormPropAddYeoJohnson)

  testErr("probitNorm(NA)+pow+yeoJohnson->probitNorm(NA)+prop+yeoJohnson", function(f) {
    f %>% model(ipre ~ probitNorm(NA, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5, pw=1)
  }, .probitNormPropAddYeoJohnson)

  .probitNormPowYeoJohnson <- c(55.798, 55.798, 55.751, 55.758, 55.758, 55.758)
  testErr("probitNorm(NA)+pow+yeoJohnson", function(f) {
    f %>% model(ipre ~ probitNorm(NA, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(prop.sd=sqrt(0.1), lm=0.5, pw=0.5)
  }, .probitNormPowYeoJohnson)

  .probitNormAddPropAddYeoJohnson1 <- c(100.925, 100.925, 100.824, 100.846, 100.846, 100.846)
  testErr("probitNorm+add+prop+yeoJohnson combined 1", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .probitNormAddPropAddYeoJohnson1, addProp=1)

  .probitNormAddPropAddYeoJohnson2 <- c(96.398, 96.398, 96.264, 96.295, 96.295, 96.295)
  testErr("probitNorm+add+prop+yeoJohnson combined2", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + prop(prop.sd) + yeoJohnson(lm)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .probitNormAddPropAddYeoJohnson2, addProp = 2)

  .probitNormAddPowAddYeoJohnson1 <- c(100.925, 100.925, 100.824, 100.846, 100.846, 100.846)
  testErr("probitNorm+pow+yeoJohnson combined1", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .probitNormAddPowAddYeoJohnson1, addProp = 1)

  .probitNormAddPowAddYeoJohnson2 <- c(96.398, 96.398, 96.264, 96.295, 96.295, 96.295)
  testErr("probitNorm+pow+yeoJohnson combined2", function(f) {
    f %>% model(ipre ~ probitNorm(probit.sd, 0, 12) + pow(prop.sd, pw) + yeoJohnson(lm)) %>%
      ini(probit.sd=sqrt(0.1), prop.sd=sqrt(0.1), lm=0.5)
  }, .probitNormAddPowAddYeoJohnson2, addProp = 2)

  rxode2::rxUnloadAll()
})

Try the nlmixr2est package in your browser

Any scripts or data that you put into this service are public.

nlmixr2est documentation built on Oct. 8, 2023, 9:06 a.m.