1library(testthat)
2library(recipes)
3library(modeldata)
4library(modeldata)
5data(credit_data)
6
7
8set.seed(342)
9in_training <- sample(1:nrow(credit_data), 2000)
10
11credit_tr <- credit_data[ in_training, ]
12credit_te <- credit_data[-in_training, ]
13
14test_that('simple median', {
15  rec <- recipe(Price ~ ., data = credit_tr)
16
17  impute_rec <- rec %>%
18    step_impute_median(Age, Assets, Income, id = "")
19  imputed <- prep(impute_rec, training = credit_tr, verbose = FALSE)
20  te_imputed <- bake(imputed, new_data = credit_te)
21
22  expect_equal(te_imputed$Age, credit_te$Age)
23
24  assets_pred <- median(credit_tr$Assets, na.rm = TRUE)
25  assets_pred <- recipes:::cast(assets_pred, credit_tr$Assets)
26  expect_equal(te_imputed$Assets[is.na(credit_te$Assets)],
27               rep(assets_pred, sum(is.na(credit_te$Assets))))
28
29  inc_pred <- median(credit_tr$Income, na.rm = TRUE)
30  inc_pred <- recipes:::cast(inc_pred, credit_tr$Assets)
31  expect_equal(te_imputed$Income[is.na(credit_te$Income)],
32               rep(inc_pred, sum(is.na(credit_te$Income))))
33
34  medians <- vapply(credit_tr[, c("Age", "Assets", "Income")],
35                    median, double(1), na.rm = TRUE)
36  medians <- purrr::map2(medians, credit_tr[, c("Age", "Assets", "Income")], recipes:::cast)
37  medians <- unlist(medians)
38  imp_tibble_un <-
39    tibble(terms = c("Age", "Assets", "Income"),
40           model = rep(NA_real_, 3),
41           id = "")
42  imp_tibble_tr <-
43    tibble(terms = c("Age", "Assets", "Income"),
44           model = as.integer(unlist(medians)),
45           id = "")
46
47  expect_equal(as.data.frame(tidy(impute_rec, 1)), as.data.frame(imp_tibble_un))
48  expect_equal(as.data.frame(tidy(imputed, 1)), as.data.frame(imp_tibble_tr))
49
50})
51
52
53test_that('non-numeric', {
54  rec <- recipe(Price ~ ., data = credit_tr)
55
56  impute_rec <- rec %>%
57    step_impute_median(Assets, Job)
58  expect_error(prep(impute_rec, training = credit_tr, verbose = FALSE))
59})
60
61test_that('all NA values', {
62  rec <- recipe(Price ~ ., data = credit_tr)
63
64  impute_rec <- rec %>%
65    step_impute_median(Age, Assets)
66  imputed <- prep(impute_rec, training = credit_tr, verbose = FALSE)
67  imputed_te <- bake(imputed, new_data = credit_te %>% mutate(Age = NA))
68
69  expect_equal(unique(imputed_te$Age), imputed$steps[[1]]$medians$Age)
70})
71
72
73test_that('printing', {
74  impute_rec <- recipe(Price ~ ., data = credit_tr) %>%
75    step_impute_median(Age, Assets, Income)
76  expect_output(print(impute_rec))
77  expect_output(prep(impute_rec, training = credit_tr, verbose = TRUE))
78})
79
80