tests/testthat/test-assume.R

test_that("distribution description works as expected", {
  # extract the "first element" to convert to character
  assume_ <- function(...) {
    assume(...)[1]
  }

  expect_equal(
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume_(
        distribution = "F",
        df = c(length(unique(gss$partyid)) - 1, nrow(gss) - 4)
      ),
    "An F distribution with 3 and 496 degrees of freedom."
  )

  expect_equal(
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume_(
        distribution = "F",
        df = c(length(unique(gss$partyid)) - 1, nrow(gss) - 4)
      ),
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume_(distribution = "F")
  )

  expect_equal(
    gss |>
      specify(response = finrela) |>
      hypothesize(
        null = "point",
        p = c(
          "far below average" = 1 / 6,
          "below average" = 1 / 6,
          "average" = 1 / 6,
          "above average" = 1 / 6,
          "far above average" = 1 / 6,
          "DK" = 1 / 6
        )
      ) |>
      assume_("Chisq", length(unique(gss$finrela)) - 1),
    "A Chi-squared distribution with 5 degrees of freedom."
  )

  expect_equal(
    gss |>
      specify(response = finrela) |>
      hypothesize(
        null = "point",
        p = c(
          "far below average" = 1 / 6,
          "below average" = 1 / 6,
          "average" = 1 / 6,
          "above average" = 1 / 6,
          "far above average" = 1 / 6,
          "DK" = 1 / 6
        )
      ) |>
      assume_("Chisq"),
    "A Chi-squared distribution with 5 degrees of freedom."
  )

  expect_equal(
    gss |>
      specify(formula = finrela ~ sex) |>
      hypothesize(null = "independence") |>
      assume_(
        distribution = "Chisq",
        df = (length(unique(gss$finrela)) - 1) *
          (length(unique(gss$sex)) - 1)
      ),
    "A Chi-squared distribution with 5 degrees of freedom."
  )

  expect_equal(
    gss |>
      specify(formula = finrela ~ sex) |>
      hypothesize(null = "independence") |>
      assume_(distribution = "Chisq"),
    "A Chi-squared distribution with 5 degrees of freedom."
  )

  expect_equal(
    gss |>
      specify(age ~ college) |>
      hypothesize(null = "independence") |>
      assume_("t"),
    "A T distribution with 423 degrees of freedom."
  )

  expect_equal(
    gss |>
      specify(response = sex, success = "female") |>
      hypothesize(null = "point", p = .5) |>
      assume_("z"),
    "A Z distribution."
  )
})

test_that("assume errors with bad arguments", {
  # supply a bad distribution
  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ college) |>
      hypothesize(null = "independence") |>
      assume("boop", nrow(gss) - 1)
  )

  # bad number of df arguments
  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ college) |>
      hypothesize(null = "independence") |>
      assume("t", c(nrow(gss) - 1, 2))
  )

  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume("F", nrow(gss) - 1)
  )

  # bad df argument type
  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume("F", "boop")
  )

  # df argument possibly passed to dots
  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume("F", nrow(gss) - 1, 1)
  )

  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ partyid) |>
      hypothesize(null = "independence") |>
      assume("F", nrow(gss) - 1, 1, 2)
  )

  # supply `distribution`s that don't align with the supplied variables
  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ finrela) |>
      hypothesize(null = "independence") |>
      assume("t", nrow(gss) - 1)
  )

  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ finrela) |>
      hypothesize(null = "independence") |>
      assume("z", nrow(gss) - 1)
  )

  expect_snapshot(
    error = TRUE,
    gss |>
      specify(age ~ NULL) |>
      hypothesize(null = "point", mu = 40) |>
      assume("z", nrow(gss) - 1)
  )

  # supply bad `x` arguments
  expect_snapshot(
    error = TRUE,
    gss |>
      assume("z", nrow(gss) - 1)
  )

  expect_snapshot(
    error = TRUE,
    "boop" |>
      assume("z", nrow(gss) - 1)
  )
})

test_that("assume() handles automatic df gracefully", {
  expect_equal(
    expect_silent(
      gss |>
        specify(response = hours) |>
        hypothesize(null = "point", mu = 40) |>
        assume("t")
    ),
    expect_silent(
      gss |>
        specify(response = hours) |>
        hypothesize(null = "point", mu = 40) |>
        assume("t")
    )
  )

  expect_snapshot(
    res_ <- gss |>
      specify(response = hours) |>
      hypothesize(null = "point", mu = 40) |>
      assume("t", nrow(gss) - 2)
  )

  # t.test param with var.equal = FALSE
  expect_equal(
    expect_silent(
      gss |>
        specify(age ~ college) |>
        hypothesize(null = "independence") |>
        assume(distribution = "t", 423) |>
        attr("df")
    ),
    423
  )

  # t.test param with var.equal = TRUE
  expect_equal(
    expect_silent(
      gss |>
        specify(age ~ college) |>
        hypothesize(null = "independence") |>
        assume(distribution = "t", 498) |>
        attr("df")
    ),
    498
  )

  # min(n1 - 1, n2 - 1)
  expect_equal(
    expect_silent(
      gss |>
        specify(age ~ college) |>
        hypothesize(null = "independence") |>
        assume(distribution = "t", 173) |>
        attr("df")
    ),
    173
  )

  # n1 + n2 - 2
  expect_equal(
    expect_silent(
      gss |>
        specify(age ~ college) |>
        hypothesize(null = "independence") |>
        assume(distribution = "t", 498) |>
        attr("df")
    ),
    498
  )
})

test_that("assume() brings along supplied arguments", {
  t_dist <- gss |>
    specify(age ~ college) |>
    hypothesize(null = "independence") |>
    assume("t")

  expect_equal(
    round(attr(t_dist, "df")),
    423
  )

  expect_equal(
    attr(t_dist, "distribution"),
    "t"
  )

  expect_equal(
    attr(t_dist, "theory_type"),
    "Two sample t"
  )

  expect_equal(
    attr(t_dist, "df"),
    attr(t_dist, "distr_param")
  )

  f_dist <- gss |>
    specify(age ~ partyid) |>
    hypothesize(null = "independence") |>
    assume(distribution = "F")

  expect_equal(
    attr(f_dist, "df"),
    c(attr(f_dist, "distr_param"), attr(f_dist, "distr_param2"))
  )
})

test_that("process_df works", {
  expect_equal(
    process_df(1),
    list(df = 1)
  )

  expect_equal(
    process_df(c(1, 2)),
    list(df1 = 1, df2 = 2)
  )

  expect_equal(
    process_df(NULL),
    list()
  )
})

Try the infer package in your browser

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

infer documentation built on June 27, 2025, 1:08 a.m.