data.table::setDTthreads(1) # For CRAN
test_that("formula model topology is correct", {
f1 <- obs(c(y1, y2) ~ 1 | x, family = "mvgaussian") +
obs(x ~ 1 + z, family = "gaussian")
f2 <- obs(z ~ w1, family = "gaussian") +
obs(c(w1, w2, w3) ~ 1 | y | y, family = "mvgaussian") +
obs(y ~ 1, family = "gaussian")
expect_identical(attr(f1, "model_topology"), 2:1)
expect_identical(attr(f2, "model_topology"), 3:1)
expect_identical(attr(f2 + f1, "model_topology"), c(3:1, 5:4))
expect_identical(attr(f1 + f2, "model_topology"), 5:1)
})
test_that("formula parts are correct", {
f1 <- y ~ x + z * h
f2 <- ~ x + z * h
expect_identical(formula_rhs(f1), formula_rhs(f2))
expect_identical(formula_lhs(f1), quote(y))
expect_identical(formula_lhs(f2), NULL)
})
test_that("formula incrementation logic is correct", {
obs_list <- list(
obs(y ~ 1, family = "gaussian")[[1L]],
obs(y ~ -1 + varying(~1), family = "gaussian")[[1L]],
obs(y ~ x, family = "gaussian")[[1L]],
obs(y ~ -1 + varying(~x), family = "gaussian")[[1L]],
obs(y ~ -1 + x + varying(~z), family = "gaussian")[[1L]],
obs(y ~ x + varying(~ -1 + z), family = "gaussian")[[1L]],
obs(y ~ -1 + varying(~ x + z), family = "gaussian")[[1L]],
obs(y ~ -1 + random(~1), family = "gaussian")[[1L]],
obs(y ~ -1 + random(~x), family = "gaussian")[[1L]],
obs(y ~ -1 + x + random(~z), family = "gaussian")[[1L]],
obs(y ~ x + random(~ -1 + z), family = "gaussian")[[1L]],
obs(y ~ -1 + random(~ x + z), family = "gaussian")[[1L]],
obs(y ~ 1 + varying(~ -1 + x) + random(~ -1 + z), family = "gaussian")[[1L]]
)
out_list <- list(
list(
y ~ 1 + w,
y ~ 1 + varying(~ -1 + w),
y ~ 1 + random(~ -1 + w)
),
list(
y ~ -1 + w + varying(~1),
y ~ -1 + varying(~ 1 + w),
y ~ -1 + varying(~1) + random(~ -1 + w)
),
list(
y ~ 1 + x + w,
y ~ 1 + x + varying(~ -1 + w),
y ~ 1 + x + random(~ -1 + w)
),
list(
y ~ -1 + w + varying(~ 1 + x),
y ~ -1 + varying(~ 1 + x + w),
y ~ -1 + varying(~ 1 + x) + random(~ -1 + w)
),
list(
y ~ -1 + x + w + varying(~ 1 + z),
y ~ -1 + x + varying(~ 1 + z + w),
y ~ -1 + x + varying(~ 1 + z) + random(~ -1 + w)
),
list(
y ~ 1 + x + w + varying(~ -1 + z),
y ~ 1 + x + varying(~ -1 + z + w),
y ~ 1 + x + varying(~ -1 + z) + random(~ -1 + w)
),
list(
y ~ -1 + w + varying(~ 1 + x + z),
y ~ -1 + varying(~ 1 + x + z + w),
y ~ -1 + varying(~ 1 + x + z) + random(~ -1 + w)
),
list(
y ~ -1 + w + random(~1),
y ~ -1 + varying(~ -1 + w) + random(~1),
y ~ -1 + random(~ 1 + w)
),
list(
y ~ -1 + w + random(~ 1 + x),
y ~ -1 + varying(~ -1 + w) + random(~ 1 + x),
y ~ -1 + random(~ 1 + x + w)
),
list(
y ~ -1 + x + w + random(~ 1 + z),
y ~ -1 + x + varying(~ -1 + w) + random(~ 1 + z),
y ~ -1 + x + random(~ 1 + z + w)
),
list(
y ~ 1 + x + w + random(~ -1 + z),
y ~ 1 + x + varying(~ -1 + w) + random(~ -1 + z),
y ~ 1 + x + random(~ -1 + z + w)
),
list(
y ~ -1 + w + random(~ 1 + x + z),
y ~ -1 + varying(~ -1 + w) + random(~ 1 + x + z),
y ~ -1 + random(~ 1 + x + z + w)
),
list(
y ~ 1 + w + varying(~ -1 + x) + random(~ -1 + z),
y ~ 1 + varying(~ -1 + x + w) + random(~ -1 + z),
y ~ 1 + varying(~ -1 + x) + random(~ -1 + z + w)
)
)
for (i in seq_along(obs_list)) {
o <- obs_list[[i]]
form_list <- list(
increment_formula(
formula = o$formula,
specials = list(),
x = "w",
type = "fixed",
varying_idx = o$varying,
fixed_idx = o$fixed,
random_idx = o$random,
varying_icpt = o$has_varying_intercept,
fixed_icpt = o$has_fixed_intercept,
random_icpt = o$has_random_intercept
),
increment_formula(
formula = o$formula,
specials = list(),
x = "w",
type = "varying",
varying_idx = o$varying,
fixed_idx = o$fixed,
random_idx = o$random,
varying_icpt = o$has_varying_intercept,
fixed_icpt = o$has_fixed_intercept,
random_icpt = o$has_random_intercept
),
increment_formula(
formula = o$formula,
specials = list(),
x = "w",
type = "random",
varying_idx = o$varying,
fixed_idx = o$fixed,
random_idx = o$random,
varying_icpt = o$has_varying_intercept,
fixed_icpt = o$has_fixed_intercept,
random_icpt = o$has_random_intercept
)
)
expect_equal(form_list[[1L]], out_list[[!!i]][[1L]], ignore_attr = TRUE)
expect_equal(form_list[[2L]], out_list[[!!i]][[2L]], ignore_attr = TRUE)
expect_equal(form_list[[3L]], out_list[[!!i]][[3L]], ignore_attr = TRUE)
}
})
test_that("non-lag term extraction from language objects is correct", {
expect_identical(find_nonlags(quote(x + z)), c("x", "z"))
expect_identical(find_nonlags(quote(x + fun(y))), c("x", "y"))
expect_identical(find_nonlags(quote(x + lag(y))), c("x"))
expect_identical(find_nonlags(quote(x + fun(y, lag(z)))), c("x", "y"))
})
test_that("internally unsupported families fail", {
expect_error(
dynamitefamily("new family"),
'"new family" is not a supported family\\.'
)
})
test_that("is.dynamitefamily works", {
a <- dynamitefamily("gaussian")
b <- stats::gaussian()
expect_identical(is.dynamitefamily(a), TRUE)
expect_identical(is.dynamitefamily(b), FALSE)
})
test_that("paste_rows works correctly", {
out <- "a\nb\nc\nd\ne\nf"
expect_identical(
paste_rows(c("a", "b", "c"), c("d", "e"), "f", .parse = TRUE),
out
)
expect_identical(
paste_rows(c("a", "b", "c"), c("d", "e"), "f", .parse = FALSE),
out
)
})
test_that("message_ outputs", {
expect_message(message_("This is a message"), "This is a message")
})
test_that("R_version works", {
expect_identical(R_version(), base::getRversion())
})
test_that("argument name conversion between rstan and cmdstanr works", {
dots <- list(
iter_warmup = 2000,
iter_sampling = 1000,
parallel_chains = 4,
seed = 0
)
expect_identical(
check_stan_args(dots, verbose = FALSE, backend = "rstan"),
list(warmup = 2000, iter = 1000, cores = 4, seed = 0)
)
dots <- list(
seed = 0,
iter_sampling = 1000,
parallel_chains = 4,
iter_warmup = 2000
)
expect_identical(
check_stan_args(dots, verbose = FALSE, backend = "rstan"),
list(seed = 0, iter = 1000, cores = 4, warmup = 2000)
)
dots <- list(warmup = 2000, iter = 1000, cores = 4, seed = 0)
expect_identical(
check_stan_args(dots, verbose = FALSE, backend = "cmdstanr"),
list(
iter_warmup = 2000,
iter_sampling = 1000,
parallel_chains = 4,
seed = 0
)
)
dots <- list(seed = 0, iter = 1000, cores = 4, warmup = 2000)
expect_identical(
check_stan_args(dots, verbose = FALSE, backend = "cmdstanr"),
list(
seed = 0,
iter_sampling = 1000,
parallel_chains = 4,
iter_warmup = 2000
)
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.