context("Tests for formula parsing functions")
test_that("brmsterms finds all variables in very long formulas", {
expect_equal(
all.vars(brmsterms(t2_brand_recall ~ psi_expsi + psi_api_probsolv +
psi_api_ident + psi_api_intere + psi_api_groupint)$all),
all.vars(t2_brand_recall ~ t2_brand_recall + psi_expsi + psi_api_probsolv + psi_api_ident +
psi_api_intere + psi_api_groupint)
)
})
test_that("brmsterms handles very long RE terms", {
# tests issue #100
covariate_vector <- paste0("xxxxx", 1:80, collapse = "+")
formula <- paste(sprintf("y ~ 0 + trait + trait:(%s)", covariate_vector),
sprintf("(1+%s|id)", covariate_vector), sep = " + ")
bterms <- brmsterms(as.formula(formula))
expect_equal(bterms$dpars$mu$re$group, "id")
})
test_that("brmsterms correctly handles auxiliary parameter 'mu'", {
bterms1 <- brmsterms(y ~ x + (x|g))
bterms2 <- brmsterms(bf(y ~ 1, mu ~ x + (x|g)))
expect_equal(bterms1$dpars$mu, bterms2$dpars$mu)
# commented out for now as updating is not yet enabled
# bterms1 <- brmsterms(bf(y ~ z + x + (x|g)))
# bterms2 <- brmsterms(bf(y ~ z, lf(mu ~ x + (x|g))))
# expect_equal(bterms1$dpars$mu, bterms2$dpars$mu)
#
# bterms1 <- brmsterms(bf(y ~ z, lf(mu ~ x + (x|g), cmc = FALSE)))
# expect_true(!attr(bterms1$dpars$mu$fe, "cmc"))
#
# expect_error(brmsterms(bf(y ~ z, mu ~ x + (x|g), nl = TRUE)),
# "Cannot combine non-linear formulas")
})
test_that("brmsterms correctly check fixed auxiliary parameters", {
bform <- bf(y~1, sigma = 4, family = gaussian)
expect_true(is.brmsterms(brmsterms(bform)))
bform <- bf(y~1, zi = 0.5, family = zero_inflated_beta())
expect_true(is.brmsterms(brmsterms(bform)))
bform <- bf(y~1, shape = -2, family = Gamma())
expect_error(brmsterms(bform), "Parameter 'shape' must be positive")
bform <- bf(y~1, quantile = 1.5, family = asym_laplace())
expect_error(brmsterms(bform), "Parameter 'quantile' must be between 0 and 1")
})
test_that("check_re_formula returns correct REs", {
old_form <- y ~ x + (1|patient) + (Trt_c|visit)
form <- check_re_formula(~ (1 | visit), old_form)
expect_equivalent(form, ~ (1 | gr(visit)))
form <- check_re_formula(~ (1 + Trt_c|visit), old_form)
expect_equivalent(form, ~ (1 + Trt_c | gr(visit)))
form <- check_re_formula(~ (0 + Trt_c | visit) + (1|patient), old_form)
expect_equivalent(form, ~ (1|gr(patient)) + (0 + Trt_c | gr(visit)))
# checks for fix of issue #844
old_form <- y ~ 0 + x1 + x2 + (0 + x1 + x2 | x3)
expect_error(
check_re_formula(~ (0 + x2 + x1 | x3), old_form),
"Order of terms in 're_formula' should match the original order"
)
})
test_that("update_re_terms works correctly", {
expect_equivalent(update_re_terms(y ~ x, ~ (1|visit)), y ~ x)
expect_equivalent(update_re_terms(y ~ x*z + (1+Trt_c|patient), ~ (1|patient)),
y ~ x*z + (1|gr(patient)))
expect_equivalent(update_re_terms(y ~ x + (1|patient), ~ 1), y ~ x)
expect_equivalent(update_re_terms(y ~ 1|patient, ~ 1), y ~ 1)
expect_equivalent(update_re_terms(y ~ -1 + x + (1+visit|patient), NA),
y ~ -1 + x)
expect_equivalent(update_re_terms(y ~ x + (1+visit|patient), NULL),
y ~ x + (1+visit|patient))
expect_equivalent(update_re_terms(y ~ (1|patient), NA), y ~ 1)
expect_equivalent(update_re_terms(y ~ x + (1+x|visit), ~ (1|visit)),
y ~ x + (1|gr(visit)))
expect_equivalent(update_re_terms(y ~ x + (1|visit), ~ (1|visit) + (x|visit)),
y ~ x + (1|gr(visit)))
expect_equal(update_re_terms(bf(y ~ x, sigma = ~ x + (x|g)), ~ (1|g)),
bf(y ~ x, sigma = ~ x + (1|gr(g))))
expect_equal(update_re_terms(bf(y ~ x, x ~ z + (1|g), nl = TRUE), ~ (1|g)),
bf(y ~ x, x ~ z + (1|gr(g)), nl = TRUE))
})
test_that("unused variables are correctly incorporated", {
bterms <- brmsterms(bf(y ~ 1, unused = ~ x))
expect_true("x" %in% all.vars(bterms$allvars))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.