tests/testthat/test-residuals.R

## Test partial_residuals() and related residuals functions

N <- 1000L # 400L
# df <- data_sim("eg1", n = N, seed = 42)
## fit the model
# m       <-  gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = 'REML')
# m_bam   <-  bam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df, method = 'fREML')
# m_gamm  <-  gamm(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df)
# m_gamm4 <-  gamm4(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = df)

test_that("partial_residuals returns a tibble", {
  expect_silent(p_res <- partial_residuals(m_gam))
  expect_s3_class(p_res,
    class = c("tbl_df", "tbl", "data.frame"),
    exact = TRUE
  )
  expect_named(p_res, c("s(x0)", "s(x1)", "s(x2)", "s(x3)"))
  expect_identical(nrow(p_res), N)
})

test_that("partial_residuals returns a tibble", {
  expect_silent(p_res <- partial_residuals(m_bam))
  expect_s3_class(p_res,
    class = c("tbl_df", "tbl", "data.frame"),
    exact = TRUE
  )
  expect_named(p_res, c("s(x0)", "s(x1)", "s(x2)", "s(x3)"))
  expect_identical(nrow(p_res), N)
})

test_that("partial_residuals returns a tibble", {
  expect_silent(p_res <- partial_residuals(m_gamm))
  expect_s3_class(p_res,
    class = c("tbl_df", "tbl", "data.frame"),
    exact = TRUE
  )
  expect_named(p_res, c("s(x0)", "s(x1)", "s(x2)", "s(x3)"))
  expect_identical(nrow(p_res), N)
})

test_that("partial_residuals returns a tibble", {
  expect_silent(p_res <- partial_residuals(m_gamm4))
  expect_s3_class(p_res,
    class = c("tbl_df", "tbl", "data.frame"),
    exact = TRUE
  )
  expect_named(p_res, c("s(x0)", "s(x1)", "s(x2)", "s(x3)"))
  expect_identical(nrow(p_res), N)
})

test_that("select works with partial_residuals", {
  expect_silent(p_res <- partial_residuals(m_gam, select = "s(x1)"))
  expect_s3_class(p_res,
    class = c("tbl_df", "tbl", "data.frame"),
    exact = TRUE
  )
  expect_named(p_res, "s(x1)")
  expect_identical(nrow(p_res), N)
})

test_that("partial_match selecting works with partial_residuals", {
  expect_silent(p_res <- partial_residuals(m_gam,
    select = "x1",
    partial_match = TRUE
  ))
  expect_s3_class(p_res,
    class = c("tbl_df", "tbl", "data.frame"),
    exact = TRUE
  )
  expect_named(p_res, "s(x1)")
  expect_identical(nrow(p_res), N)
})

test_that("selecting throws an error if no match", {
  err_msg <- "Failed to match any smooths in model `m_gam`.
Try with 'partial_match = TRUE'?"
  expect_error(
    partial_residuals(m_gam, select = "foo", partial_match = TRUE),
    err_msg
  )
  expect_error(
    partial_residuals(m_gam, select = "foo", partial_match = FALSE),
    err_msg
  )
})
gavinsimpson/gratia documentation built on April 13, 2024, 10:56 p.m.