skip_on_cran()
skip_on_os(c("mac", "solaris"))
unloadNamespace("gam")
skip_if_not_installed("mgcv")
test_that("ggpredict", {
set.seed(0)
dat <- mgcv::gamSim(6, n = 200, scale = 0.2, dist = "poisson")
m1 <- mgcv::gamm(
y ~ s(x0) + s(x1) + s(x2),
family = poisson,
data = dat,
random = list(fac = ~1),
verbosePQL = FALSE
)
p <- ggpredict(m1, "x1")
expect_equal(p$predicted[1], 15.5450060160087, tolerance = 1e-3)
expect_s3_class(ggpredict(m1, c("x1", "x2")), "data.frame")
m2 <- mgcv::gam(
y ~ s(x0) + s(x1) + s(x2),
family = poisson,
data = dat,
verbosePQL = FALSE
)
p <- ggpredict(m2, "x1")
expect_equal(p$predicted[1], 22.57359, tolerance = 1e-3)
expect_equal(p$conf.low[1], 17.89382, tolerance = 1e-3)
skip_if_not_installed("marginaleffects")
out <- test_predictions(p)
expect_equal(out$Slope, 43.90625, tolerance = 1e-3)
})
skip_if_not_installed("lme4")
test_that("ggpredict, population level", {
# validate mgcv against lme4
data("sleepstudy", package = "lme4")
m_lmer <- lme4::lmer(Reaction ~ poly(Days, 2) + (1 | Subject),
data = sleepstudy
)
# equivalent model, random effects are defined via s(..., bs = "re")
m_gam <- mgcv::gam(Reaction ~ poly(Days, 2) + s(Subject, bs = "re"),
family = gaussian(), data = sleepstudy, method = "ML"
)
# predictions are identical
p0_gam <- ggpredict(
m_gam,
terms = "Days [all]",
exclude = "s(Subject)",
newdata.guaranteed = TRUE
)
p0_lmer <- ggpredict(m_lmer, terms = "Days [all]")
expect_equal(
p0_gam$predicted,
p0_lmer$predicted,
tolerance = 0.02,
ignore_attr = TRUE
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.