context("t-tests")
set.seed(20190513)
balanced_dat <- function(m, n) {
cluster <- factor(rep(LETTERS[1:m], each = n))
N <- length(cluster)
m1 <- sample(3:(m-7), size = 1)
m2 <- sample((m1 + 3):(m-3), size = 1) - m1
m3 <- m - m1 - m2
c(m1, m2, m3)
X_btw <- rep(rep(LETTERS[1:3], c(m1, m2, m3)), each = n)
X_wth <- rep(rep(c(0,1), each = n / 2), m)
nu <- rnorm(m)[cluster]
e <- rnorm(n * m)
y <- nu + e
data.frame(y, X_btw, X_wth, cluster, row = 1:N)
}
CRs <- paste0("CR", 0:4)
test_that("vcov arguments work", {
dat <- balanced_dat(m = 15, n = 8)
lm_fit <- lm(y ~ X_btw + X_wth, data = dat)
VCR <- lapply(CRs, function(t) vcovCR(lm_fit, cluster = dat$cluster, type = t))
test_A <- lapply(VCR, function(v) coef_test(lm_fit, vcov = v, test = "All", p_values = FALSE))
test_B <- lapply(CRs, function(t) coef_test(lm_fit, vcov = t, cluster = dat$cluster, test = "All", p_values = FALSE))
compare_ttests(test_A, test_B)
})
test_that("get_which_coef() works", {
f <- 6
beta <- 1:f
beta_names <- letters[1:f]
names(beta) <- beta_names
which_grid <- as.matrix(expand.grid(rep(list(c(FALSE,TRUE)), f)))
dimnames(which_grid) <- NULL
name_list <- apply(which_grid, 1, function(x) beta_names[x])
int_list <- apply(which_grid, 1, which)
which_log <- apply(which_grid[-1,], 1, get_which_coef, beta = beta)
which_char <- sapply(name_list[-1], get_which_coef, beta = beta)
which_int <- sapply(int_list[-1], get_which_coef, beta = beta)
expect_identical(get_which_coef(beta, coefs = "All"), rep(TRUE, f))
expect_error(get_which_coef(beta, coefs = which_grid[1,]))
expect_error(get_which_coef(beta, coefs = name_list[[1]]))
expect_error(get_which_coef(beta, coefs = int_list[[1]]))
expect_identical(which_log, which_char)
expect_identical(which_log, which_int)
expect_identical(which_char, which_int)
})
test_that("coefs argument works", {
dat <- balanced_dat(m = 15, n = 8)
lm_fit <- lm(y ~ X_btw + X_wth, data = dat)
which_grid <- expand.grid(rep(list(c(FALSE,TRUE)), length(coef(lm_fit))))
tests_all <- coef_test(lm_fit, vcov = "CR0", cluster = dat$cluster, test = "All", coefs = "All", p_values = FALSE)
tests_A <- apply(which_grid[-1,], 1, function(x) tests_all[x,])
tests_B <- apply(which_grid[-1,], 1, function(x) coef_test(lm_fit, vcov = "CR0", cluster = dat$cluster, test = "All", coefs = x, p_values = FALSE))
expect_equal(tests_A, tests_B, check.attributes = FALSE)
})
test_that("printing works", {
dat <- balanced_dat(m = 15, n = 8)
lm_fit <- lm(y ~ X_btw + X_wth, data = dat)
t_tests <- coef_test(lm_fit, vcov = "CR2", cluster = dat$cluster, test = "All")
expect_output(x <- print(t_tests))
expect_equal(t_tests$df_z, rep(Inf, 4L))
expect_equal(t_tests$df_t, rep(14L, 4L))
expect_true(all(t_tests$df_t >= round(t_tests$df_Satt,1)))
expect_identical(names(x),
c("Coef.","Estimate","SE","t-stat",
"d.f. (z)", "p-val (z)", "Sig.",
"d.f. (naive-t)", "p-val (naive-t)","Sig.",
"d.f. (naive-tp)", "p-val (naive-tp)","Sig.",
"d.f. (Satt)", "p-val (Satt)", "Sig.",
"s.p.", "p-val (Saddle)", "Sig."))
})
test_that("p-values are ordered", {
dat <- balanced_dat(m = 15, n = 8)
lm_fit <- lm(y ~ X_btw + X_wth, data = dat)
test_results <- lapply(CRs, function(t) coef_test(lm_fit, vcov = t, cluster = dat$cluster, test = "All"))
test_results <- do.call(rbind, test_results)
expect_true(with(test_results, all(p_z < p_t)))
expect_true(with(test_results, all(p_z < p_Satt)))
})
test_that("Satterthwaite df work for special cases", {
m <- sample(12:26, size = 1)
n <- sample(seq(4,12,2), size = 1)
dat <- balanced_dat(m, n)
lm_fit <- lm(y ~ X_btw + X_wth, data = dat)
t_tests <- coef_test(lm_fit, vcov = "CR2", cluster = dat$cluster, test = "Satterthwaite")
expect_equal(t_tests$df[4], m - 1)
mg <- table(dat$X_btw) / n
df <- apply(cbind(mg[1], mg[-1]), 1, function(x) sum(x)^2 * prod(x - 1) / sum(x^2 * (x - 1)))
expect_equivalent(t_tests$df[2:3], df)
lm_fit <- lm(y ~ 0 + cluster + X_wth, data = dat)
t_tests <- coef_test(lm_fit, vcov = "CR2", cluster = dat$cluster, test = "Satterthwaite")
expect_equal(t_tests$df[m + 1], m - 1)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.