Nothing
local_edition(2)
skip_if_not_installed("broom")
test_that("has_builtin_ci works", {
lm1 <- lm(Sepal.Width ~ Sepal.Length, iris)
expect_true(huxtable:::has_builtin_ci(lm1))
aov1 <- stats::aov(Sepal.Width ~ Sepal.Length, iris)
expect_false(huxtable:::has_builtin_ci(aov1))
})
test_that("huxreg copes with different models", {
set.seed(27101975)
dfr <- data.frame(a = rnorm(100), b = rnorm(100))
dfr$y <- dfr$a + rnorm(100)
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(y ~ a + b, dfr)
glm1 <- glm(I(y > 0) ~ a, dfr, family = binomial)
expect_error(hr <- huxreg(lm1, lm2, glm1), regexp = NA)
})
test_that("huxreg confidence intervals work", {
skip_if_not_installed("nnet")
set.seed(27101975)
dfr <- data.frame(a = rnorm(100), b = rnorm(100))
dfr$y <- dfr$a + rnorm(100)
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(y ~ a + b, dfr)
glm1 <- glm(I(y > 0) ~ a, dfr, family = binomial)
library(nnet)
mn <- nnet::multinom(I(y > 0) ~ a, dfr, trace = FALSE)
expect_silent(huxreg(lm1, lm2, glm1, mn, error_format = "{conf.low}-{conf.high}",
statistics = c("r.squared"), ci_level = 0.95))
})
test_that("huxreg confidence intervals work when tidy c.i.s not available", {
skip_if_not_installed("nlme")
if (packageVersion("broom") >= "0.7.0") skip_if_not_installed("broom.mixed")
set.seed(27101975)
data(Orthodont, package = "nlme")
# method ML avoids a warning in broom::glance
fm1 <- nlme::lme(distance ~ age + Sex, data = Orthodont, random = ~ 1, method = "ML")
expect_error(
huxreg(fm1, tidy_args = list(effects = "fixed"), statistics = "nobs", ci_level = 0.95,
error_format = "({conf.low}-{conf.high})"),
regexp = NA
)
})
test_that("huxreg works with single coefficient", {
set.seed(27101975)
dfr <- data.frame(a = rnorm(100), b = rnorm(100))
dfr$y <- dfr$a + rnorm(100)
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(y ~ a + b, dfr)
expect_error(huxreg(lm1, lm2, coefs = "a"), regexp = NA)
})
test_that("huxreg merges coefficients with same names", {
set.seed(27101975)
dfr <- data.frame(y = rnorm(100), a = rnorm(100), b = rnorm(100), d = rnorm(100))
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(y ~ b, dfr)
ht <- huxreg(lm1, lm2, coefs = c("name" = "a", "name" = "b"))
expect_equal(sum(ht[[1]] == "name"), 1)
lm3 <- lm(y ~ a + d, dfr)
lm4 <- lm(y ~ b + d, dfr)
ht2 <- huxreg(lm3, lm4, coefs = c("name" = "a", "name" = "b", "d"))
expect_equal(sum(ht2[[1]] == "name"), 1)
})
test_that("huxreg bold_signif works", {
lm1 <- lm(Petal.Length ~ Sepal.Length, iris)
expect_silent(hr1 <- huxreg(lm1, bold_signif = 0.05))
expect_identical(unname(bold(hr1)), matrix(c(rep(FALSE, 11), rep(TRUE, 4), rep(FALSE, 5)), 10, 2))
})
test_that("huxreg error_pos works", {
lm1 <- lm(Petal.Length ~ Sepal.Length, iris)
lm2 <- lm(Sepal.Width ~ Sepal.Length, iris)
expect_silent(hr1 <- huxreg(lm1, lm2, error_pos = "right"))
expect_equal(ncol(hr1), 5)
})
test_that("huxreg number_format works correctly", {
set.seed(27101975)
dfr <- data.frame(y = rnorm(100), a = rnorm(100), b = rnorm(100), d = rnorm(100))
dfr$y <- dfr$y + dfr$a
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(y ~ b, dfr)
hr <- huxreg(lm1, lm2, number_format = 4)
expect_equal(number_format(hr)[4, 2], list(4))
expect_equal(number_format(hr)[9, 2], list(4))
expect_match(to_screen(hr), paste0("\\D", round(coef(lm1)[2], 4), "\\D"))
hr2 <- huxreg(lm1, lm2, number_format = "%5.3f")
expect_equal(number_format(hr2)[4, 2], list("%5.3f"))
expect_equal(number_format(hr2)[9, 2], list("%5.3f"))
expect_match(to_screen(hr2), paste0("\\D", sprintf("%5.3f", coef(lm1)[2]), "\\D"))
})
test_that("huxreg borders argument works", {
set.seed(27101975)
dfr <- data.frame(y = rnorm(100), a = rnorm(100), b = rnorm(100), d = rnorm(100))
dfr$y <- dfr$y + dfr$a
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(y ~ b, dfr)
hr <- huxreg(lm1, lm2, borders = .7, outer_borders = .8)
expect_equivalent(unname(brdr_thickness(bottom_border(hr))[, 2]),
c(.7, rep(0, 5), .7, rep(0, nrow(hr) - 9), .8, 0))
expect_equivalent(unname(brdr_thickness(top_border(hr))[1, ]),
matrix(0.8, 1, 3))
hr2 <- huxreg(lm1, lm2, borders = 0, outer_borders = 0)
expect_equivalent(unname(brdr_thickness(bottom_border(hr2)[])),
matrix(0, nrow(hr2), ncol(hr2)))
expect_equivalent(unname(brdr_thickness(top_border(hr2)[])),
matrix(0, nrow(hr2), ncol(hr2)))
})
test_that("huxreg statistics names shown in output", {
m <- lm(Sepal.Width ~ Sepal.Length, data = iris)
expect_match(to_screen(huxreg(m, statistics = c(foo = "nobs"))), "foo")
})
test_that("huxreg stars printed correctly", {
set.seed(27101975)
dfr <- data.frame(y = rnorm(20), a = rnorm(20))
dfr$y <- dfr$y + dfr$a + rnorm(20, 0, 4)
dfr$z <- dfr$a + rnorm(20, 0, 1)
lm1 <- lm(y ~ a, dfr)
lm2 <- lm(z ~ a, dfr)
number_regex <- "\\s*(\\d|\\.)+\\s*"
expect_match(huxreg(lm1)[[4, 2]], number_regex)
expect_match(huxreg(lm1, stars = c("@" = 0.1))[[4, 2]], paste0(number_regex, "@\\s*"))
expect_match(huxreg(lm1, stars = c("@" = 0.1, "wrong" = 0.05))[[4, 2]], paste0(number_regex, "@\\s*"))
expect_match(huxreg(lm1, stars = c("wrong" = 0.05, "@" = 0.1))[[4, 2]], paste0(number_regex, "@\\s*"))
expect_match(huxreg(lm2)[[4, 2]], paste0(number_regex, "\\*\\*\\*\\s*"))
})
test_that("huxreg works for models without tidy p values", {
skip_if_not_installed("lme4")
skip_if_not_installed("broom.mixed")
expect_warning(huxreg(lme4::lmer(Sepal.Width ~ Sepal.Length + (1 | Species), data = iris),
statistics = "nobs"), "p values")
})
test_that("huxreg works when nobs not available", {
skip_if_not_installed("lmtest")
m <- lm(Sepal.Width ~ Sepal.Length, data = iris)
ct <- lmtest::coeftest(m)
expect_error(huxreg(ct, statistics = NULL), regexp = NA)
})
test_that("huxreg column names are legitimate", {
hr1 <- huxreg(lm(Sepal.Width ~ Sepal.Length, data = iris), lm(Sepal.Width ~ Sepal.Length, data = iris))
cn <- colnames(hr1)
expect_identical(cn, make.names(cn))
})
test_that("can pass generics::tidy arguments to huxreg", {
lm1 <- lm(Sepal.Width ~ Sepal.Length, data = iris)
glm1 <- glm(I(Sepal.Width > 3) ~ Sepal.Length, data = iris, family = binomial)
expect_silent(huxreg(glm1, tidy_args = list(exponentiate = TRUE), statistics = "nobs"))
expect_silent(huxreg(lm1, glm1, tidy_args = list(list(), list(exponentiate = TRUE)), statistics = "nobs"))
expect_silent(huxreg(lm1, glm1, tidy_args = list(exponentiate = FALSE), statistics = "nobs"))
})
test_that("bugfix: tidy_args works when argument list contains a list", {
lm1 <- lm(Sepal.Width ~ Sepal.Length, data = iris)
lm2 <- lm1
expect_silent(huxreg(lm1, lm2, tidy_args = list(ignored = list())))
})
test_that("can pass generics::glance arguments to huxreg", {
skip_if_not_installed("AER")
iv1 <- AER::ivreg(Sepal.Width ~ Sepal.Length | Petal.Length, data = iris)
expect_silent(hr <- huxreg(iv1, glance_args = list(diagnostics = TRUE),
statistics = "statistic.Sargan"))
})
test_that("tidy_override", {
skip_if_not_installed("broom")
lm1 <- lm(Sepal.Width ~ Sepal.Length, data = iris)
fakes <- c(0.0001, 0.048)
fixed_lm1 <- tidy_override(lm1, p.value = fakes, glance = list(r.squared = 0.95))
expect_equivalent(broom::tidy(fixed_lm1)$p.value, fakes)
expect_equivalent(broom::glance(fixed_lm1)$r.squared, 0.95)
lm1_newcol <- tidy_override(lm1, foo = 1:2, glance = list(bar = 1))
expect_error(broom::tidy(lm1_newcol), "not found")
expect_error(broom::glance(lm1_newcol), "not found")
lm1_newcol <- tidy_override(lm1, foo = 1:2, glance = list(bar = 1), extend = TRUE)
expect_equivalent(broom::tidy(lm1_newcol)$foo, 1:2)
expect_equivalent(broom::glance(lm1_newcol)$bar, 1)
expect_error(tidy_override(lm1, foo = 1:2, bar = 1:3),
info = "Unequal length tidy_override columns should throw an error")
})
test_that("tidy_replace", {
skip_if_not_installed("broom")
skip_if_not_installed("nnet")
mnl <- nnet::multinom(gear ~ mpg, mtcars)
tidied <- broom::tidy(mnl)
mnl4 <- tidy_replace(mnl, tidied[tidied$y.level == 4, ])
expect_equivalent(nrow(broom::tidy(mnl4)), 2)
expect_identical(broom::glance(mnl4), broom::glance(mnl))
expect_silent(huxreg(mnl4, statistics = "nobs"))
})
test_that("glance.tidy_override works if underlying object has no glance() method", {
skip_if_not_installed("broom")
skip_if_not_installed("lmtest")
lm1 <- lm(Sepal.Width ~ Sepal.Length, data = iris)
ct1 <- lmtest::coeftest(lm1)
fixed_ct1 <- tidy_override(ct1, glance = list(foo = 1.3), extend = TRUE)
expect_equivalent(broom::glance(fixed_ct1)$foo, 1.3)
})
test_that("tidy.tidy_override works if underlying object has no tidy() method", {
skip_if_not_installed("broom")
tidy_monster <- tidy_override(
list(),
term = c("a", "monster"),
estimate = c(1, 2),
extend = TRUE
)
expect_equivalent(broom::tidy(tidy_monster)$term, c("a", "monster"))
})
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.