tests/testthat/test_loglik.R

test_that("multinomineq:::loglik_binom/_multinom gives correct results", {
  n <- rep(10, 3)
  k <- c(3, 2, 5)
  expect_equal(multinomineq:::loglik_binom(c(.5, .5, .5), k, n), -sum(n * log(.5)))
  p <- runif(3)
  expect_equal(multinomineq:::loglik_binom(p, k, n), -sum(k * log(p), (n - k) * log(1 - p)))
  expect_equal(suppressWarnings(multinomineq:::loglik_binom(c(0, 0, 0), k, n)), Inf)

  p <- rpdirichlet(1, rep(1, 7), c(3, 4))
  p_all <- c(add_fixed(p, c(3, 4)))
  k <- rpmultinom(p, 1, c(3, 4))
  expect_equal(multinomineq:::loglik_multinom(p, c(k), c(3, 4)), -sum(k * log(p_all)))
  expect_equal(suppressWarnings(multinomineq:::loglik_multinom(c(0, 0, 0, 0, 0), k, c(3, 4))), Inf)
})


# vectors of predictions for 3 item types (Hilbig & Moshagen, 2014)
TTB <- c(-1, -1, -1)
WADD <- c(-1, 1, -1)
WADDprob <- c(-3, 1, -2)
EQW <- c(-1, 1, 0)
GUESS <- rep(0, 3)
baseline <- 1:3

k <- c(0, 5, 1)
k_false <- c(11, 1, 1)
n <- c(10, 15, 12)

test_that("predictions work as expected", {
  # deterministic models
  expect_equal(multinomineq:::get_error_unique(TTB), 1)
  expect_length(multinomineq:::get_error_unique(GUESS), 0)
  # expect_equal(multinomineq:::error_number(TTB), 1)
  expect_equal(multinomineq:::error_to_prob(.123, multinomineq:::as_strategy(TTB)), rep(.123, 3))

  # probabilistic models
  expect_equal(multinomineq:::get_error_unique(WADDprob), 1:3)
  # expect_equal(multinomineq:::error_number(WADDprob), 3)
  expect_equal(
    multinomineq:::error_to_prob(c(.1, .25, .3), multinomineq:::as_strategy(WADDprob)),
    c(.1, 1 - .3, .25)
  )
  # baseline
  expect_equal(
    multinomineq:::error_to_prob(c(.1, .25, .3), multinomineq:::as_strategy(baseline, c = 1, ordered = FALSE)),
    1 - c(.1, .25, .3)
  )
})

test_that("multinomineq::loglik_strategy works", {
  # loglik_strategy is now DEPRECATED [ was used for NML]
  expect_gte(multinomineq:::loglik_strategy(runif(1, 0.1, .5), k, n, multinomineq:::as_strategy(TTB)), 0)
  expect_lte(
    multinomineq:::loglik_strategy(sum(k) / sum(n), k, n, multinomineq:::as_strategy(TTB)),
    multinomineq:::loglik_strategy(runif(1, 0, .5), k, n, multinomineq:::as_strategy(TTB))
  )

  expect_gte(multinomineq:::loglik_strategy(runif(1, 0, .5), k, n, multinomineq:::as_strategy(WADD)), 0)
  expect_gte(multinomineq:::loglik_strategy(
    runif(3, 0, 1), k, n,
    multinomineq:::as_strategy(baseline, c = 1, ordered = FALSE)
  ), 0)
  expect_gte(multinomineq:::loglik_strategy(c(), k, n, multinomineq:::as_strategy(GUESS)), 0)
  expect_equal(
    multinomineq:::loglik_strategy(c(), k, n, multinomineq:::as_strategy(GUESS)),
    -sum(n * log(.5))
  )

  # expected errors
  expect_identical(suppressWarnings(
    multinomineq:::loglik_strategy(0, k_false, n, multinomineq:::as_strategy(TTB))
  ), Inf)
  # inadmissible parameters
  expect_identical(suppressWarnings(
    multinomineq:::loglik_strategy(1.5, k, n, multinomineq:::as_strategy(TTB))
  ), NA_real_)
  expect_identical(suppressWarnings(
    multinomineq:::loglik_strategy(-.1, k, n, multinomineq:::as_strategy(TTB))
  ), NA_real_)
  expect_identical(suppressWarnings(
    multinomineq:::loglik_strategy(-.1, k, n, multinomineq:::as_strategy(WADDprob))
  ), NA_real_)
  expect_identical(suppressWarnings(
    multinomineq:::loglik_strategy(c(.5, .4, .3), k, n, multinomineq:::as_strategy(WADDprob))
  ), NA_real_)
})

Try the multinomineq package in your browser

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

multinomineq documentation built on Nov. 22, 2022, 5:09 p.m.