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" ) })