suppressMessages(library(dplyr))
test_that("k-factor warnings and errors are raised", {
expect_error(k_equiv(-0.01, 3))
expect_error(k_equiv(1.01, 3))
expect_warning(k_equiv(1e-9, 3))
expect_warning(k_equiv(0.75, 3))
expect_error(k_equiv(0.05, 1))
})
test_that("k-factors match those published in literature", {
if (requireNamespace("tidyr", quietly = TRUE)) {
# the files k1.vangel.csv and k2.vangel.csv contain the k factors
# published in Vangel's 2002 paper.
k1_vangel <- read.csv(system.file("extdata", "k1.vangel.csv",
package = "cmstatr")) %>%
tidyr::gather(n, k1, X2:X10) %>%
mutate(n = as.numeric(substring(n, 2)))
k2_vangel <- read.csv(system.file("extdata", "k2.vangel.csv",
package = "cmstatr")) %>%
tidyr::gather(n, k2, X2:X10) %>%
mutate(n = as.numeric(substring(n, 2)))
# This test is super slow, so we will only run a sampling of the values
# that
# would normally be used in the validation, unless the flag full_test is
# set to TRUE
full_test <- FALSE
diff_df <- inner_join(k1_vangel, k2_vangel, by = c("alpha", "n")) %>%
mutate(error_threshold = case_when(n == 2 & alpha > 0.25 ~ 0.10,
n == 2 & alpha <= 0.25 ~ 0.02,
n > 2 & alpha > 0.25 ~ 0.005,
TRUE ~ 5e-4))
diff_df <- diff_df %>%
sample_n(ifelse(full_test, length(diff_df$k1), 5)) %>%
tidyr::gather(fct, vangel, k1:k2) %>%
group_by(alpha, n) %>%
mutate(calc = k_equiv(first(alpha), first(n))) %>%
mutate(diff = (vangel - calc) / vangel) %>%
ungroup() %>%
rowwise() %>%
mutate(check = expect_lte(abs(diff), error_threshold, label =
paste0("Validation failure for ",
"alpha=", alpha,
", n=", n,
" computed ", fct, "=", calc,
" but validation ", fct, "=", vangel,
".\n")))
}
})
test_that("check equiv_mean_extremum against HYTEQ using some example data", {
data_sample <- c(145.055, 148.329, 142.667, 141.795, 144.139,
135.923, 136.177, 133.523, 134.350)
res <- equiv_mean_extremum(alpha = 0.05, data_sample = data_sample,
mean_qual = 141.310, sd_qual = 6.415)
expect_equal(res$alpha, 0.05)
expect_equal(res$n_sample, 9)
expect_equal(res$modcv, FALSE)
expect_equal(res$cv, 6.415 / 141.310, tolerance = 1e-8)
expect_equal(res$threshold_min_indiv, 123.725, tolerance = 1e-2)
expect_equal(res$threshold_mean, 137.197, tolerance = 1e-2)
expect_equal(res$result_min_indiv, "PASS")
expect_equal(res$result_mean, "PASS")
expect_output(print(res), "alpha\\W*=\\W*0.05")
expect_output(print(res), "n\\W*=\\W*9")
expect_output(print(res), "Sample[s:]*\\W*133.5\\d*\\W*140.2\\d*")
expect_output(print(res), "Threshold[s:]*\\W*123.7\\d*\\W*137.[12]")
expect_output(print(res), "Equiv\\w*\\W*PASS\\W*PASS")
})
test_that("check equiv_mean_extremum against HYTEQ using an example (modCV)", {
data_sample <- c(145.055, 148.329, 142.667, 141.795, 144.139,
135.923, 136.177, 133.523, 134.350)
res <- equiv_mean_extremum(alpha = 0.05, data_sample = data_sample,
mean_qual = 141.310, sd_qual = 6.415,
modcv = TRUE)
expect_equal(res$alpha, 0.05)
expect_equal(res$n_sample, 9)
expect_equal(res$modcv, TRUE)
expect_equal(res$cv, 6.415 / 141.310, tolerance = 1e-8)
expect_equal(res$cv_star, 0.0627, tolerance = 1e-3)
expect_equal(res$threshold_min_indiv, 117.024, tolerance = 1e-2)
expect_equal(res$threshold_mean, 135.630, tolerance = 1e-2)
expect_equal(res$result_min_indiv, "PASS")
expect_equal(res$result_mean, "PASS")
#ensure print indicates it's modCV
expect_output(print(res), "[Mm]od\\w*\\WCV")
expect_output(print(res), "alpha\\W*=\\W*0.05")
expect_output(print(res), "n\\W*=\\W*9")
expect_output(print(res), "Sample[s:]*\\W*133.5\\d*\\W*140.2\\d*")
expect_output(print(res), "Threshold[s:]*\\W*117.0\\d*\\W*135.6")
expect_output(print(res), "Equiv\\w*\\W*PASS\\W*PASS")
})
test_that("check three ways of specifying qual data are same (mean_ext)", {
data_qual <- c(145.055, 148.329, 142.667, 141.795, 144.139,
135.923, 136.177, 133.523, 134.350)
data_qual_df <- data.frame(strength = data_qual)
res1 <- equiv_mean_extremum(alpha = 0.05, data_qual = data_qual,
n_sample = 5)
res2 <- equiv_mean_extremum(alpha = 0.05, df_qual = data_qual_df,
data_qual = strength, n_sample = 5)
res3 <- equiv_mean_extremum(alpha = 0.05, mean_qual = mean(data_qual),
sd_qual = sd(data_qual), n_sample = 5)
# the calls will be different, and that's okay
res1$call <- NULL
res2$call <- NULL
res3$call <- NULL
expect_equal(res1, res2)
expect_equal(res1, res3)
})
test_that("check that glance.equiv_mean_extremum produces expected results", {
data_sample <- c(145.055, 148.329, 142.667, 141.795, 144.139,
135.923, 136.177, 133.523, 134.350)
res <- equiv_mean_extremum(alpha = 0.05, data_sample = data_sample,
mean_qual = 141.310, sd_qual = 6.415,
modcv = TRUE)
res <- glance(res)
expect_equal(res$alpha[1], 0.05)
expect_equal(res$n_sample[1], 9)
expect_equal(res$modcv[1], TRUE)
expect_equal(res$threshold_min_indiv[1], 117.024, tolerance = 1e-2)
expect_equal(res$threshold_mean[1], 135.630, tolerance = 1e-2)
expect_equal(res$result_min_indiv[1], "PASS")
expect_equal(res$result_mean[1], "PASS")
expect_equal(res$min_sample[1], min(data_sample))
expect_equal(res$mean_sample[1], mean(data_sample))
res <- equiv_mean_extremum(alpha = 0.05, mean_qual = 141.310,
sd_qual = 6.415, n_sample = 9, modcv = TRUE)
res <- glance(res)
expect_equal(ncol(res), 5)
expect_equal(res$alpha[1], 0.05)
expect_equal(res$n_sample[1], 9)
expect_equal(res$modcv[1], TRUE)
expect_equal(res$threshold_min_indiv[1], 117.024, tolerance = 1e-2)
expect_equal(res$threshold_mean[1], 135.630, tolerance = 1e-2)
})
test_that("check equiv_change_mean against HYTEQ using some example data", {
res <- equiv_change_mean(alpha = 0.05, n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162)
expect_equal(res$alpha, 0.05)
expect_equal(res$n_sample, 9)
expect_equal(res$mean_sample, 9.02)
expect_equal(res$sd_sample, 0.15785)
expect_equal(res$n_qual, 28)
expect_equal(res$mean_qual, 9.24)
expect_equal(res$sd_qual, 0.162)
expect_equal(res$sp, 0.1608, tolerance = 5e-4 / 0.1608)
expect_equal(res$t0, -3.570, tolerance = 5e-3)
expect_equal(res$t_req, 2.030, tolerance = 5e-3)
expect_equal(res$threshold, c(9.115, 9.365), tolerance = 5e-3)
expect_equal(res$modcv, FALSE)
expect_equal(res$result, "FAIL")
expect_output(print(res), "alpha\\W*=\\W*0.05")
expect_output(print(res), "Number\\W*28\\W*9")
expect_output(print(res), "Mean\\W*9.24\\d*\\W*9.02\\d*")
expect_output(print(res), "Result\\W*FAIL")
expect_output(print(res), "Range\\W*9.11[45]\\d*\\W*\\w*\\W*9.365\\d*")
})
test_that("check equiv_change_mean against HYTEQ using an example (modCV)", {
res <- equiv_change_mean(alpha = 0.05, n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162, modcv = TRUE)
expect_equal(res$alpha, 0.05)
expect_equal(res$n_sample, 9)
expect_equal(res$mean_sample, 9.02)
expect_equal(res$sd_sample, 0.15785)
expect_equal(res$n_qual, 28)
expect_equal(res$mean_qual, 9.24)
expect_equal(res$sd_qual, 0.162)
expect_equal(res$sp, 0.4927, tolerance = 5e-4)
expect_equal(res$t0, -1.165, tolerance = 5e-3)
expect_equal(res$t_req, 2.03, tolerance = 5e-3)
expect_equal(res$threshold, c(8.857, 9.623), tolerance = 5e-3)
expect_equal(res$modcv, TRUE)
expect_equal(res$result, "PASS")
#ensure print indicates it's modCV
expect_output(print(res), "[Mm]od\\w*\\WCV")
expect_output(print(res), "alpha\\W*=\\W*0.05")
expect_output(print(res), "Number\\W*28\\W*9")
expect_output(print(res), "Mean\\W*9.24\\d*\\W*9.02\\d*")
expect_output(print(res), "Result\\W*PASS")
expect_output(print(res), "Range\\W*8.85[67]\\d*\\W*\\w*\\W*9.623\\d*")
})
test_that("check four ways of specifying qual data are same (chg in mean)", {
data_qual <- c(145.055, 148.329, 142.667, 141.795, 144.139,
135.923, 136.177, 133.523, 134.350)
data_qual_df <- data.frame(strength = data_qual)
data_sample <- c(145.055, 148.329, 142.667, 141.795, 144.139)
res1 <- equiv_change_mean(alpha = 0.05, data_qual = data_qual,
n_sample = length(data_sample),
mean_sample = mean(data_sample),
sd_sample = sd(data_sample))
res2 <- equiv_change_mean(alpha = 0.05, df_qual = data_qual_df,
data_qual = strength,
n_sample = length(data_sample),
mean_sample = mean(data_sample),
sd_sample = sd(data_sample))
res3 <- equiv_change_mean(alpha = 0.05, mean_qual = mean(data_qual),
sd_qual = sd(data_qual),
n_qual = length(data_qual),
n_sample = length(data_sample),
mean_sample = mean(data_sample),
sd_sample = sd(data_sample))
res4 <- equiv_change_mean(alpha = 0.05, data_qual = data_qual,
data_sample = data_sample)
# the calls will be different, and that's okay
res1$call <- NULL
res2$call <- NULL
res3$call <- NULL
res4$call <- NULL
expect_equal(res1, res2)
expect_equal(res1, res3)
expect_equal(res1, res4)
})
test_that("glance.equiv_change_mean produces expected results", {
res <- equiv_change_mean(alpha = 0.05, n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162)
res <- glance(res)
expect_equal(res$alpha[1], 0.05)
expect_equal(res$n_sample[1], 9)
expect_equal(res$mean_sample[1], 9.02)
expect_equal(res$sd_sample[1], 0.15785)
expect_equal(res$n_qual[1], 28)
expect_equal(res$mean_qual[1], 9.24)
expect_equal(res$sd_qual[1], 0.162)
expect_equal(res$sp[1], 0.1608, tolerance = 5e-4 / 0.1608)
expect_equal(res$t0[1], -3.570, tolerance = 5e-3)
expect_equal(res$t_req[1], 2.030, tolerance = 5e-3)
expect_equal(res$threshold_min[1], 9.115, tolerance = 5e-3)
expect_equal(res$threshold_max[1], 9.365, tolerance = 5e-3)
expect_equal(res$modcv[1], FALSE)
expect_equal(res$result[1], "FAIL")
})
test_that("equiv_mean_extremum produces expected errors and warnings", {
expect_error(
equiv_mean_extremum(
alpha = -0.05, n_sample = 9,
mean_qual = 9.24,
sd_qual = 0.162),
"alpha"
)
expect_error(
equiv_mean_extremum(
alpha = 1.05, n_sample = 9,
mean_qual = 9.24,
sd_qual = 0.162),
"alpha"
)
expect_warning(
equiv_mean_extremum(
alpha = 0.05,
data_sample = runif(9),
n_sample = 9,
mean_qual = 9.24,
sd_qual = 0.162),
"n_sample"
)
set.seed(100)
expect_warning(
expect_warning(
equiv_mean_extremum(
alpha = 0.05,
n_sample = 9,
data_qual = runif(28),
mean_qual = 9.24,
sd_qual = 0.162),
"Both data_qual and mean_qual"
),
"Both data_qual and sd_qual"
)
set.seed(101)
expect_warning(
expect_warning(
equiv_mean_extremum(
alpha = 0.05,
n_sample = 9,
data_qual = runif(28),
mean_qual = 9.24,
sd_qual = 0.162),
"Both data_qual and mean_qual were supplied. mean_qual ignored."
),
"Both data_qual and sd_qual were supplied. sd_qual ignored."
)
expect_error(
equiv_mean_extremum(
alpha = 0.05,
mean_sample = 9.02,
sd_sample = 0.15785,
n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"sample"
)
expect_error(
equiv_mean_extremum(
alpha = 0.05,
n_sample = 9,
sd_qual = 0.162),
"mean_qual"
)
expect_error(
equiv_mean_extremum(
alpha = 0.05,
n_sample = 9,
mean_qual = 9.24),
"sd_qual"
)
expect_error(
equiv_mean_extremum(
alpha = 0.05,
mean_qual = 9.24,
sd_qual = 0.162),
"n_sample"
)
})
test_that("equiv_change_mean produces expected errors and warnings", {
set.seed(100)
expect_error(
equiv_change_mean(
alpha = -0.05, n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"alpha"
)
expect_error(
equiv_change_mean(
alpha = 1.05, n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"alpha"
)
set.seed(156)
expect_warning(
expect_warning(
expect_warning(
equiv_change_mean(
alpha = 0.05,
data_sample = runif(9),
n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"Both data_sample and n_sample supplied. n_sample ignored."
),
"Both data_sample and mean_sample supplied. mean_sample ignored"
),
"Both data_sample and sd_sample supplied. sd_sample ignored"
)
expect_error(
equiv_change_mean(
alpha = 0.05,
n_sample = 9,
sd_sample = 0.15785, n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"mean_sample"
)
expect_error(
equiv_change_mean(
alpha = 0.05,
n_sample = 9, mean_sample = 9.02,
n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"sd_sample"
)
expect_error(
equiv_change_mean(
alpha = 0.05,
n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785,
mean_qual = 9.24,
sd_qual = 0.162),
"n_qual"
)
set.seed(109)
expect_warning(
expect_warning(
expect_warning(
equiv_change_mean(
alpha = 0.05,
n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785,
data_qual = runif(28),
n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"Both data_qual and n_qual supplied. n_qual ignored."
),
"Both data_qual and mean_qual supplied. mean_qual ignored"
),
"Both data_qual and sd_qual supplied. sd_qual ignored"
)
set.seed(110)
expect_warning(
expect_warning(
expect_warning(
equiv_change_mean(
alpha = 0.05,
n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785,
data_qual = runif(28),
n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"Both data_qual and n_qual supplied. n_qual ignored."
),
"Both data_qual and mean_qual supplied. mean_qual ignored"
),
"Both data_qual and sd_qual supplied. sd_qual ignored"
)
expect_error(
equiv_change_mean(
alpha = 0.05,
mean_sample = 9.02,
sd_sample = 0.15785,
n_qual = 28, mean_qual = 9.24,
sd_qual = 0.162),
"sample"
)
expect_error(
equiv_change_mean(
alpha = 0.05,
n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785,
n_qual = 28,
sd_qual = 0.162),
"mean_qual"
)
expect_error(
equiv_change_mean(
alpha = 0.05,
n_sample = 9, mean_sample = 9.02,
sd_sample = 0.15785,
n_qual = 28, mean_qual = 9.24),
"sd_qual"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.