testthat::context('anova')
data('ToothGrowth')
testthat::test_that('All options in the ANOVA work (sunny)', {
r <- jmv::ANOVA(
formula = len ~ supp + dose + supp:dose,
data = ToothGrowth,
effectSize = c("eta", "partEta", "omega"),
modelTest = TRUE,
homo = TRUE,
norm = TRUE,
contrasts = list(
list(var="supp", type="deviation"),
list(var="dose", type="simple")
),
postHoc = ~ supp + dose + supp:dose,
postHocCorr = c(
"tukey",
"scheffe",
"bonf",
"holm",
"none"
),
postHocES = "d",
postHocEsCi = TRUE,
emMeans = ~ supp:dose,
emmPlots = FALSE,
emmTables = TRUE
)
# Test main anova table
main <- as.data.frame(r$main)
testthat::expect_equal(
c(2740.103, 205.35, 2426.434, 108.319, 712.106),
main$ss,
tolerance=1e-6
)
testthat::expect_equal(
c(5, 1, 2, 2, 54),
main$df
)
testthat::expect_equal(
c(548.021, 205.35, 1213.217, 54.159, 13.187),
main$ms,
tolerance=1e-6
)
testthat::expect_equal(
c(41.557, 15.572, 92, 4.107, NA),
main$F,
tolerance=1e-5
)
testthat::expect_equal(
c(0, 0.00023, 0, 0.02186, NA),
main$p,
tolerance=1e-5
)
testthat::expect_equal(
c(NA, 0.059, 0.703, 0.031, NA),
main$etaSq,
tolerance=1e-3
)
testthat::expect_equal(
c(NA, 0.224, 0.773, 0.132, NA),
main$etaSqP,
tolerance=1e-3
)
testthat::expect_equal(
c(NA, 0.055, 0.693, 0.024, NA),
main$omegaSq,
tolerance=1e-3
)
# Test homogeneity assumption test table
homo <- r$assump$homo$asDF
testthat::expect_equal(1.940, homo$F, tolerance=1e-4)
testthat::expect_equal(5, homo$df1)
testthat::expect_equal(54, homo$df2)
testthat::expect_equal(0.1027, homo$p, tolerance=1e-4)
# Test normality assumption test table
norm <- r$assump$norm$asDF
testthat::expect_equal(0.98499, norm$`s[sw]`, tolerance=1e-5)
testthat::expect_equal(0.66942, norm$`p[sw]`, tolerance=1e-5)
# Test contrast tables
c1 <- r$contrasts[[1]]$asDF
testthat::expect_equal("VC - OJ, VC", c1$contrast)
testthat::expect_equal(-1.85, c1$est)
testthat::expect_equal(0.469, c1$se, tolerance=1e-3)
testthat::expect_equal(-3.946, c1$t, tolerance=1e-4)
testthat::expect_equal(0.000231, c1$p, tolerance=1e-6)
c2 <- r$contrasts[[2]]$asDF
testthat::expect_equal(c("1000 - 500", "2000 - 500"), c2$contrast)
testthat::expect_equal(c(9.13, 15.495), c2$est)
testthat::expect_equal(c(1.148, 1.148), c2$se, tolerance=1e-3)
testthat::expect_equal(c(7.951, 13.493), c2$t, tolerance=1e-4)
testthat::expect_equal(c(0, 0), c2$p, tolerance=1e-6)
# Test post-hoc tables
ph1 <- r$postHoc[[1]]$asDF
testthat::expect_equal("OJ", ph1$supp1)
testthat::expect_equal("VC", ph1$supp2)
testthat::expect_equal(3.7, ph1$md)
testthat::expect_equal(0.938, ph1$se, tolerance=1e-3)
testthat::expect_equal(54, ph1$df)
testthat::expect_equal(3.946, ph1$t, tolerance=1e-4)
testthat::expect_equal(0.000231, ph1$pnone, tolerance=1e-6)
testthat::expect_equal(0.000231, ph1$ptukey, tolerance=1e-6)
testthat::expect_equal(0.000231, ph1$pscheffe, tolerance=1e-6)
testthat::expect_equal(0.000231, ph1$pbonferroni, tolerance=1e-6)
testthat::expect_equal(0.000231, ph1$pholm, tolerance=1e-6)
testthat::expect_equal(1.0189, ph1$d, tolerance=1e-4)
testthat::expect_equal(0.4652, ph1$dlower, tolerance=1e-4)
testthat::expect_equal(1.5726, ph1$dupper, tolerance=1e-5)
ph2 <- r$postHoc[[2]]$asDF
testthat::expect_equal(c("500", "500", "1000"), ph2$dose1)
testthat::expect_equal(c("1000", "2000", "2000"), ph2$dose2)
testthat::expect_equal(c(-9.13, -15.495, -6.365), ph2$md)
testthat::expect_equal(c(1.148, 1.148, 1.148), ph2$se, tolerance=1e-3)
testthat::expect_equal(c(54, 54, 54), ph2$df)
testthat::expect_equal(c(-7.951, -13.493, -5.543), ph2$t, tolerance=1e-4)
testthat::expect_equal(c(1e-10, 0, 9.121e-07), ph2$pnone, tolerance=1e-10)
testthat::expect_equal(c(4e-10, 0, 2.7076e-06), ph2$ptukey, tolerance=1e-10)
testthat::expect_equal(c(8e-10, 0, 5.2332e-06), ph2$pscheffe, tolerance=1e-10)
testthat::expect_equal(c(4e-10, 0, 2.7363e-06), ph2$pbonferroni, tolerance=1e-10)
testthat::expect_equal(c(2e-10, 0, 9.121e-07), ph2$pholm, tolerance=1e-10)
testthat::expect_equal(c(-2.514, -4.267, -1.753), ph2$d, tolerance=1e-4)
testthat::expect_equal(c(-3.312, -5.306, -2.471), ph2$dlower, tolerance=1e-4)
testthat::expect_equal(c(-1.716, -3.228, -1.034), ph2$dupper, tolerance=1e-4)
ph3 <- r$postHoc[[3]]$asDF
testthat::expect_equal(
c("OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "OJ", "VC", "VC", "VC"),
ph3$supp1
)
testthat::expect_equal(
c(
"500", "500", "500", "500", "500", "1000", "1000", "1000", "1000", "2000", "2000",
"2000", "500", "500", "1000"
),
ph3$dose1
)
testthat::expect_equal(
c("OJ", "OJ", "VC", "VC", "VC", "OJ", "VC", "VC", "VC", "VC", "VC", "VC", "VC", "VC", "VC"),
ph3$supp2
)
testthat::expect_equal(
c(
"1000", "2000", "500", "1000", "2000", "2000", "500", "1000", "2000", "500", "1000",
"2000", "1000", "2000", "2000"
),
ph3$dose2
)
testthat::expect_equal(
c(
-9.47, -12.83, 5.25, -3.54, -12.91, -3.36, 14.72, 5.93, -3.44, 18.08, 9.29, -0.08,
-8.79, -18.16, -9.37
),
ph3$md
)
testthat::expect_equal(
c(
1.624, 1.624, 1.624, 1.624, 1.624, 1.624, 1.624, 1.624, 1.624, 1.624, 1.624, 1.624,
1.624, 1.624, 1.624
),
ph3$se,
tolerance=1e-3
)
testthat::expect_equal(
c(54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54),
ph3$df
)
testthat::expect_equal(
c(
-5.831, -7.9, 3.233, -2.18, -7.949, -2.069, 9.064, 3.651, -2.118, 11.133, 5.72, -0.049,
-5.413, -11.182, -5.77
),
ph3$t,
tolerance=1e-4
)
testthat::expect_equal(
c(0, 0, 0.002, 0.034, 0, 0.043, 0, 0.001, 0.039, 0, 0, 0.961, 0, 0, 0),
ph3$pnone,
tolerance=1e-3
)
testthat::expect_equal(
c(0, 0, 0.024, 0.264, 0, 0.319, 0, 0.007, 0.294, 0, 0, 1, 0, 0, 0),
ph3$ptukey,
tolerance=1e-3
)
testthat::expect_equal(
c(0, 0, 0.081, 0.456, 0, 0.517, 0, 0.032, 0.49, 0, 0, 1, 0, 0, 0),
ph3$pscheffe,
tolerance=1e-3
)
testthat::expect_equal(
c(0, 0, 0.031, 0.505, 0, 0.65, 0, 0.009, 0.582, 0, 0, 1, 0, 0, 0),
ph3$pbonferroni,
tolerance=1e-3
)
testthat::expect_equal(
c(0, 0, 0.01, 0.135, 0, 0.135, 0, 0.004, 0.135, 0, 0, 0.961, 0, 0, 0),
ph3$pholm,
tolerance=1e-3
)
testthat::expect_equal(
c(
-2.608, -3.533, 1.446, -0.975, -3.555, -0.925, -4.054, 1.633, -0.947, -4.979, -2.558,
-0.022, -2.421, -5.001, -2.58
),
ph3$d,
tolerance=1e-4
)
testthat::expect_equal(
c(
-3.636, -4.659, 0.507, -1.891, -4.684, -1.839, -5.243, 0.683, -1.862, -6.293, -3.582,
-0.919, -3.431, -6.318, -3.606
),
ph3$dlower,
tolerance=1e-4
)
testthat::expect_equal(
c(
-1.58, -2.407, 2.385, -0.059, -2.426, -0.011, -2.864, 2.583, -0.032, -3.665, -1.535,
0.875, -1.41, -3.684, -1.555
),
ph3$dupper,
tolerance=1e-3
)
# Test note in post-hoc tables
testthat::expect_equal(
"Comparisons are based on estimated marginal means",
r$postHoc[[1]]$notes$note$note
)
# Test marginal means tables
emm <- r$emm[[1]]$emmTable$asDF
testthat::expect_equal(
c("500", "500", "1000", "1000", "2000", "2000"),
emm$dose
)
testthat::expect_equal(
c("OJ", "VC", "OJ", "VC", "OJ", "VC"),
emm$supp
)
testthat::expect_equal(
c(13.23, 7.98, 22.7, 16.77, 26.06, 26.14),
emm$mean,
)
testthat::expect_equal(
c(1.148, 1.148, 1.148, 1.148, 1.148, 1.148),
emm$se,
tolerance=1e-3
)
testthat::expect_equal(
c(10.928, 5.678, 20.398, 14.468, 23.758, 23.838),
emm$lower,
tolerance=1e-4
)
testthat::expect_equal(
c(15.532, 10.282, 25.002, 19.072, 28.362, 28.442),
emm$upper,
tolerance=1e-4
)
})
testthat::test_that('Analysis work with special characters in variable names', {
data <- ToothGrowth
data$dose <- factor(data$dose)
levels(data$dose) <- paste(levels(data$dose), "ш")
levels(data$supp) <- paste(levels(data$supp), "月")
names(data) <- c("lㅈen", "su pp ツ", "do se ฐ")
r <- jmv::ANOVA(
formula = `lㅈen` ~ `su pp ツ` + `do se ฐ` + `su pp ツ`:`do se ฐ`,
data = data,
modelTest = TRUE,
)
main <- r$main$asDF
testthat::expect_equal(
c("Overall model", "su pp ツ", "do se ฐ", "su pp ツ:do se ฐ", "Residuals"),
main$name,
)
testthat::expect_equal(
c(2740.103, 205.35, 2426.434, 108.319, 712.106),
main$ss,
tolerance=1e-6
)
testthat::expect_equal(
c(5, 1, 2, 2, 54),
main$df
)
testthat::expect_equal(
c(548.021, 205.35, 1213.217, 54.159, 13.187),
main$ms,
tolerance=1e-6
)
testthat::expect_equal(
c(41.557, 15.572, 92, 4.107, NA),
main$F,
tolerance=1e-5
)
testthat::expect_equal(
c(0, 0.00023, 0, 0.02186, NA),
main$p,
tolerance=1e-5
)
})
testthat::test_that('Correct error message is displayed with perfect fit of the model', {
df <- data.frame(
dep = c(90, 87, 75, 60, 35, 50, 65, 70),
var = factor(1:8)
)
testthat::expect_error(
jmv::ANOVA(df, dep='dep', factors='var', qq=TRUE),
"perfect fit"
)
})
testthat::test_that('Provide error message when dep variable contains only one unique value', {
df <- data.frame(
dep = c(1, 1, 1, 1, 1, 1, 1),
var = factor(c(1, 2, 1, 2, 1, 2, 1))
)
testthat::expect_error(
jmv::ANOVA(formula=dep~var, data=df),
"Dependent variable 'dep' contains only one unique value"
)
})
testthat::test_that('Provide error message when a variable contains only missing values', {
df <- data.frame(
dep = 1:7,
var = rep(NA, 7)
)
testthat::expect_error(
jmv::ANOVA(formula=dep~var, data=df),
"The dataset contains 0 rows"
)
})
testthat::test_that('Provide error message when dep variable contains infinte values', {
df <- data.frame(
dep = c(1:6, Inf),
var = rep(1:2, length.out = 7)
)
testthat::expect_error(
jmv::ANOVA(formula=dep~var, data=df),
"Dependent variable 'dep' contains infinite values"
)
})
testthat::test_that("Contrasts work", {
df <- data.frame(
dep = c(1,6,3,2,6,2,3,1,9,2),
var = factor(rep(1:2, length.out = 10))
)
contrasts <- list(
list(var="var", type="deviation")
)
r <- jmv::ANOVA(data=df,dep="dep", factors=c("var"), contrasts=contrasts)
contr <- r$contrasts[[1]]$asDF
testthat::expect_equal(contr$est, -0.9)
testthat::expect_equal(contr$se, 0.825, tolerance=1e-3)
testthat::expect_equal(contr$t, -1.091, tolerance=1e-3)
testthat::expect_equal(contr$p, 0.307, tolerance=1e-3)
})
testthat::test_that("Contrasts work with special characters in variable name", {
df <- data.frame(
dep = c(1,6,3,2,6,2,3,1,9,2),
var = factor(rep(1:2, length.out = 10))
)
names(df) <- c("dep~A", "var A")
contrasts <- list(
list(var="var A", type="deviation")
)
r <- jmv::ANOVA(data=df,dep="dep~A", factors=c("var A"), contrasts=contrasts)
contr <- r$contrasts[[1]]$asDF
testthat::expect_equal(contr$est, -0.9)
testthat::expect_equal(contr$se, 0.825, tolerance=1e-3)
testthat::expect_equal(contr$t, -1.091, tolerance=1e-3)
testthat::expect_equal(contr$p, 0.307, tolerance=1e-3)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.