tests/testthat/test-sanity.R

test_that("sanity() runs", {
  skip_on_cran()

  fit <- sdmTMB(density ~ 1, time = "year",
    data = pcod_2011, mesh = pcod_mesh_2011,
    family = tweedie()
  )
  s <- sanity(fit)
  expect_true(all(unlist(s)))

  fit$gradients[1] <- 0.9
  expect_message(sanity(fit), regexp = "gradient")

  fit$gradients[1] <- 0.00001
  fit$bad_eig <- TRUE
  expect_message(sanity(fit), regexp = "model may not have converged")

  fit$bad_eig <- FALSE
  fit$model$convergence <- 1L
  expect_message(sanity(fit), regexp = "did not converge")
  fit$model$convergence <- 0L

  fit$pos_def_hessian <- FALSE
  expect_message(sanity(fit), regexp = "Non-positive-definite")

  fit <- sdmTMB(density ~ 1, time = "year",
    spatiotemporal = "off", spatial = "off",
    data = pcod_2011, mesh = pcod_mesh_2011,
    family = delta_gamma()
  )
  s <- sanity(fit)
  expect_true(all(unlist(s)))

  set.seed(1)
  pcod_2011$depth_fake <- pcod_2011$depth + runif(nrow(pcod_2011), -0.0001, 0.0001)
  suppressWarnings(
    fit <- sdmTMB(density ~ depth + depth_fake,
      data = pcod_2011, mesh = pcod_mesh_2011, spatial = "off",
      family = delta_gamma()
    )
  )
  expect_message(s <- sanity(fit), regexp = "may be large")
  # expect_message(s <- sanity(fit, se_ratio = 2), regexp = "2x")
  expect_false(s$se_magnitude_ok)
  expect_false(s$all_ok)

  expect_false(sanity(NA))
  expect_false(sanity(NULL))

  x <- try(stop())
  expect_false(sanity(x))
})

Try the sdmTMB package in your browser

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

sdmTMB documentation built on June 22, 2024, 10:48 a.m.