### Test data ------------------------------------------------------------------
I <- 2
J <- 2
K <- 2
y <- array(sample.int(I * J * K), dim = c(I, J, K))
data <- occumbData(y = y)
fit <- occumb(data = data,
n.chains = 1, n.burnin = 10, n.thin = 1, n.iter = 20,
verbose = FALSE)
### Tests for outputs ----------------------------------------------------------
test_that("Dimensions of the output are as expected", {
out <- gof(fit, plot = FALSE, cores = 2)
expect_identical(out@stats, "Freeman_Tukey")
expect_equal(length(out@stats_obs), fit@fit$mcmc.info$n.samples)
expect_equal(length(out@stats_rep), fit@fit$mcmc.info$n.samples)
expect_false(any(c(out@p_value < 0, 1 < out@p_value)))
out <- gof(fit, stats = "deviance", plot = FALSE, cores = 2)
expect_identical(out@stats, "deviance")
expect_equal(length(out@stats_obs), fit@fit$mcmc.info$n.samples)
expect_equal(length(out@stats_rep), fit@fit$mcmc.info$n.samples)
expect_false(any(c(out@p_value < 0, 1 < out@p_value)))
out <- gof(fit, stats = "chi_squared", plot = FALSE, cores = 2)
expect_identical(out@stats, "chi_squared")
expect_equal(length(out@stats_obs), fit@fit$mcmc.info$n.samples)
expect_equal(length(out@stats_rep), fit@fit$mcmc.info$n.samples)
expect_false(any(c(out@p_value < 0, 1 < out@p_value)))
})
### Tests for quality controls -------------------------------------------------
test_that("Checks for data work", {
expect_error(gof(fit = array(1, dim = rep(2, 3)), cores = 2),
"An occumbFit class object is expected for 'fit'")
})
### Tests for fit statistics ---------------------------------------------------
test_that("Calculation of fit statistics is correct", {
y_test <- sample.int(2)
pi_test <- rep(0.5, 2)
N_test <- sum(y_test)
expect_identical(Freeman_Tukey(y_test, N_test, pi_test),
sum(((sqrt(y_test)) - sqrt(N_test * pi_test))^2))
expect_identical(chi_squared(y_test, N_test, pi_test),
sum((y_test - N_test * pi_test)^2 / (N_test * pi_test)))
})
test_that("Calculation of Bayes p-value is correct", {
x <- rnorm(10)
y <- rnorm(10)
expect_identical(Bayesian_p_value(x, y), sum(x < y) / length(x))
})
### Tests for unbalanced designs ----------------------------------------------
data_unbalanced <- data
j_miss <- 1
k_miss <- 2
data_unbalanced@y[, j_miss, k_miss] <- 0
fit_unbalanced <- occumb(data = data_unbalanced,
n.chains = 1, n.burnin = 10, n.thin = 1, n.iter = 20,
verbose = FALSE)
test_that("Fit statistic is zero for missing observation", {
y_ans <- get_data(fit_unbalanced, "y")
N_temp <- apply(y_ans, c(2, 3), sum)
pi_temp <- get_post_samples(fit_unbalanced, "pi")
test_Freeman_Tukey <- Freeman_Tukey(y_ans[, j_miss, k_miss],
N_temp[j_miss, k_miss],
pi_temp[1, , j_miss, k_miss])
expect_identical(test_Freeman_Tukey, 0)
test_deviance <- -2 * llmulti(y_ans[, j_miss, k_miss],
N_temp[j_miss, k_miss],
pi_temp[1, , j_miss, k_miss])
expect_identical(test_deviance, 0)
test_chi_squared <- chi_squared(y_ans[, j_miss, k_miss],
N_temp[j_miss, k_miss],
pi_temp[1, , j_miss, k_miss])
expect_identical(test_chi_squared, 0)
})
test_that("get_y_rep() works with unbalanced data", {
y_ans <- get_data(fit_unbalanced, "y")
I_temp <- dim(y_ans)[1]
J_temp <- dim(y_ans)[2]
K_temp <- dim(y_ans)[3]
N_temp <- apply(y_ans, c(2, 3), sum)
pi_temp <- get_post_samples(fit_unbalanced, "pi")
M_temp <- dim(pi_temp)[1]
expect_no_error(get_y_rep(1, y_ans, N_temp, pi_temp))
y_test <- get_y_rep(1, y_ans, N_temp, pi_temp)
expect_identical(y_test[, j_miss, k_miss], y_ans[, j_miss, k_miss])
})
test_that("gof() works with unbalanced data", {
expect_no_error(gof(fit_unbalanced, plot = FALSE))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.