tests/testthat/test-get_marginaltrends.R

skip_on_cran()
skip_if_not_installed("marginaleffects")
skip_if_not_installed("emmeans")

test_that("get_marginaltrends", {
  model <- lm(Sepal.Width ~ Species * Petal.Length, data = iris)
  out <- get_marginaltrends(model, trend = "Petal.Length", by = "Species")
  expect_identical(nrow(out), 3L)

  out2 <- estimate_slopes(model, trend = "Petal.Length", by = "Species")
  expect_equal(out$estimate, out2$Slope, tolerance = 1e-3)

  e1 <- as.data.frame(get_emtrends(model, by = NULL, trend = "Petal.Length"))
  e2 <- as.data.frame(get_marginaltrends(model, by = NULL, trend = "Petal.Length"))
  expect_equal(e1$Petal.Length.trend, e2$estimate, tolerance = 1e-4)

  e1 <- as.data.frame(get_emtrends(model, by = "Species", trend = "Petal.Length"))
  e2 <- as.data.frame(get_marginaltrends(model, by = "Species", trend = "Petal.Length"))
  expect_equal(e1$Petal.Length.trend, e2$estimate, tolerance = 1e-4)

  ## TODO: find out why these two slightly differ
  e1 <- as.data.frame(get_emtrends(model, by = "Petal.Length", trend = "Petal.Length"))
  e2 <- as.data.frame(get_marginaltrends(model, by = "Petal.Length", trend = "Petal.Length"))
  expect_equal(e1$Petal.Length.trend, e2$estimate, tolerance = 0.2)
})

test_that("get_marginaltrends, warnings", {
  data(iris)
  model <- lm(Sepal.Width ~ Petal.Width * Petal.Length, data = iris)
  expect_message(
    get_marginaltrends(model, trend = c("Petal.Width", "Petal.Length")),
    regex = "More than one numeric variable"
  )
})

Try the modelbased package in your browser

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

modelbased documentation built on April 12, 2025, 2:22 a.m.