context("ANOVAs: check that afex_aov return value works") test_that("split-plot produces an afex_aov object without error", { data(obk.long, package = "afex") split_plot1 <- aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long, observed = "gender", return = "afex_aov") split_plot2 <- aov_4(value ~ treatment * gender + (phase*hour|id), data = obk.long, observed = "gender", return = "afex_aov") split_plot3 <- aov_ez("id", "value", obk.long, between = c("treatment", "gender"), within = c("phase", "hour"), observed = "gender", return = "afex_aov") expect_that(split_plot1, is_equivalent_to(split_plot2)) expect_that(split_plot1, is_equivalent_to(split_plot3)) expect_that(split_plot1, is_a("afex_aov")) ## is same with numeric factor: obk.long$hour <- as.numeric(as.character(obk.long$hour)) split_plot4 <- aov_car(value ~ treatment * gender + Error(id/phase*hour), data = obk.long,observed = c("gender"), return = "afex_aov") expect_that(split_plot1, is_equivalent_to(split_plot4)) }) test_that("purely-between produces afex_aov objects without error", { data(obk.long, package = "afex") out1 <- aov_car(value ~ treatment * gender + Error(id), data = obk.long, observed = "gender", return = "afex_aov", fun_aggregate = mean) out2 <- aov_4(value ~ treatment * gender + (1|id), data = obk.long, observed = "gender", return = "afex_aov", fun_aggregate = mean) out3 <- aov_ez("id", "value", obk.long, between = c("treatment", "gender"), observed = "gender", return = "afex_aov", fun_aggregate = mean) expect_that(out1, is_equivalent_to(out2)) expect_that(out1, is_equivalent_to(out3)) expect_that(out1, is_a("afex_aov")) }) test_that("purely-within produces afex_aov objects without error", { data(obk.long, package = "afex") out1 <- aov_car(value ~ Error(id/(phase*hour)), data = obk.long, return = "afex_aov") out2 <- aov_4(value ~ 1 + (phase*hour|id), data = obk.long, return = "afex_aov") out3 <- aov_ez("id", "value", obk.long, within = c("phase", "hour"), return = "afex_aov") expect_that(out1, is_equivalent_to(out2)) expect_that(out1, is_equivalent_to(out3)) expect_that(out1, is_a("afex_aov")) }) test_that("within plus covariate produces afex_aov objects without error", { data(obk.long, package = "afex") out1 <- aov_car(value ~ gender + Error(id/(phase*hour)), data = obk.long, return = "afex_aov") out2 <- aov_4(value ~ gender + (phase*hour|id), data = obk.long, return = "afex_aov") out3 <- aov_ez("id", "value", obk.long, within = c("phase", "hour"), covariate = "gender", return = "afex_aov") expect_that(out1, is_equivalent_to(out2)) expect_that(out1, is_equivalent_to(out3)) expect_that(out1, is_a("afex_aov")) }) test_that("afex_aov object contains the right things", { data(obk.long, package = "afex") out1 <- aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long, observed = "gender", return = "afex_aov", include_aov = TRUE) expect_that(out1[["anova_table"]], is_a(c("anova", "data.frame"))) expect_that(out1[["aov"]], is_a(c("aovlist", "listof"))) expect_that(out1[["Anova"]], is_a(c("Anova.mlm"))) expect_that(out1[["lm"]], is_a(c("mlm", "lm"))) expect_that(out1[["data"]], is_a(c("list"))) expect_that(attr(out1, "dv"), is_a(c("character"))) }) test_that("afex_aov objects works without aov object", { data(obk.long, package = "afex") aop <- afex_options() afex_options(emmeans_model = "univariate") afex_options(include_aov = TRUE) a1 <- aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long, observed = "gender", include_aov = FALSE) a2 <- aov_4(value ~ treatment * gender + (phase*hour|id), data = obk.long, observed = "gender", include_aov = FALSE) a3 <- aov_ez("id", "value", obk.long, between = c("treatment", "gender"), within = c("phase", "hour"), observed = "gender", include_aov = FALSE) expect_equal(a1, a2) expect_equal(a1, a3) expect_null(a1$aov) skip_if_not_installed("emmeans") expect_message(em1 <- emmeans::emmeans(a1, "treatment"), "multivariate") expect_message(em2 <- emmeans::emmeans(a1, c("phase", "hour")), "multivariate") expect_identical(as.data.frame(summary(em1))$df[1], as.data.frame(summary(em2))$df[2]) ad <- aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long, observed = "gender") afex_options(include_aov = FALSE) an <- aov_car(value ~ treatment * gender + Error(id/(phase*hour)), data = obk.long, observed = "gender") expect_null(an$aov) expect_is(ad$aov, "aovlist") em3 <- emmeans::emmeans(ad, c("phase", "hour")) expect_message(em4 <- emmeans::emmeans(a1, c("phase", "hour")), "multivariate") expect_false(any(as.data.frame(summary(em3))$df == as.data.frame(summary(em4))$df)) afex_options(aop) # reset options }) test_that("better error message in case of all data having NAs", { data("stroop") # stroop_e1 <- stroop %>% # filter(!is.na(acc)) %>% # filter(study == "1") %>% # droplevels() stroop_e1_na <- stroop[ stroop$study == "1", ] suppressWarnings(expect_error(aov_ez( id = "pno", dv = "acc", data = stroop_e1_na, within = c("congruency", "condition") ), "Try adding to ANOVA call: na.rm = TRUE")) expect_is(aov_ez( id = "pno", dv = "acc", data = stroop_e1_na, within = c("congruency", "condition"), na.rm = TRUE, include_aov = FALSE, fun_aggregate = mean ), "afex_aov") })