tests/test-predict.R

################################################################################
# testing the prediction method

library(cpr)
set.seed(42)

################################################################################
#                        verify error if fit is missing                        #
e <- new.env()
with(e, {
  acp <- cp(log10(pdg) ~ bsplines(age, df = 12, bknots = c(45, 53))
            , data = spdg
            , keep_fit = FALSE)
  stopifnot(is.null(acp$fit))
  test <- tryCatch(predict(acp), error = function(e) e)
  stopifnot(inherits(test, "error"))
})

################################################################################
#                         simple lm with just a spline                         #

# without newdata
e <- new.env()
with(e, {
  acp <- cp(log10(pdg) ~ bsplines(age, df = 12, bknots = c(45, 53))
            , data = spdg
            , keep_fit = TRUE)
  alm <- lm(log10(pdg) ~ bsplines(age, df = 12, bknots = c(45, 53)) + 0
            , data = spdg)

  stopifnot("same lm coef" = identical(acp$coef, alm$coef))

  # testing without newdata
  acp_pred0 <- predict(acp$fit, se.fit = TRUE)
  acp_pred <- predict(acp, se.fit = TRUE)
  alm_pred <- predict(alm, se.fit = TRUE)

  stopifnot(isTRUE( all.equal(acp_pred0$fit, alm_pred$fit, check.attributes = FALSE)))
  stopifnot("acp prediction without newdata" =
            isTRUE( all.equal(acp_pred$fit, alm_pred$fit, check.attributes = FALSE)))
})

# with newdata
e <- new.env()
with(e, {
  acp <- cp(log10(pdg) ~ bsplines(age, df = 12, bknots = c(45, 53))
            , data = spdg
            , keep_fit = TRUE)
  alm <- lm(log10(pdg) ~ bsplines(age, df = 12, bknots = c(45, 53)) + 0
            , data = spdg)

  stopifnot("same lm coef" = identical(acp$coef, alm$coef))

  # testing with newdata
  nd <- data.frame(age = runif(n = 123, min = 45, max = 53))

  acp_pred0 <- predict(acp$fit, newdata = nd, se.fit = TRUE)
  alm_pred <- predict(alm, newdata = nd, se.fit = TRUE)

  acp_pred <- predict(acp, newdata = nd, se.fit = TRUE)

  stopifnot(isTRUE( all.equal(acp_pred0$fit, alm_pred$fit, check.attributes = FALSE)))
  stopifnot("acp prediction with newdata" =
            isTRUE( all.equal(acp_pred$fit, alm_pred$fit, check.attributes = FALSE)))
})

################################################################################
#                     verify error if fit from control net                     #
e <- new.env()
with(e, {

  acn <- cn(
      pdg ~ btensor(list(day, age), df = list(30, 4), bknots = list(c(-1, 1), c(45, 53))) + ttm
    , data = spdg
    , keep_fit = FALSE
  )

  stopifnot(is.null(acn$fit))
  test <- tryCatch(predict(acn), error = function(e) e)
  stopifnot(inherits(test, "error"))
})

################################################################################
#                         simple lm with a tesnsor                             #
e <- new.env()
with(e, {
  acn <- cn(
      log10(pdg) ~ btensor(list(day, age), df = list(30, 4), bknots = list(c(-1, 1), c(45, 53))) + ttm
    , data = spdg
    , keep_fit = TRUE
  )

  alm <- lm(log10(pdg) ~ 0 + btensor(list(day, age), df = list(30, 4), bknots = list(c(-1, 1), c(45, 53))) + ttm, data = spdg)

  stopifnot("same lm coef" = identical(acn$coef, alm$coef))

  acn_pred0 <- predict(acn$fit, se.fit = TRUE)
  acn_pred <- predict(acn, se.fit = TRUE)
  alm_pred <- predict(alm, se.fit = TRUE)

  stopifnot(isTRUE( all.equal(acn_pred0$fit, alm_pred$fit, check.attributes = FALSE)))
  stopifnot("acn predict without newdata" =
            isTRUE( all.equal(acn_pred$fit, alm_pred$fit, check.attributes = FALSE)))
})

e <- new.env()
with(e, {
  acn <- cn(
      log10(pdg) ~ btensor(list(day, age), df = list(30, 4), bknots = list(c(-1, 1), c(45, 53))) + ttm
    , data = spdg
    , keep_fit = TRUE
  )

  alm <- lm(log10(pdg) ~ 0 + btensor(list(day, age), df = list(30, 4), bknots = list(c(-1, 1), c(45, 53))) + ttm, data = spdg)

  stopifnot("same lm coef" = identical(acn$coef, alm$coef))

  nd <- data.frame(
        day = runif(n = 123, min = -1, max = 1)
      , age = runif(n = 123, min = 45, max = 53)
      , ttm = runif(n = 123, min = -8, max = -1)
    )

  acn_pred0 <- predict(acn$fit, newdata = nd, se.fit = TRUE)
  acn_pred <- predict(acn, newdata = nd, se.fit = TRUE)
  alm_pred <- predict(alm, newdata = nd, se.fit = TRUE)

  stopifnot(isTRUE( all.equal(acn_pred0$fit, alm_pred$fit, check.attributes = FALSE)))
  stopifnot("acn predict with newdata" =
            isTRUE( all.equal(acn_pred$fit, alm_pred$fit, check.attributes = FALSE)))
})


################################################################################
#                                 End of File                                  #
################################################################################

Try the cpr package in your browser

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

cpr documentation built on May 29, 2024, 5:54 a.m.