test_that("error handling works", {
df <- data.frame(
y = sample.int(30, replace = TRUE),
x = sample(c("A", "B"), 30, replace = TRUE, prob = c(0.6, 0.4))
)
m1 <- stats::glm(y ~ x, df, family = poisson())
m2 <- stats::lm(y ~ x, df)
expect_error(
vif(m1),
glue::glue(
"The method `vif` is not yet implemented for an object \\
of class `glm`.
If you would like it to be implemented, please file an issue at \\
https://github.com/verasls/lvmisc/issues."
),
class = "error_no_method_for_class"
)
expect_error(
vif("m"),
glue::glue(
"The method `vif` is not yet implemented for an object \\
of class `character`.
If you would like it to be implemented, please file an issue at \\
https://github.com/verasls/lvmisc/issues."
),
class = "error_no_method_for_class"
)
expect_error(
vif(m2),
"Not enough terms in `model` to check for multicollinearity."
)
})
test_that("model without intercept gets a warning", {
m1 <- lm(disp ~ mpg + hp - 1, mtcars)
m2 <- lme4::lmer(disp ~ mpg + hp - 1 + (1 | cyl), mtcars)
expect_warning(
vif(m1),
"`model` has no intercept; VIFs may not be sensible."
)
expect_warning(
vif(m2),
"`model` has no intercept; VIFs may not be sensible."
)
})
test_that("vif() produces the right output", {
m <- lm(disp ~ mpg + cyl + hp + I(hp^2), mtcars)
out <- vif(m)
expect_equal(names(out), c("Term", "VIF", "Classification"))
expect_equal(
as.character(out[["Term"]]),
c("mpg", "cyl", "hp", "I(hp^2)")
)
expect_equal(
as.character(out[["Classification"]]),
c("Low", "Moderate", "High", "High")
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.