context("ANOVAs: structural tests") test_that("dv is numeric", { data(obk.long) expect_that(aov_car(treatment ~ gender + Error(id/phase*hour), data = obk.long, observed = "gender"), throws_error("dv needs to be numeric.")) }) ## check_contrast argument disabled, see: https://github.com/singmann/afex/issues/109 # test_that("non Type 3 sums give warning", { # data(obk.long) # expect_that(aov_4(value ~ treatment * gender + (phase*hour|id), data = obk.long, observed = "gender", check.contrasts = FALSE), gives_warning("contrasts")) # }) test_that("return='aov' works", { data(obk.long) data(md_12.1) # purely within expect_that(aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), return = "aov"), is_a(c( "aovlist", "listof" ))) expect_that(aov_car(value ~ Error(id/phase*hour), data = obk.long, return = "aov"), is_a(c( "aovlist", "listof" ))) #purely between expect_that(suppressWarnings(aov_car(value ~ treatment * gender + Error(id), data = obk.long, return = "aov")), is_a(c( "aov"))) expect_that(suppressWarnings(aov_car(value~treatment * gender + Error(id/phase*hour), data = obk.long, return = "aov")), is_a(c( "aovlist", "listof" ))) # terms within Error() are within parentheses: test <- summary(aov_car(value ~ Error(id/phase*hour), data = obk.long, return = "aov")) positive <- summary(aov(value ~ phase*hour+Error(id/(phase*hour)), data = obk.long)) negative <- summary(aov(value ~ phase*hour+Error(id/phase*hour), data = obk.long)) expect_equal(test, positive) expect_false(isTRUE(all.equal(test, negative, check.attributes = FALSE))) orig1 <- aov_car(value ~ Error(id/phase*hour), data = obk.long) obk.long$id <- as.numeric(obk.long$id) obk.long$phase <- as.numeric(obk.long$phase) obk.long$hour <- as.numeric(obk.long$hour) positive2 <- summary(aov_car(value ~ Error(id/phase*hour), data = obk.long, return = "aov")) expect_equal(test, positive2) positive3 <- aov_car(value ~ Error(id/phase*hour), data = obk.long) expect_equal(summary(orig1), summary(positive3)) expect_equal(summary(orig1$Anova, multivariate = FALSE), summary(positive3$Anova, multivariate = FALSE)) expect_equal(summary(orig1$aov), summary(positive3$aov)) }) test_that("anova_table attributes", { data(md_12.1) no_attr <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), anova_table = list(correction = "none")) expect_that(attr(no_attr$anova_table, "correction"), equals("none")) expect_that(attr(no_attr$anova_table, "p_adjust_method"), equals("none")) expect_output(print(attr(no_attr$anova_table, "observed")), "character\\(0\\)") all_attr <- suppressWarnings(aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), observed = "angle", anova_table=list(correction = "HF", p_adjust_method = "bonferroni"))) expect_that(attr(all_attr$anova_table, "correction"), equals("HF")) expect_that(attr(all_attr$anova_table, "p_adjust_method"), equals("bonferroni")) expect_that(attr(all_attr$anova_table, "observed"), equals("angle")) expect_output(print(all_attr), "bonferroni") expect_output(print(all_attr), "HF") expect_false(isTRUE(all.equal(nice(no_attr), suppressWarnings(nice(all_attr)), check.attributes = FALSE))) added_attr <- suppressWarnings(nice(no_attr, correction = "HF", p_adjust_method = "bonferroni", observed = "angle")) expect_that(suppressWarnings(nice(all_attr)), is_identical_to(added_attr)) expect_that(nice(all_attr$anova_table), is_identical_to(added_attr)) reset_attr <- nice(no_attr, correction = "none", p.adjust = "none", observed = NULL) expect_that(nice(no_attr), is_identical_to(reset_attr)) expect_that(nice(no_attr$anova_table), is_identical_to(reset_attr)) intercept_test <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), anova_table = list(intercept = TRUE)) expect_output(print(intercept_test), "(Intercept)") mse_test <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), anova_table = list(MSE = FALSE)) expect_null(mse_test$anova_table$MSE) expect_output(print(nice(mse_test, MSE = TRUE)), "MSE") symbol_test <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), anova_table = list(sig_symbols = c(" ", " a", " aa", " aaa")), return = "nice") expect_output(print(symbol_test), "aaa") symbol_test <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), anova_table = list(sig_symbols = c(" ", " a", " aa", " aaa"))) expect_output(print(symbol_test), "aaa") new_symbols <- c(" ", " b", " bb", " bbb") symbol_test <- anova(symbol_test, sig_symbols = c(" ", " b", " bb", " bbb")) expect_identical(attr(symbol_test, "sig_symbols"), new_symbols) expect_output(print(nice(symbol_test)), "bbb") # Test support for old afex objects old_afex_object <- default_options <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise")) attr(old_afex_object$anova_table, "observed") <- NULL attr(old_afex_object$anova_table, "correction") <- NULL attr(old_afex_object$anova_table, "p.adjust.method") <- NULL expect_that(nice(old_afex_object), is_identical_to(nice(default_options))) # Test if sphericity correction is set to "none" in the absence of within-subject factors or if within-subject factors have only two levels data(obk.long) between_anova <- suppressWarnings(aov_car(value ~ treatment * gender + Error(id), data = obk.long)) expect_that(attr(between_anova$anova_table, "correction"), equals("none")) obk.long <- droplevels(obk.long[obk.long$phase %in% c("post","pre"),]) two_level_anova <- suppressWarnings(aov_ez("id", "value", obk.long, between = c("treatment"), within = c("phase"))) expect_that(attr(two_level_anova$anova_table, "correction"), equals("none")) more_levels_anova <- aov_ez("id", "value", obk.long, between = c("treatment"), within = c("phase", "hour")) expect_that(attr(more_levels_anova$anova_table, "correction"), equals("GG")) obk.long <- droplevels(obk.long[obk.long$hour %in% c("1","2"),]) two_levels_anova <- aov_ez("id", "value", obk.long, between = c("treatment"), within = c("phase", "hour")) expect_that(attr(two_levels_anova$anova_table, "correction"), equals("none")) # Test incomplete observation attribute incomplete_cases <- suppressWarnings( aov_ez("id", "rt", md_12.1[-10, ], within = c("angle", "noise")) ) expect_equal(as.character(attr(incomplete_cases, "incomplete_cases")), "10") expect_equal(as.character(attr(incomplete_cases$anova_table, "incomplete_cases")), "10") expect_equal(as.character(attr(anova(incomplete_cases), "incomplete_cases")), "10") }) test_that("error messages for common problems", { data(md_12.1) md_12.2 <- md_12.1[!(md_12.1$noise == "present" & md_12.1$angle == "0"),] expect_error( aov_ez("id", "rt", md_12.2, within = c("angle", "noise")), "within-subjects design") data(obk.long) obk2 <- obk.long[ !(obk.long$treatment == "A" & obk.long$gender == "F"), ] expect_error( aov_car(value ~ treatment * gender + Error(id), data = obk2, fun_aggregate = mean), "between-subjects design") expect_error( aov_car(value ~ treatment * gender + Error(id/phase*hour), data = obk2), "between-subjects design") expect_error( aov_car(value ~ treatment * gender, data = obk2), "formula needs an error term") expect_error( aov_4(formula = value ~ treatment * gender, data = obk2), "requires one random-effect term in formula" ) })