tests/testthat/test-discrimination.R

test_that("discrimination works", {
  dina_discrim <- cdi(rstn_dina)

  expect_equal(length(dina_discrim), 2L)
  expect_equal(names(dina_discrim),
               c("item_discrimination", "test_discrimination"))

  expect_equal(names(dina_discrim$item_discrimination),
               c("item", "overall", paste0("att", 1:5)))
  expect_equal(nrow(dina_discrim$item_discrimination), 35L)

  expect_equal(names(dina_discrim$test_discrimination),
               c("overall", paste0("att", 1:5)))
  expect_equal(nrow(dina_discrim$test_discrimination), 1L)
  expect_equal(
    dina_discrim$test_discrimination %>%
      tidyr::pivot_longer(dplyr::everything()) %>%
      tibble::deframe(),
    colSums(dplyr::select(dina_discrim$item_discrimination, -"item"))
  )

  # check different weighting scheme -----
  dina_no_weight <- cdi(rstn_dina, weight_prevalence = FALSE)

  expect_equal(length(dina_no_weight), 2L)
  expect_equal(names(dina_no_weight),
               c("item_discrimination", "test_discrimination"))
  expect_false(identical(dina_discrim, dina_no_weight))

  expect_equal(names(dina_no_weight$item_discrimination),
               c("item", "overall", paste0("att", 1:5)))
  expect_equal(nrow(dina_no_weight$item_discrimination), 35L)
  expect_false(identical(dina_discrim$item_discrimination,
                         dina_no_weight$item_discrimination))

  expect_equal(names(dina_no_weight$test_discrimination),
               c("overall", paste0("att", 1:5)))
  expect_equal(nrow(dina_no_weight$test_discrimination), 1L)
  expect_equal(
    dina_no_weight$test_discrimination %>%
      tidyr::pivot_longer(dplyr::everything()) %>%
      tibble::deframe(),
    colSums(dplyr::select(dina_no_weight$item_discrimination, -"item"))
  )
  expect_false(identical(dina_discrim$test_discrimination,
                         dina_no_weight$test_discrimination))
})
wjakethompson/measr documentation built on April 12, 2025, 9:46 p.m.