tests/testthat/test_prepare_results_CA.R

skip_if_not(require("FactoMineR"))
context("prepare_results.CA")

data(children)
ca <- FactoMineR::CA(children[, 1:5],
  row.sup = 1:3,
  col.sup = 5, graph = FALSE
)
res <- prepare_results(ca)

test_that("error if not at least three rows or cols", {
  tmp <- FactoMineR::CA(children[, 1:2])
  expect_error(prepare_results(tmp))
  tmp <- FactoMineR::CA(children[1:2, ])
  expect_error(prepare_results(tmp))
})

test_that("Eigenvalues are equals", {
  expect_equal(unname(ca$eig[, "percentage of variance"]), res$eig$percent)
})

test_that("Levels results are equal", {
  expect_equal(
    as.vector(round(ca$col$coord[, 1], 3)),
    res$vars[res$vars$Type == "Active" & res$vars$Position == "Column" & res$vars$Axis == "1", "Coord", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$row$coord[, 2], 3)),
    res$vars[res$vars$Type == "Active" & res$vars$Position == "Row" & res$vars$Axis == "2", "Coord", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$col$cos2[, 3], 3)),
    res$vars[res$vars$Type == "Active" & res$vars$Position == "Column" & res$vars$Axis == "3", "Cos2", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$row$cos2[, 1], 3)),
    res$vars[res$vars$Type == "Active" & res$vars$Position == "Row" & res$vars$Axis == "1", "Cos2", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$col$contrib[, 2], 3)),
    res$vars[res$vars$Type == "Active" & res$vars$Position == "Column" & res$vars$Axis == "2", "Contrib", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$row$contrib[, 3], 3)),
    res$vars[res$vars$Type == "Active" & res$vars$Position == "Row" & res$vars$Axis == "3", "Contrib", drop = TRUE]
  )
})

test_that("Supplementary levels results are equal", {
  expect_equal(
    as.vector(round(ca$col.sup$coord[, 1], 3)),
    res$vars[res$vars$Type == "Supplementary level" & res$vars$Position == "Column" & res$vars$Axis == "1", "Coord", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$row.sup$coord[, 2], 3)),
    res$vars[res$vars$Type == "Supplementary level" & res$vars$Position == "Row" & res$vars$Axis == "2", "Coord", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$col.sup$cos2[, 3], 3)),
    res$vars[res$vars$Type == "Supplementary level" & res$vars$Position == "Column" & res$vars$Axis == "3", "Cos2", drop = TRUE]
  )
  expect_equal(
    as.vector(round(ca$row.sup$cos2[, 1], 3)),
    res$vars[res$vars$Type == "Supplementary level" & res$vars$Position == "Row" & res$vars$Axis == "1", "Cos2", drop = TRUE]
  )
})


test_that("Counts are equal", {
  expect_equal(
    res$vars$Count[res$vars$Level == "egoism" & res$vars$Axis == 1],
    sum(children["egoism", 1:5])
  )
  expect_equal(
    res$vars$Count[res$vars$Level == "money" & res$vars$Axis == 3],
    sum(children["money", 1:5])
  )
})
juba/explor documentation built on Oct. 2, 2023, 3:05 p.m.