Nothing
test_that("emmeans works with parametric models", {
skip_if_not_installed("emmeans")
library(emmeans)
# Basic parametric model without spatial component
fit <- sdmTMB(
present ~ as.factor(year),
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Test emmeans creation
emm <- emmeans::emmeans(fit, ~ year)
expect_s4_class(emm, "emmGrid")
# Test pairwise comparisons
pairs_result <- pairs(emm) # pairs is a method, not namespaced
expect_s4_class(pairs_result, "emmGrid")
# Test response scale
emm_resp <- emmeans::emmeans(fit, ~ year, type = "response")
expect_s4_class(emm_resp, "emmGrid")
# Check that results have correct dimensions
emm_summary <- summary(emm)
expect_equal(nrow(emm_summary), length(unique(pcod_2011$year)))
expect_true(all(c("year", "emmean", "SE", "df", "lower.CL", "upper.CL") %in% names(emm_summary)))
})
test_that("emmeans works with continuous covariates", {
skip_if_not_installed("emmeans")
library(emmeans)
fit <- sdmTMB(
present ~ as.factor(year) + depth_scaled,
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Test emmeans with continuous covariate
emm <- emmeans::emmeans(fit, ~ year)
expect_s4_class(emm, "emmGrid")
# Test emtrends for slopes
emtrends_result <- emmeans::emtrends(fit, ~ year, var = "depth_scaled")
expect_s4_class(emtrends_result, "emmGrid")
# Test interaction
fit_int <- sdmTMB(
present ~ as.factor(year) * depth_scaled,
data = pcod_2011,
spatial = "off",
family = binomial()
)
emm_int <- emmeans::emmeans(fit_int, ~ year)
expect_s4_class(emm_int, "emmGrid")
})
test_that("emmeans works with smoothers", {
skip_if_not_installed("emmeans")
library(emmeans)
# Model with smoother - this was previously broken
fit_smooth <- sdmTMB(
present ~ as.factor(year) + s(depth_scaled),
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Test that emmeans works with smoothers
emm_smooth <- emmeans::emmeans(fit_smooth, ~ year)
expect_s4_class(emm_smooth, "emmGrid")
# Test pairwise comparisons with smoothers
pairs_smooth <- pairs(emm_smooth)
expect_s4_class(pairs_smooth, "emmGrid")
# Test response scale with smoothers
emm_smooth_resp <- emmeans::emmeans(fit_smooth, ~ year, type = "response")
expect_s4_class(emm_smooth_resp, "emmGrid")
# Check that results are reasonable
emm_summary <- summary(emm_smooth)
expect_equal(nrow(emm_summary), length(unique(pcod_2011$year)))
expect_true(all(is.finite(emm_summary$emmean)))
expect_true(all(emm_summary$SE > 0))
})
test_that("emmeans works with multiple smoothers", {
skip_if_not_installed("emmeans")
library(emmeans)
# Model with multiple smoothers
fit_multi_smooth <- sdmTMB(
present ~ as.factor(year) + s(depth_scaled) + s(X),
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Test that emmeans still works with multiple smoothers
emm_multi <- emmeans::emmeans(fit_multi_smooth, ~ year)
expect_s4_class(emm_multi, "emmGrid")
# Test pairwise comparisons
pairs_multi <- pairs(emm_multi)
expect_s4_class(pairs_multi, "emmGrid")
# Results should be sensible
emm_summary <- summary(emm_multi)
expect_true(all(is.finite(emm_summary$emmean)))
})
test_that("emmeans results are consistent between parametric and smooth models", {
skip_if_not_installed("emmeans")
library(emmeans)
# Parametric model
fit_param <- sdmTMB(
present ~ as.factor(year) + depth_scaled,
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Smooth model
fit_smooth <- sdmTMB(
present ~ as.factor(year) + s(depth_scaled),
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Get emmeans for both
emm_param <- emmeans::emmeans(fit_param, ~ year)
emm_smooth <- emmeans::emmeans(fit_smooth, ~ year)
# Results should be reasonably similar (smooth vs linear depth effect)
param_est <- summary(emm_param)$emmean
smooth_est <- summary(emm_smooth)$emmean
# They shouldn't be identical but should be correlated
expect_true(cor(param_est, smooth_est) > 0.8)
})
test_that("emmeans works with delta models", {
skip_if_not_installed("emmeans")
library(emmeans)
# Delta model
fit_delta <- sdmTMB(
density ~ as.factor(year),
data = pcod_2011,
spatial = "off",
family = delta_gamma()
)
# Test binomial component (model = 1)
emm1 <- emmeans::emmeans(fit_delta, ~ year, model = 1)
expect_s4_class(emm1, "emmGrid")
# Test positive component (model = 2)
emm2 <- emmeans::emmeans(fit_delta, ~ year, model = 2)
expect_s4_class(emm2, "emmGrid")
# Check that results have correct dimensions
emm1_summary <- summary(emm1)
emm2_summary <- summary(emm2)
expect_equal(nrow(emm1_summary), length(unique(pcod_2011$year)))
expect_equal(nrow(emm2_summary), length(unique(pcod_2011$year)))
# Test pairwise comparisons work
pairs1 <- pairs(emm1)
pairs2 <- pairs(emm2)
expect_s4_class(pairs1, "emmGrid")
expect_s4_class(pairs2, "emmGrid")
# Test response scale works
emm1_resp <- emmeans::emmeans(fit_delta, ~ year, model = 1, type = "response")
emm2_resp <- emmeans::emmeans(fit_delta, ~ year, model = 2, type = "response")
expect_s4_class(emm1_resp, "emmGrid")
expect_s4_class(emm2_resp, "emmGrid")
})
test_that("emmeans works with binomial family and smoothers", {
skip_if_not_installed("emmeans")
library(emmeans)
# Test binomial with smoother - this is the main use case that was broken
fit <- sdmTMB(
present ~ as.factor(year) + s(depth_scaled),
data = pcod_2011,
spatial = "off",
family = binomial()
)
# Test emmeans works
emm <- emmeans::emmeans(fit, ~ year)
expect_s4_class(emm, "emmGrid")
# Test that we can extract meaningful results
emm_summary <- summary(emm)
expect_true(nrow(emm_summary) == 4) # 4 years
expect_true(all(c("year", "emmean") %in% names(emm_summary)))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.