### error handling
x1 <- c(-1, seq(1, 100))
test_that("ttest() throws error if geo mean requested with non-pos data", {
expect_error(ttest(x1, geom = TRUE),
"Geometric mean requires that all numeric data are positive")
})
x1 <- seq(1, 100)
test_that("ttest() throws error if geo mean requested with non-pos null", {
expect_error(ttest(x1, geom = TRUE, null.hypoth = -1),
"Geometric mean cannot be less than zero")
})
x1 <- rnorm(100)
x2 <- rnorm(100)
test_that("ttest() throws error if alternative is not 'two.sided', 'less', or 'greater", {
expect_error(ttest(x1, x2, alternative = "blah"),
"'alternative' must be either 'less', 'two.sided', or 'greater'")
})
test_that("ttest() throws error if two variables and by also given", {
expect_error(ttest(x1, x2, by = rep(1, 100)),
"Please specify only one of the variables 'by' or 'var2'")
})
test_that("ttest() throws error if var.eq is not logical", {
expect_error(ttest(x1, var.eq = 2),
"Please specify a logical value for variable 'var.eq'")
})
x3 <- rnorm(99)
test_that("ttest() throws error if matched test performed on different numbers of observations", {
expect_error(ttest(x1, x3, matched = TRUE),
"Cannot perform matched t-test on variable of unequal length")
expect_error(ttest(x3, x1, matched = TRUE),
"Cannot perform matched t-test on variable of unequal length")
expect_error(ttest(x1, by = c(rep(1, 51), rep(2, 49)), matched = TRUE),
"Cannot perform matched t-test on variable of unequal length")
})
test_that("ttest() throws error for non-numeric data", {
expect_error(ttest(c("a", "B", "c")),
"Cannot perform t-test on non-numeric data")
expect_error(ttest(x1, rep(NA, 100)),
"Cannot perform t-test on non-numeric data")
})
test_that("ttest() throws error for non-numeric more.digits argument", {
expect_error(ttest(x1, more.digits = TRUE),
"Argument 'more.digits' must be numeric")
})
test_that("ttest() throws error if by argument contains only one value", {
expect_error(ttest(x1, by = rep(1, 100)),
"Variable 'by' only has one unique value")
})
test_that("ttest() throws error if by argument contains >2 unique values", {
expect_error(ttest(x1, by = c(rep(1, 50), rep(2, 49), 3)),
"Variable 'by' has more than two unique values.")
})
test_that("ttest() throws error if by argument is not of same length as data", {
expect_error(ttest(x1, by = c(rep(1, 50), rep(2, 51))),
"Variable 'by' is not of equal length to data vector")
expect_error(ttest(x1, by = c(rep(1, 50), rep(2, 50), NA)), "Variable 'by' is not of equal length to data vector")
})
test_that("ttest() warns about 0 null in geometric mean test", {
expect_warning(ttest(exp(x1), geom = TRUE),
"Geometric mean of zero not allowable: alternative hypothesis default changed to 1")
})
### one-sample test (or two-sample paired test)
set.seed(1)
a <- rnorm(50)
b <- rnorm(50)
d <- a - b
t1 <- ttest(d)
t2 <- t.test(d)
t3 <- ttest(a, b, matched = TRUE)
t4 <- t.test(a, b, paired = TRUE)
### TO-DO: really I should also be testing other quantities returned, but they mostly aren't provided
### by t.test() so maybe by-hand?
test_that("ttest() returns correct numbers for one-sample test", {
expect_s3_class(t1, "ttest")
expect_equal(t1$df, t2$parameter[[1]]) # df
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[7]], start = 2, stop = nchar(t1$tab[[7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 1e-3) # conf int
expect_equal(t1$tab[[1]], "d") # var name
expect_equal(as.numeric(t1$tab[[2]]), length(d)) # n obs
expect_equal(as.numeric(t1$tab[[3]]), sum(is.na(d))) # NAs
expect_equal(as.numeric(t1$tab[[4]]), t2$estimate[[1]], tolerance = 1e-2) # estimate of mean
expect_equal(as.numeric(t1$tab[[5]]), t2$stderr[[1]], tolerance = 1e-3) # standard error of mean est
expect_equal(as.numeric(t1$tab[[6]]), sd(d), tolerance = 1e-3) # std dev of data
expect_equal(t1$var1, d)
expect_equal(t1$var2, NA)
expect_equal(t1$by, NA)
expect_false(as.logical(t1$par[[1]])) # geom parameter
expect_equal(as.numeric(t1$par[[2]]), t2$null.value[[1]]) # null
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_false(as.logical(t1$par[[4]])) # equal var
expect_equal(as.numeric(t1$par[[5]]), attr(t2$conf.int, "conf.level")) # conf level
expect_false(as.logical(t1$par[[6]])) # matched
expect_equal(as.numeric(t1$par[[7]]), 3) # digits
expect_s3_class(t3, "ttest")
expect_equal(t3$df, t4$parameter[[1]]) # df
expect_equal(t3$tstat, t4$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t3$p, t4$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t3$tab[[3, 7]], start = 2, stop = nchar(t3$tab[[3, 7]])-1), ", ")[[1]]),
t4$conf.int[1:2], tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[1, 7]], start = 2, stop = nchar(t3$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[2, 7]], start = 2, stop = nchar(t3$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t3$tab[[1,1]], "a") # var name
expect_equal(t3$tab[[2,1]], "b") # var name
expect_equal(t3$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t3$tab[[1, 2]]), length(a)) # n obs
expect_equal(as.numeric(t3$tab[[2, 2]]), length(b)) # n obs
expect_equal(as.numeric(t3$tab[[3, 2]]), length(d)) # n obs
expect_equal(as.numeric(t3$tab[[1, 3]]), sum(is.na(a))) # NAs
expect_equal(as.numeric(t3$tab[[2, 3]]), sum(is.na(b))) # NAs
expect_equal(as.numeric(t3$tab[[3, 3]]), sum(is.na(d))) # NAs
expect_equal(as.numeric(t3$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t3$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t3$tab[[3, 4]]), t4$estimate[[1]], tolerance = 1e-2) # estimate of mean
expect_equal(t3$var1, a)
expect_equal(t3$var2, b)
expect_equal(t3$by, NA)
expect_false(as.logical(t3$par[[1]])) # geom parameter
expect_equal(as.numeric(t3$par[[2]]), t4$null.value[[1]]) # null
expect_equal(t3$par[[3]], t4$alternative) # alternative
expect_false(as.logical(t3$par[[4]])) # equal var
expect_equal(as.numeric(t3$par[[5]]), attr(t4$conf.int, "conf.level")) # conf level
expect_true(as.logical(t3$par[[6]])) # matched
expect_equal(as.numeric(t3$par[[7]]), 3) # digits
})
t1 <- ttest(d, null.hypoth = 0.5)
t2 <- t.test(d, mu = 0.5)
t3 <- ttest(a, b, matched = TRUE, null.hypoth = 0.5)
t4 <- t.test(a, b, paired = TRUE, mu = 0.5)
test_that("ttest() returns correct numbers for one-sample test (non-zero null)", {
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(t1$par[[2]]), t2$null.value[[1]]) # null
expect_equal(t3$tstat, t4$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t3$p, t4$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(t3$par[[2]]), t4$null.value[[1]]) # null
})
t1 <- ttest(d, alternative = "less")
t2 <- t.test(d, alternative = "less")
t3 <- ttest(a, b, matched = TRUE, alternative = "less")
t4 <- t.test(a, b, paired = TRUE, alternative = "less")
test_that("ttest() returns correct numbers for one-sample test (left)", {
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_equal(t3$tstat, t4$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t3$p, t4$p.value, tolerance = 1e-3) # p-value
expect_equal(t3$par[[3]], t4$alternative) # alternative
})
t1 <- ttest(d, alternative = "greater")
t2 <- t.test(d, alternative = "greater")
t3 <- ttest(a, b, matched = TRUE, alternative = "greater")
t4 <- t.test(a, b, paired = TRUE, alternative = "greater")
test_that("ttest() returns correct numbers for one-sample test (right)", {
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_equal(t3$p, t4$p.value, tolerance = 1e-3) # p-value
expect_equal(t3$par[[3]], t4$alternative) # alternative
})
t1 <- ttest(d, conf.level = 0.8)
t2 <- t.test(d, conf.level = 0.8)
t3 <- ttest(a, b, matched = TRUE, conf.level = 0.8)
t4 <- t.test(a, b, paired = TRUE, conf.level = 0.8)
test_that("ttest() returns correct numbers for one-sample test with conf.level other than 0.95", {
expect_equal(as.numeric(strsplit(substr(t1$tab[[7]], start = 2, stop = nchar(t1$tab[[7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 1e-3) # conf int
expect_equal(as.numeric(t1$par[[5]]), attr(t2$conf.int, "conf.level")) # conf level
expect_equal(as.numeric(strsplit(substr(t3$tab[[3, 7]], start = 2, stop = nchar(t3$tab[[3, 7]])-1), ", ")[[1]]),
t4$conf.int[1:2], tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[1, 7]], start = 2, stop = nchar(t3$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.9, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.9, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[2, 7]], start = 2, stop = nchar(t3$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.9, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.9, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(t3$par[[5]]), attr(t4$conf.int, "conf.level")) # conf level
})
t1 <- ttest(exp(d), geom = TRUE, null.hypoth = 1)
t2 <- t.test(d, geom = TRUE)
t3 <- ttest(exp(a), exp(b), matched = TRUE, geom = TRUE, null.hypoth = 1)
t4 <- t.test(a, b, paired = TRUE, geom = TRUE)
test_that("ttest() returns correct numbers for one-sample test of geometric mean", {
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[7]], start = 2, stop = nchar(t1$tab[[7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 1e-3) # conf int
expect_equal(as.numeric(t1$tab[[4]]), t2$estimate[[1]], tolerance = 1e-2) # estimate of mean
expect_equal(as.numeric(t1$tab[[5]]), t2$stderr[[1]], tolerance = 1e-3) # standard error of mean est
expect_equal(as.numeric(t1$tab[[6]]), sd(d), tolerance = 1e-3) # std dev of data
expect_true(as.logical(t1$par[[1]])) # geom parameter
expect_equal(as.numeric(t1$par[[2]]), 0) # null
expect_equal(t3$tstat, t4$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t3$p, t4$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t3$tab[[3, 7]], start = 2, stop = nchar(t3$tab[[3, 7]])-1), ", ")[[1]]),
t4$conf.int[1:2], tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[1, 7]], start = 2, stop = nchar(t3$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[2, 7]], start = 2, stop = nchar(t3$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(t3$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t3$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t3$tab[[3, 4]]), t4$estimate[[1]], tolerance = 1e-2) # estimate of mean
expect_true(as.logical(t3$par[[1]])) # geom parameter
expect_equal(as.numeric(t3$par[[2]]), 0) # null
})
### two-sample unpaired test, unpooled variance
t1 <- ttest(a, b, matched = FALSE)
t2 <- t.test(a, b, paired = FALSE)
test_that("ttest() returns correct numbers for two-sample test, unpooled variance", {
expect_s3_class(t1, "ttest")
expect_equal(t1$df, t2$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[3, 7]], start = 2, stop = nchar(t1$tab[[3, 7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[1, 7]], start = 2, stop = nchar(t1$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[2, 7]], start = 2, stop = nchar(t1$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t1$tab[[1,1]], "a") # var name
expect_equal(t1$tab[[2,1]], "b") # var name
expect_equal(t1$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t1$tab[[1, 2]]), length(a)) # n obs
expect_equal(as.numeric(t1$tab[[2, 2]]), length(b)) # n obs
expect_equal(as.numeric(t1$tab[[3, 2]]), length(a) + length(b)) # n obs
expect_equal(as.numeric(t1$tab[[1, 3]]), sum(is.na(a))) # NAs
expect_equal(as.numeric(t1$tab[[2, 3]]), sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[3, 3]]), sum(is.na(a)) + sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[3, 4]]), mean(a) - mean(b), tolerance = 1e-2) # estimate of mean
expect_equal(t1$var1, a)
expect_equal(t1$var2, b)
expect_equal(t1$by, NA)
expect_false(as.logical(t1$par[[1]])) # geom parameter
expect_equal(as.numeric(t1$par[[2]]), t2$null.value[[1]]) # null
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_false(as.logical(t1$par[[4]])) # equal var
expect_equal(as.numeric(t1$par[[5]]), attr(t2$conf.int, "conf.level")) # conf level
expect_false(as.logical(t1$par[[6]])) # matched
expect_equal(as.numeric(t1$par[[7]]), 3) # digits
})
### two-sample unpaired test, pooled variance
t1 <- ttest(a, b, matched = FALSE, var.eq = TRUE)
t2 <- t.test(a, b, paired = FALSE, var.equal = TRUE)
test_that("ttest() returns correct numbers for two-sample test, pooled variance", {
expect_s3_class(t1, "ttest")
expect_equal(t1$df, t2$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[3, 7]], start = 2, stop = nchar(t1$tab[[3, 7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[1, 7]], start = 2, stop = nchar(t1$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[2, 7]], start = 2, stop = nchar(t1$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t1$tab[[1,1]], "a") # var name
expect_equal(t1$tab[[2,1]], "b") # var name
expect_equal(t1$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t1$tab[[1, 2]]), length(a)) # n obs
expect_equal(as.numeric(t1$tab[[2, 2]]), length(b)) # n obs
expect_equal(as.numeric(t1$tab[[3, 2]]), length(a) + length(b)) # n obs
expect_equal(as.numeric(t1$tab[[1, 3]]), sum(is.na(a))) # NAs
expect_equal(as.numeric(t1$tab[[2, 3]]), sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[3, 3]]), sum(is.na(a)) + sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[3, 4]]), mean(a) - mean(b), tolerance = 1e-2) # estimate of mean
expect_equal(t1$var1, a)
expect_equal(t1$var2, b)
expect_equal(t1$by, NA)
expect_false(as.logical(t1$par[[1]])) # geom parameter
expect_equal(as.numeric(t1$par[[2]]), t2$null.value[[1]]) # null
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_true(as.logical(t1$par[[4]])) # equal var
expect_equal(as.numeric(t1$par[[5]]), attr(t2$conf.int, "conf.level")) # conf level
expect_false(as.logical(t1$par[[6]])) # matched
expect_equal(as.numeric(t1$par[[7]]), 3) # digits
})
### two-sample unpaired test, unpooled variance, using by
e <- c(a,b)
groups <- c(rep(1, 50), rep(2, 50))
t1 <- ttest(e, by = groups, matched = FALSE)
t2 <- t.test(a, b, paired = FALSE)
test_that("ttest() returns correct numbers for two-sample test using by, unpooled variance", {
expect_s3_class(t1, "ttest")
expect_equal(t1$df, t2$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[3, 7]], start = 2, stop = nchar(t1$tab[[3, 7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[1, 7]], start = 2, stop = nchar(t1$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[2, 7]], start = 2, stop = nchar(t1$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t1$tab[[1,1]], "groups = 1") # var name
expect_equal(t1$tab[[2,1]], "groups = 2") # var name
expect_equal(t1$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t1$tab[[1, 2]]), length(a)) # n obs
expect_equal(as.numeric(t1$tab[[2, 2]]), length(b)) # n obs
expect_equal(as.numeric(t1$tab[[3, 2]]), length(a) + length(b)) # n obs
expect_equal(as.numeric(t1$tab[[1, 3]]), sum(is.na(a))) # NAs
expect_equal(as.numeric(t1$tab[[2, 3]]), sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[3, 3]]), sum(is.na(a)) + sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[3, 4]]), mean(a) - mean(b), tolerance = 1e-2) # estimate of mean
expect_equal(t1$var1, a)
expect_equal(t1$var2, b)
expect_equal(t1$by, groups)
expect_false(as.logical(t1$par[[1]])) # geom parameter
expect_equal(as.numeric(t1$par[[2]]), t2$null.value[[1]]) # null
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_false(as.logical(t1$par[[4]])) # equal var
expect_equal(as.numeric(t1$par[[5]]), attr(t2$conf.int, "conf.level")) # conf level
expect_false(as.logical(t1$par[[6]])) # matched
expect_equal(as.numeric(t1$par[[7]]), 3) # digits
})
### two-sample paired test, unpooled variance, using factor version of by
e <- c(a,b)
groups <- factor(c(rep("group 1", 50), rep("group 2", 50)))
t1 <- ttest(e, by = groups, matched = TRUE)
t2 <- t.test(a, b, paired = TRUE)
test_that("ttest() returns correct numbers for two-sample test using by, unpooled variance", {
expect_s3_class(t1, "ttest")
expect_equal(t1$df, t2$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[3, 7]], start = 2, stop = nchar(t1$tab[[3, 7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[1, 7]], start = 2, stop = nchar(t1$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[2, 7]], start = 2, stop = nchar(t1$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t1$tab[[1,1]], "groups = group 1") # var name
expect_equal(t1$tab[[2,1]], "groups = group 2") # var name
expect_equal(t1$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t1$tab[[1, 2]]), length(a)) # n obs
expect_equal(as.numeric(t1$tab[[2, 2]]), length(b)) # n obs
expect_equal(as.numeric(t1$tab[[3, 2]]), length(a)) # n obs
expect_equal(as.numeric(t1$tab[[1, 3]]), sum(is.na(a))) # NAs
expect_equal(as.numeric(t1$tab[[2, 3]]), sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[3, 3]]), sum(is.na(a)) + sum(is.na(b))) # NAs
expect_equal(as.numeric(t1$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[3, 4]]), t2$estimate[[1]], tolerance = 1e-2) # estimate of mean
expect_equal(t1$var1, a)
expect_equal(t1$var2, b)
expect_equal(t1$by, c(rep(1, 50), rep(2, 50)))
expect_false(as.logical(t1$par[[1]])) # geom parameter
expect_equal(as.numeric(t1$par[[2]]), t2$null.value[[1]]) # null
expect_equal(t1$par[[3]], t2$alternative) # alternative
expect_false(as.logical(t1$par[[4]])) # equal var
expect_equal(as.numeric(t1$par[[5]]), attr(t2$conf.int, "conf.level")) # conf level
expect_true(as.logical(t1$par[[6]])) # matched
expect_equal(as.numeric(t1$par[[7]]), 3) # digits
})
### NAs
a_na <- c(NA, a)
b_na <- c(b, NA)
a_matched <- a_na
a_matched[51] <- NA
b_matched <- b_na
b_matched[1] <- NA
b_short <- b[1:49]
by <- c(rep(1, 51), rep(2,49), NA, NA)
e <- c(a_na, b_na)
t1 <- ttest(a_na, b_na, matched = TRUE)
t2 <- t.test(a_na, b_na, paired = TRUE)
t3 <- ttest(a_na, b_na, matched = FALSE)
t4 <- t.test(a_na, b_na, paired = FALSE)
t5 <- ttest(e, by = by)
t6 <- t.test(a_na, b[-50])
test_that("ttest() counts NAs correctly", {
expect_equal(t1$df, t2$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t1$tstat, t2$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t1$p, t2$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t1$tab[[3, 7]], start = 2, stop = nchar(t1$tab[[3, 7]])-1), ", ")[[1]]),
t2$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[1, 7]], start = 2, stop = nchar(t1$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t1$tab[[2, 7]], start = 2, stop = nchar(t1$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t1$tab[[1,1]], "a_na") # var name
expect_equal(t1$tab[[2,1]], "b_na") # var name
expect_equal(t1$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t1$tab[[1, 2]]), length(a_na)) # n obs
expect_equal(as.numeric(t1$tab[[2, 2]]), length(b_na)) # n obs
expect_equal(as.numeric(t1$tab[[3, 2]]), length(a_na)) # n obs
expect_equal(as.numeric(t1$tab[[1, 3]]), sum(is.na(a_na))) # NAs
expect_equal(as.numeric(t1$tab[[2, 3]]), sum(is.na(b_na))) # NAs
expect_equal(as.numeric(t1$tab[[3, 3]]), sum(is.na(a_na)) + sum(is.na(b_na))) # NAs
expect_equal(as.numeric(t1$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t1$tab[[3, 4]]), mean(a_matched - b_matched, na.rm=TRUE), tolerance = 1e-2) # estimate of mean
expect_equal(t1$var1, a_matched)
expect_equal(t1$var2, b_matched)
expect_equal(t1$by, NA)
expect_equal(t3$df, t4$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t3$tstat, t4$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t3$p, t4$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t3$tab[[3, 7]], start = 2, stop = nchar(t3$tab[[3, 7]])-1), ", ")[[1]]),
t4$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[1, 7]], start = 2, stop = nchar(t3$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t3$tab[[2, 7]], start = 2, stop = nchar(t3$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b) - qt(0.975, 49)*sd(b)/sqrt(length(b)), mean(b) + qt(0.975, 49)*sd(b)/sqrt(length(b))),
tolerance = 1e-3) # conf int
expect_equal(t3$tab[[1,1]], "a_na") # var name
expect_equal(t3$tab[[2,1]], "b_na") # var name
expect_equal(t3$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t3$tab[[1, 2]]), length(a_na)) # n obs
expect_equal(as.numeric(t3$tab[[2, 2]]), length(b_na)) # n obs
expect_equal(as.numeric(t3$tab[[3, 2]]), length(a_na) + length(b_na)) # n obs
expect_equal(as.numeric(t3$tab[[1, 3]]), sum(is.na(a_na))) # NAs
expect_equal(as.numeric(t3$tab[[2, 3]]), sum(is.na(b_na))) # NAs
expect_equal(as.numeric(t3$tab[[3, 3]]), sum(is.na(a_na)) + sum(is.na(b_na))) # NAs
expect_equal(as.numeric(t3$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t3$tab[[2, 4]]), mean(b), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t3$tab[[3, 4]]), mean(a_na, na.rm = TRUE) - mean(b_na, na.rm=TRUE),
tolerance = 1e-2) # estimate of mean
expect_equal(t3$var1, a_na)
expect_equal(t3$var2, b_na)
expect_equal(t3$by, NA)
expect_equal(t5$df, t6$parameter[[1]], tolerance = 1e-3) # df
expect_equal(t5$tstat, t6$statistic[[1]], tolerance = 1e-3) # test statistic
expect_equal(t5$p, t6$p.value, tolerance = 1e-3) # p-value
expect_equal(as.numeric(strsplit(substr(t5$tab[[3, 7]], start = 2, stop = nchar(t5$tab[[3, 7]])-1), ", ")[[1]]),
t6$conf.int[1:2], tolerance = 5e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t5$tab[[1, 7]], start = 2, stop = nchar(t5$tab[[1, 7]])-1), ", ")[[1]]),
c(mean(a) - qt(0.975, 49)*sd(a)/sqrt(length(a)), mean(a) + qt(0.975, 49)*sd(a)/sqrt(length(a))),
tolerance = 1e-3) # conf int
expect_equal(as.numeric(strsplit(substr(t5$tab[[2, 7]], start = 2, stop = nchar(t5$tab[[2, 7]])-1), ", ")[[1]]),
c(mean(b_short) - qt(0.975, 48)*sd(b_short)/sqrt(49),
mean(b_short) + qt(0.975, 48)*sd(b_short)/sqrt(49)),
tolerance = 1e-2) # conf int
expect_equal(t5$tab[[1,1]], "by = 1") # var name
expect_equal(t5$tab[[2,1]], "by = 2") # var name
expect_equal(t5$tab[[3,1]], "Difference") # var name
expect_equal(as.numeric(t5$tab[[1, 2]]), length(a_na)) # n obs
expect_equal(as.numeric(t5$tab[[2, 2]]), length(b_short)) # n obs
expect_equal(as.numeric(t5$tab[[3, 2]]), length(a_na) + length(b_na)-2) # n obs
expect_equal(as.numeric(t5$tab[[1, 3]]), sum(is.na(a_na))) # NAs
expect_equal(as.numeric(t5$tab[[2, 3]]), sum(is.na(b_short))) # NAs
expect_equal(as.numeric(t5$tab[[3, 3]]), sum(is.na(a_na)) + sum(is.na(b_short))) # NAs
expect_equal(as.numeric(t5$tab[[1, 4]]), mean(a), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t5$tab[[2, 4]]), mean(b_short), tolerance = 1e-3) # estimate of mean
expect_equal(as.numeric(t5$tab[[3, 4]]), mean(a_na, na.rm = TRUE) - mean(b_short),
tolerance = 1e-2) # estimate of mean
expect_equal(t5$var1, a_na)
expect_equal(t5$var2, b_short)
expect_equal(t5$by, by[!is.na(by)])
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.