# only for debugging
if (FALSE) {
library(rstan)
library(testthat)
library(gastempt)
library(assertthat)
library(gastempt)
}
test_that("stanmodels exist", {
expect_true(exists("stanmodels"), "No stanmodels found")
mn = stan_model_names()
expect_gt(nrow(mn), 3)
expect_equal(names(mn), c("model_name", "description"))
})
test_that("stanmodels$linexp_gastro_1b exists", {
mod = stanmodels$linexp_gastro_1b
expect_s4_class(mod, "stanmodel")
expect_identical(mod@model_name, "linexp_gastro_1b")
})
gastempt_data = function() {
simulate_gastempt(n_records = 6, seed = 471)$stan_data
}
run_precompiled_model = function(model, iter = 500) {
cat("\nTesting ", model, "\n") # Generate output for travis
mod = gastempt:::stanmodels[[model]]
testthat::expect_s4_class(mod, "stanmodel")
testthat::expect_identical(mod@model_name, model)
data = gastempt_data()
data$lkj = 2
data$student_df = 5
cap = capture_output({
fit = suppressWarnings(rstan::sampling(
mod,
data = data,
chains = 2,
iter = iter,
refresh = -1,
verbose = FALSE
))
})
expect_s4_class(fit, "stanfit")
}
test_that("Running precompiled models linexp _1x directly returns valid result", {
iter = ifelse(identical(Sys.getenv("NOT_CRAN"), "true"), 500, 100)
run_precompiled_model("linexp_gastro_1b", iter = iter)
})
test_that("Running precompiled powexp models directly returns valid result", {
run_precompiled_model("powexp_gastro_1b")
})
test_that("Running precompiled powexp models directly returns valid result", {
skip_on_cran()
run_precompiled_model("powexp_gastro_2c")
})
test_that("Running stan_gastempt fit with default parameters returns valid result", {
skip_on_cran()
d = simulate_gastempt(n_records = 6, seed = 471)
v0_d = d$rec$v0
chains = 2 # Problems with more chains on travis
options(mc.cores = parallelly::availableCores(omit = 1))
ret = stan_gastempt(d$data,
chains = chains,
iter = 500,
refresh = -1)
expect_s3_class(ret, "stan_gastempt")
expect_s3_class(ret$plot, "ggplot")
expect_s3_class(ret$plot, "ggplot")
expect_equal(ret$coef, coef(ret))
expect_s4_class(ret$fit, "stanfit")
# residual standard deviation
v0_f = ret$coef$v0
expect_lt(sqrt(var(v0_d - v0_f)), 8)
expect_true(all(
c("sigma", "mu_kappa", "sigma_kappa", "lp") %in%
names(attributes(ret$coef))
))
})
test_that("Running stan_gastempt with powexp returns valid result", {
skip_on_cran()
options(mc.cores = 1)
d = simulate_gastempt(
n_records = 6,
seed = 471,
model = powexp,
beta_mean = 2.5,
missing = 0.3
)
v0_d = d$rec$v0
ret = stan_gastempt(d$data,
model_name = "powexp_gastro_2c",
refresh = -1,
iter = 500)
expect_s3_class(ret, "stan_gastempt")
expect_s3_class(ret$plot, "ggplot")
expect_s4_class(ret$fit, "stanfit")
# residual standard deviation
v0_f = ret$coef$v0
expect_lt(sqrt(var(v0_d - v0_f)), 20)
expect_true(all(
c("sigma", "mu_beta", "sigma_beta", "lp") %in%
names(attributes(ret$coef))
))
})
test_that("Running stan_gastempt fit with non-default parameters returns valid result", {
skip_on_travis()
skip_on_cran()
d = simulate_gastempt(n_records = 6, seed = 471)
v0_d = d$rec$v0
ret = stan_gastempt(
d$data,
model_name = "linexp_gastro_2b",
refresh = -1,
chains = 2,
init_r = 0.3
)
expect_s3_class(ret, "stan_gastempt")
v0_f = ret$coef$v0
expect_lt(sqrt(var(v0_d - v0_f)), 8)
})
test_that("Running stan_gastempt with many missing data returns valid result", {
skip_on_cran()
d = simulate_gastempt(n_records = 6,
missing = 0.3,
seed = 471)
v0_d = d$rec$v0
ret = stan_gastempt(d$data, model_name = "linexp_gastro_1b", refresh = -1)
expect_s3_class(ret, "stan_gastempt")
expect_s3_class(ret$plot, "ggplot")
expect_s4_class(ret$fit, "stanfit")
# residual standard deviation
v0_f = ret$coef$v0
expect_lt(sqrt(var(v0_d - v0_f)), 8)
expect_true(all(
c("sigma", "mu_kappa", "sigma_kappa", "lp") %in%
names(attributes(ret$coef))
))
})
test_that("Direct use of sample model returns valid results", {
skip("Slow. Only use on errors in other Stan functions.")
data = gastempt_data()
stan_model = "../../inst/stan/linexp_gastro_2b.stan"
print(dir("../../inst/stan/"))
expect_true(file.exists(stan_model))
rstan_options(auto_write = TRUE)
iter = 500
cap = capture_output({
mr_b = suppressWarnings(stan(
stan_model,
data = data,
chains = 4,
iter = iter,
seed = 4711,
refresh = FALSE
))
})
expect_s3_class(mr_b, "stanfit")
stan_model = "../../inst/stan/linexp_gastro_1b.stan"
expect_true(file.exists(stan_model))
mr_d = stan(
stan_model,
data = data,
chains = 4,
iter = iter,
seed = 4711,
refresh = FALSE
)
m_d = get_posterior_mean(mr_d)[, 5]
m_c = get_posterior_mean(mr_c)[, 5]
m_b = get_posterior_mean(mr_b)[, 5]
cbind(m_b, m_c, m_c)
sum(get_elapsed_time(mr_b))
sum(get_elapsed_time(mr_c))
sum(get_elapsed_time(mr_d))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.