tests/testthat/test-identify_sg.R

# Specify 2 datasets used for testing
df1 <- tibble::tribble(
  ~id, ~x_2n, ~x_1n, ~x_n, ~x_n1, ~x_n2, ~x_n3,
  1, 28, 19, 23, 12, 13, NA,
  2, 28, 19, 23, 11, 12, NA,
  3, 28, 19, NA, 12, 13, NA,
  4, 28, 19, 23, 12, 13, NA,
  5, 28, 19, 23, 12, 14, NA,
  6, 28, 19, NA, 12, 13, NA,
  7, 28, 19, 23, 11, 12, NA,
  8, 28, 25, 28, 11, 12, NA,
  9, 28, 26, 28, 11, 12, NA,
  10, NA, 26, 28, NA, 12, 11,
)

df2 <- tibble::tribble(
    ~id, ~x_2n, ~x_1n, ~x_n, ~x_n1, ~x_n2, ~x_n3,
    1, 35, 37, 23, 23, 24, 21,
    2, 35, 37, 34, 24, 24, 21,
    3, 35, 37, 34, 34, 24, 21,
    4, 35, 37, 34, 37, 37, 37
)

# Test that identifying sudden gains works as expected
test_that("Identify sg works 1", {
  # Identify sudden gains in test data
  df_test <- identify_sg(df1,
    id_var_name = "id",
    sg_crit1_cutoff = 7,
    sg_var_list = c(
      "x_2n", "x_1n", "x_n",
      "x_n1", "x_n2", "x_n3"
    )
  )

  # Specify expected dataset
  df_expect <- tibble::tribble(
    ~id, ~x_2n, ~x_1n, ~x_n, ~x_n1, ~x_n2, ~x_n3, ~sg_2to3, ~sg_3to4, ~sg_4to5,
    1, 28, 19, 23, 12, 13, NA, 0, 0, NA,
    2, 28, 19, 23, 11, 12, NA, 0, 1, NA,
    3, 28, 19, NA, 12, 13, NA, NA, NA, NA,
    4, 28, 19, 23, 12, 13, NA, 0, 0, NA,
    5, 28, 19, 23, 12, 14, NA, 0, 0, NA,
    6, 28, 19, NA, 12, 13, NA, NA, NA, NA,
    7, 28, 19, 23, 11, 12, NA, 0, 1, NA,
    8, 28, 25, 28, 11, 12, NA, 0, 1, NA,
    9, 28, 26, 28, 11, 12, NA, 0, 1, NA,
    10, NA, 26, 28, NA, 12, 11, NA, NA, NA
  ) |> dplyr::mutate(
    dplyr::across(sg_4to5, as.integer)
  )

  expect_equal(df_test, df_expect)
})


test_that("Identify sg works 2", {

  df_test <- identify_sg(
    data = df2,
    sg_crit1_cutoff = 7,
    id_var_name = "id",
    sg_var_list = c(
        "x_2n", "x_1n", "x_n",
        "x_n1", "x_n2", "x_n3"
    )
  )

  expect_equal(unlist(df_test[1, c("sg_2to3", "sg_3to4", "sg_4to5")], use.names = FALSE), c(1, 0, 0))
  expect_equal(unlist(df_test[2, c("sg_2to3", "sg_3to4", "sg_4to5")], use.names = FALSE), c(0, 1, 0))
  expect_equal(unlist(df_test[3, c("sg_2to3", "sg_3to4", "sg_4to5")], use.names = FALSE), c(0, 0, 1))
  expect_equal(unlist(df_test[4, c("sg_2to3", "sg_3to4", "sg_4to5")], use.names = FALSE), c(0, 0, 0))
})
milanwiedemann/suddengains documentation built on March 6, 2023, 6:21 p.m.