Nothing
# most tests of prior related stuff can be found in tests.make_stancode.R
context("Tests for prior generating functions")
test_that("get_prior finds all classes for which priors can be specified", {
expect_equal(
sort(
get_prior(
count ~ zBase * Trt + (1|patient) + (1+Trt|visit),
data = epilepsy, family = "poisson"
)$class
),
sort(c(rep("b", 4), c("cor", "cor"), "Intercept", rep("sd", 6)))
)
expect_equal(
sort(
get_prior(
rating ~ treat + period + cse(carry), data = inhaler,
family = sratio(threshold = "equidistant")
)$class
),
sort(c(rep("b", 4), "delta", rep("Intercept", 1)))
)
})
test_that("set_prior allows arguments to be vectors", {
bprior <- set_prior("normal(0, 2)", class = c("b", "sd"))
expect_is(bprior, "brmsprior")
expect_equal(bprior$prior, rep("normal(0, 2)", 2))
expect_equal(bprior$class, c("b", "sd"))
})
test_that("print for class brmsprior works correctly", {
expect_output(print(set_prior("normal(0,1)")), fixed = TRUE,
"b ~ normal(0,1)")
expect_output(print(set_prior("normal(0,1)", coef = "x")),
"b_x ~ normal(0,1)", fixed = TRUE)
expect_output(print(set_prior("cauchy(0,1)", class = "sd", group = "x")),
"sd_x ~ cauchy(0,1)", fixed = TRUE)
expect_output(print(set_prior("target += normal_lpdf(x | 0,1))", check = FALSE)),
"target += normal_lpdf(x | 0,1))", fixed = TRUE)
})
test_that("get_prior returns correct nlpar names for random effects pars", {
# reported in issue #47
data <- data.frame(y = rnorm(10), x = rnorm(10), g = rep(1:2, 5))
gp <- get_prior(bf(y ~ a - b^x, a + b ~ (1+x|g), nl = TRUE),
data = data)
expect_equal(sort(unique(gp$nlpar)), c("", "a", "b"))
})
test_that("get_prior returns correct fixed effect names for GAMMs", {
dat <- data.frame(y = rnorm(10), x = rnorm(10),
z = rnorm(10), g = rep(1:2, 5))
prior <- get_prior(y ~ z + s(x) + (1|g), data = dat)
expect_equal(prior[prior$class == "b", ]$coef,
c("", "sx_1", "z"))
prior <- get_prior(bf(y ~ lp, lp ~ z + s(x) + (1|g), nl = TRUE),
data = dat)
expect_equal(prior[prior$class == "b", ]$coef,
c("", "Intercept", "sx_1", "z"))
})
test_that("get_prior returns correct prior names for auxiliary parameters", {
dat <- data.frame(y = rnorm(10), x = rnorm(10),
z = rnorm(10), g = rep(1:2, 5))
prior <- get_prior(bf(y ~ 1, phi ~ z + (1|g)), data = dat, family = Beta())
prior <- prior[prior$dpar == "phi", ]
pdata <- data.frame(class = c("b", "b", "Intercept", rep("sd", 3)),
coef = c("", "z", "", "", "", "Intercept"),
group = c(rep("", 4), "g", "g"),
stringsAsFactors = FALSE)
pdata <- pdata[with(pdata, order(class, group, coef)), ]
expect_equivalent(prior[, c("class", "coef", "group")], pdata)
})
test_that("get_prior returns correct priors for multivariate models", {
dat <- data.frame(y1 = rnorm(10), y2 = c(1, rep(1:3, 3)),
x = rnorm(10), g = rep(1:2, 5))
bform <- bf(mvbind(y1, y2) ~ x + (x|ID1|g)) + set_rescor(TRUE)
# check global priors
prior <- get_prior(bform, dat, family = gaussian())
expect_equal(prior[prior$resp == "y1" & prior$class == "b", "coef"], c("", "x"))
expect_equal(prior[prior$class == "rescor", "prior"], "lkj(1)")
# check family and autocor specific priors
family <- list(gaussian, Beta())
bform <- bf(y1 ~ x + (x|ID1|g) + ar()) + bf(y2 ~ 1)
prior <- get_prior(bform, dat, family = family)
expect_true(any(with(prior, class == "sigma" & resp == "y1")))
expect_true(any(with(prior, class == "ar" & resp == "y1")))
expect_true(any(with(prior, class == "phi" & resp == "y2")))
expect_true(!any(with(prior, class == "ar" & resp == "y2")))
})
test_that("get_prior returns correct priors for categorical models", {
# check global priors
dat <- data.frame(y2 = c(1, rep(1:3, 3)), x = rnorm(10), g = rep(1:2, 5))
prior <- get_prior(y2 ~ x + (x|ID1|g), data = dat, family = categorical())
expect_equal(prior[prior$dpar == "mu2" & prior$class == "b", "coef"], c("", "x"))
})
test_that("set_prior alias functions produce equivalent results", {
expect_equal(set_prior("normal(0, 1)", class = "sd"),
prior(normal(0, 1), class = sd))
expect_equal(set_prior("normal(0, 1)", class = "sd", nlpar = "a"),
prior(normal(0, 1), class = "sd", nlpar = a))
expect_equal(set_prior("normal(0, 1)", class = "sd", nlpar = "a"),
prior_(~normal(0, 1), class = ~sd, nlpar = quote(a)))
expect_equal(set_prior("normal(0, 1)", class = "sd"),
prior_string("normal(0, 1)", class = "sd"))
})
test_that("external interface of validate_prior works correctly", {
prior1 <- prior(normal(0,10), class = b) +
prior(cauchy(0,2), class = sd)
prior1 <- validate_prior(
prior1, count ~ zAge + zBase * Trt + (1|patient),
data = epilepsy, family = poisson()
)
expect_true(all(c("b", "Intercept", "sd") %in% prior1$class))
expect_equal(nrow(prior1), 9)
})
test_that("overall intercept priors are adjusted for the intercept", {
dat <- data.frame(y = rep(c(1, 3), each = 5), off = 10)
prior1 <- get_prior(y ~ 1 + offset(off), dat)
int_prior <- prior1$prior[prior1$class == "Intercept"]
expect_equal(int_prior, "student_t(3, -8, 2.5)")
})
test_that("as.brmsprior works correctly", {
dat <- data.frame(prior = "normal(0,1)", x = "test", coef = c("a", "b"))
bprior <- as.brmsprior(dat)
expect_equal(bprior$prior, rep("normal(0,1)", 2))
expect_equal(bprior$class, rep("b", 2))
expect_equal(bprior$coef, c("a", "b"))
expect_equal(bprior$x, NULL)
expect_equal(bprior$lb, rep(NA_character_, 2))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.