context("ANOVAs: replicating published results") test_that("purely within ANOVA, return='univ': Maxell & Delaney (2004), Table 12.5 and 12.6, p. 578", { ### replicate results from Table 12.6 data(md_12.1) # valus from table: f <- c(40.72, 33.77, 45.31) ss_num <- c(289920, 285660, 105120) ss_error <- c(64080, 76140, 20880) num_df <- c(2, 1, 2) den_df <- c(18, 9, 18) md_ez_r <- aov_ez("id", "rt", md_12.1, within = c("angle", "noise")) md_car_r <- aov_car(rt ~ 1 + Error(id / angle * noise), md_12.1) md_aov_4_r <- aov_4(rt ~ 1 + (angle * noise | id), md_12.1) expect_that(md_ez_r, is_equivalent_to(md_car_r)) expect_that(md_ez_r, is_equivalent_to(md_aov_4_r)) expect_that(round(md_ez_r$anova_table[, "F"], 2), is_equivalent_to(f)) tmp_univ <- suppressWarnings(summary(md_ez_r$Anova)$univariate.tests) if ("Sum Sq" %in% colnames(tmp_univ)) { # to allow both car 3.0 and earlier versions ss_test <- tmp_univ[, "Sum Sq"][-1] } else { ss_test <- tmp_univ[, "SS"][-1] } expect_that(ss_test, is_equivalent_to(ss_num)) expect_that(tmp_univ[, "Error SS"][-1], is_equivalent_to(ss_error)) expect_that( anova(md_ez_r, correction = "none")[, "num Df"], is_equivalent_to(num_df) ) expect_that( anova(md_ez_r, correction = "none")[, "den Df"], is_equivalent_to(den_df) ) }) test_that("Analysis of Singmann & Klauer (2011, Exp. 1)", { data(sk2011.1, package = "afex") out1 <- aov_ez( "id", "response", sk2011.1[sk2011.1$what == "affirmation", ], within = c("inference", "type"), between = "instruction", anova_table = (es = "pes"), fun_aggregate = mean, return = "afex_aov" ) df_num <- rep(1, 7) df_den <- rep(38, 7) MSE <- c(1072.42, 1007.21, 1007.21, 187.9, 187.9, 498.48, 498.48) F <- c(0.13, 13.01, 12.44, 0.06, 3.09, 29.62, 10.73) pes <- c(0, 0.26, 0.25, 0, 0.08, 0.44, 0.22) p <- c(0.72, 0.0009, 0.001, 0.81, 0.09, 0.001, 0.002) expect_that(out1$anova_table[["num Df"]], is_equivalent_to(df_num)) expect_that(out1$anova_table[["den Df"]], is_equivalent_to(df_den)) expect_that(out1$anova_table[["MSE"]], equals(MSE, tolerance = 0.001)) expect_that(out1$anova_table[["F"]], equals(F, tolerance = 0.001)) expect_that(out1$anova_table[["pes"]], equals(pes, tolerance = 0.02)) expect_that(out1$anova_table[["Pr(>F)"]], equals(p, tolerance = 0.01)) }) test_that("Data from O'Brien & Kaiser replicates their paper (p. 328, Table 8, column 'average'", { data(obk.long, package = "afex") out1 <- aov_car( value ~ treatment * gender + Error(id / (phase * hour)), data = obk.long, observed = "gender", return = "afex_aov", anova_table = list(correction = "none") ) expect_that( unname(unlist(out1[["anova_table"]][ "treatment", c("num Df", "den Df", "F") ])), equals(c(2, 10, 3.94), tolerance = 0.001) ) expect_that( unname(unlist(out1[["anova_table"]]["gender", c("num Df", "den Df", "F")])), equals(c(1, 10, 3.66), tolerance = 0.001) ) expect_that( round( unname(unlist(out1[["anova_table"]][ "treatment:gender", c("num Df", "den Df", "F") ])), 2 ), equals(c(2, 10, 2.86), tolerance = 0.001) ) ## check against own results: anova_tab <- structure( list( `num Df` = c(2, 1, 2, 2, 4, 2, 4, 4, 8, 4, 8, 8, 16, 8, 16), `den Df` = c(10, 10, 10, 20, 20, 20, 20, 40, 40, 40, 40, 80, 80, 80, 80), MSE = c( 22.8055555555555, 22.8055555555555, 22.8055555555555, 4.01388888888889, 4.01388888888889, 4.01388888888889, 4.01388888888889, 1.5625, 1.5625, 1.5625, 1.5625, 1.20208333333333, 1.20208333333333, 1.20208333333333, 1.20208333333333 ), F = c( 3.940494501098, 3.65912050065102, 2.85547267441343, 16.1329196993199, 4.85098375975551, 0.282782484190432, 0.636602429722426, 16.6856704980843, 0.0933333333333336, 0.450268199233716, 0.620437956204379, 1.17990398215104, 0.345292160558641, 0.931293452060798, 0.735935938468544 ), ges = c( 0.198248507309966, 0.114806410630587, 0.179183259116394, 0.151232705544895, 0.0967823866181358, 0.00312317714869712, 0.0140618480455475, 0.12547183572154, 0.00160250371109459, 0.0038716854273722, 0.010669821220833, 0.0153706689696344, 0.00905399063368842, 0.012321395080303, 0.0194734697889242 ), `Pr(>F)` = c( 0.0547069269265198, 0.0848002538616402, 0.104469234023772, 6.73163655770545e-05, 0.00672273209545241, 0.756647338927411, 0.642369488905348, 4.02664339633774e-08, 0.999244623719389, 0.771559070589063, 0.755484449904079, 0.32158661418337, 0.990124565656718, 0.495611922963992, 0.749561639456282 ) ), .Names = c("num Df", "den Df", "MSE", "F", "ges", "Pr(>F)"), heading = c("Anova Table (Type 3 tests)\n", "Response: value"), row.names = c( "treatment", "gender", "treatment:gender", "phase", "treatment:phase", "gender:phase", "treatment:gender:phase", "hour", "treatment:hour", "gender:hour", "treatment:gender:hour", "phase:hour", "treatment:phase:hour", "gender:phase:hour", "treatment:gender:phase:hour" ), class = c("data.frame") ) expect_equal(out1[["anova_table"]], anova_tab, check.attributes = FALSE) }) test_that("Data from O'Brien & Kaiser adjusted for familywise error rate (p. 328, Table 8, column 'average'", { data(obk.long, package = "afex") out1 <- aov_car( value ~ treatment * gender + Error(id / (phase * hour)), data = obk.long, observed = "gender", return = "afex_aov", anova_table = list(correction = "none", p_adjust_method = "bonferroni") ) expect_that( unname(unlist(out1[["anova_table"]][ "treatment", c("num Df", "den Df", "F") ])), equals(c(2, 10, 3.94), tolerance = 0.001) ) expect_that( unname(unlist(out1[["anova_table"]]["gender", c("num Df", "den Df", "F")])), equals(c(1, 10, 3.66), tolerance = 0.001) ) expect_that( round( unname(unlist(out1[["anova_table"]][ "treatment:gender", c("num Df", "den Df", "F") ])), 2 ), equals(c(2, 10, 2.86), tolerance = 0.001) ) ## check against own results: anova_tab <- structure( list( `num Df` = c(2, 1, 2, 2, 4, 2, 4, 4, 8, 4, 8, 8, 16, 8, 16), `den Df` = c(10, 10, 10, 20, 20, 20, 20, 40, 40, 40, 40, 80, 80, 80, 80), MSE = c( 22.8055555555555, 22.8055555555555, 22.8055555555555, 4.01388888888889, 4.01388888888889, 4.01388888888889, 4.01388888888889, 1.5625, 1.5625, 1.5625, 1.5625, 1.20208333333333, 1.20208333333333, 1.20208333333333, 1.20208333333333 ), F = c( 3.940494501098, 3.65912050065102, 2.85547267441343, 16.1329196993199, 4.85098375975551, 0.282782484190432, 0.636602429722426, 16.6856704980843, 0.0933333333333336, 0.450268199233716, 0.620437956204379, 1.17990398215104, 0.345292160558641, 0.931293452060798, 0.735935938468544 ), ges = c( 0.198248507309966, 0.114806410630587, 0.179183259116394, 0.151232705544895, 0.0967823866181358, 0.00312317714869712, 0.0140618480455475, 0.12547183572154, 0.00160250371109459, 0.0038716854273722, 0.010669821220833, 0.0153706689696344, 0.00905399063368842, 0.012321395080303, 0.0194734697889242 ), `Pr(>F)` = c( 0.0547069269265198, 0.0848002538616402, 0.104469234023772, 6.73163655770545e-05, 0.00672273209545241, 0.756647338927411, 0.642369488905348, 4.02664339633774e-08, 0.999244623719389, 0.771559070589063, 0.755484449904079, 0.32158661418337, 0.990124565656718, 0.495611922963992, 0.749561639456282 ) ), .Names = c("num Df", "den Df", "MSE", "F", "ges", "Pr(>F)"), heading = c("Anova Table (Type 3 tests)\n", "Response: value"), row.names = c( "treatment", "gender", "treatment:gender", "phase", "treatment:phase", "gender:phase", "treatment:gender:phase", "hour", "treatment:hour", "gender:hour", "treatment:gender:hour", "phase:hour", "treatment:phase:hour", "gender:phase:hour", "treatment:gender:phase:hour" ), class = c("data.frame") ) anova_tab$`Pr(>F)` <- p.adjust(anova_tab$`Pr(>F)`, method = "bonferroni") expect_equal(out1[["anova_table"]], anova_tab, check.attributes = FALSE) }) test_that("afex_aov printing", { data(sk2011.1, package = "afex") out_new <- aov_ez( "id", "response", sk2011.1[sk2011.1$what == "affirmation", ], within = c("inference", "type"), between = "instruction", anova_table = (es = "pes"), fun_aggregate = mean, return = "afex_aov" ) expect_output(print(out_new), "Signif. codes") expect_output(print(anova(out_new)), "Signif. codes") expect_output(print(nice(out_new)), "Anova") load("afex_aov_16_1.rda") expect_output(print(out1), "Anova") skip_if_not(packageVersion("car") >= '3.0.13') ## only throws error with car version '3.0.13' or larger, the expect_error( anova(out1), regexp = "summary.Anova.mlm() failed for 'afex_aov' object.", fixed = TRUE ) expect_error( nice(out1), regexp = "summary.Anova.mlm() failed for 'afex_aov' object.", fixed = TRUE ) })