context("ANOVAs: known bugs") test_that("aov does not throw 'Error() model is singular' warning for missing values", { data(md_12.1) md_12.1b <- md_12.1[-1, ] expect_warning( aov_ez("id", "rt", md_12.1b, within = c("angle", "noise")), "Missing values", all = TRUE ) }) test_that("regex works correctly in aov_car when also having within factors outside the Error term", { data(obk.long) expect_is( aov_car( value ~ treatment * gender * phase * hour + Error(id / phase * hour), data = obk.long ), "afex_aov" ) }) test_that("another label bug (May 2014)", { data("sk2011.1") levels(sk2011.1$inference) <- c("A+:D-", "A+:D+", "A-:D+", "A- : D-") expect_is( aov_ez( "id", "response", sk2011.1, between = "instruction", within = c("type", "inference"), return = "Anova", fun_aggregate = mean ), "Anova.mlm" ) }) test_that("orig label bug", { data(obk.long) obk2 <- obk.long levels(obk2$phase) <- c("fup test", "post-hans", "pre tenetious") expect_is( aov_car( value ~ treatment * gender + age + Error(id / phase * hour), data = obk2, factorize = FALSE, return = "Anova" ), "Anova.mlm" ) }) test_that("ANCOVA check bug (reported by Gang Chen), January 2013", { dat <- read.table( header = TRUE, text = "ID Group Gender ROI Value Propdd00 GAS0 MAD0 CPD0 2016 AE M 05_06 1.581 0.543 1.908 0.439999999999998 -0.5335 2016 AE M 07_08 1.521 0.543 1.908 0.439999999999998 -0.5335 2016 AE M 09_10 1.623 0.543 1.908 0.439999999999998 -0.5335 2016 AE M 03_04 1.569 0.543 1.908 0.439999999999998 -0.5335 2016 AE M 11_12 1.719 0.543 1.908 0.439999999999998 -0.5335 2016 AE M 01_02 1.509 0.543 1.908 0.439999999999998 -0.5335 2031 HC F 09_10 1.739 -0.014 0.0480000000000018 -2.347 1.9665 2031 HC F 01_02 1.763 -0.014 0.0480000000000018 -2.347 1.9665 2031 HC F 03_04 1.8 -0.014 0.0480000000000018 -2.347 1.9665 2031 HC F 11_12 1.793 -0.014 0.0480000000000018 -2.347 1.9665 2031 HC F 05_06 1.765 -0.014 0.0480000000000018 -2.347 1.9665 2031 HC F 07_08 1.654 -0.014 0.0480000000000018 -2.347 1.9665 2063 AE F 11_12 1.742 -0.027 2.348 -8.88 -0.0335000000000001 2063 AE F 01_02 1.634 -0.027 2.348 -8.88 -0.0335000000000001 2063 AE F 03_04 1.638 -0.027 2.348 -8.88 -0.0335000000000001 2063 AE F 07_08 1.604 -0.027 2.348 -8.88 -0.0335000000000001 2063 AE F 09_10 1.654 -0.027 2.348 -8.88 -0.0335000000000001 2063 AE F 05_06 1.625 -0.027 2.348 -8.88 -0.0335000000000001 2042 HC M 05_06 1.649 -0.014 2.058 -3.497 -0.8635 2042 HC M 07_08 1.565 -0.014 2.058 -3.497 -0.8635 2042 HC M 09_10 1.765 -0.014 2.058 -3.497 -0.8635 2042 HC M 03_04 1.677 -0.014 2.058 -3.497 -0.8635 2042 HC M 11_12 1.706 -0.014 2.058 -3.497 -0.8635 2042 HC M 01_02 1.618 -0.014 2.058 -3.497 -0.8635 2071 AE M 05_06 1.712 -0.317 -0.802 6.74 1.9665 2071 AE M 07_08 1.64 -0.317 -0.802 6.74 1.9665 2071 AE M 09_10 1.791 -0.317 -0.802 6.74 1.9665 2071 AE M 03_04 1.725 -0.317 -0.802 6.74 1.9665 2071 AE M 11_12 1.782 -0.317 -0.802 6.74 1.9665 2071 AE M 01_02 1.712 -0.317 -0.802 6.74 1.9665 2134 HC M 05_06 1.672 -0.014 0.347999999999999 -5.807 -2.5335 2134 HC M 07_08 1.657 -0.014 0.347999999999999 -5.807 -2.5335 2134 HC M 09_10 1.791 -0.014 0.347999999999999 -5.807 -2.5335 2134 HC M 03_04 1.633 -0.014 0.347999999999999 -5.807 -2.5335 2134 HC M 11_12 1.859 -0.014 0.347999999999999 -5.807 -2.5335 2134 HC M 01_02 1.653 -0.014 0.347999999999999 -5.807 -2.5335 2009 AE F 09_10 1.672 -0.027 1.058 3.36 11.1365 2009 AE F 03_04 1.723 -0.027 1.058 3.36 11.1365 2009 AE F 05_06 1.676 -0.027 1.058 3.36 11.1365 2009 AE F 07_08 1.622 -0.027 1.058 3.36 11.1365 2009 AE F 01_02 1.633 -0.027 1.058 3.36 11.1365 2009 AE F 11_12 1.853 -0.027 1.058 3.36 11.1365 2132 HC M 05_06 1.758 -0.014 -1.082 -2.857 -0.0335000000000001 2132 HC M 07_08 1.623 -0.014 -1.082 -2.857 -0.0335000000000001 2132 HC M 09_10 1.843 -0.014 -1.082 -2.857 -0.0335000000000001 2132 HC M 03_04 1.773 -0.014 -1.082 -2.857 -0.0335000000000001 2132 HC M 11_12 1.806 -0.014 -1.082 -2.857 -0.0335000000000001 2132 HC M 01_02 1.708 -0.014 -1.082 -2.857 -0.0335000000000001 2127 HC F 11_12 1.824 -0.014 0.628 6.223 -0.5335 2127 HC F 09_10 1.871 -0.014 0.628 6.223 -0.5335 2127 HC F 01_02 1.687 -0.014 0.628 6.223 -0.5335 2127 HC F 03_04 1.699 -0.014 0.628 6.223 -0.5335 2127 HC F 07_08 1.646 -0.014 0.628 6.223 -0.5335 2127 HC F 05_06 1.738 -0.014 0.628 6.223 -0.5335 2081 AE M 09_10 1.807 -0.027 -2.082 2.43 -1.5335 2081 AE M 11_12 1.917 -0.027 -2.082 2.43 -1.5335 2081 AE M 03_04 1.767 -0.027 -2.082 2.43 -1.5335 2081 AE M 05_06 1.776 -0.027 -2.082 2.43 -1.5335 2081 AE M 07_08 1.733 -0.027 -2.082 2.43 -1.5335 2081 AE M 01_02 1.775 -0.027 -2.082 2.43 -1.5335 2086 AE F 11_12 1.768 -0.457 -1.082 -1.76 6.9665 2086 AE F 09_10 1.769 -0.457 -1.082 -1.76 6.9665 2086 AE F 01_02 1.752 -0.457 -1.082 -1.76 6.9665 2086 AE F 03_04 1.769 -0.457 -1.082 -1.76 6.9665 2086 AE F 05_06 1.751 -0.457 -1.082 -1.76 6.9665 2086 AE F 07_08 1.728 -0.457 -1.082 -1.76 6.9665 2033 HC M 05_06 1.804 0.126 2.768 7.083 -2.2035 2033 HC M 07_08 1.784 0.126 2.768 7.083 -2.2035 2033 HC M 09_10 1.948 0.126 2.768 7.083 -2.2035 2033 HC M 03_04 1.821 0.126 2.768 7.083 -2.2035 2033 HC M 11_12 2.143 0.126 2.768 7.083 -2.2035 2033 HC M 01_02 1.824 0.126 2.768 7.083 -2.2035 2007 AE M 07_08 1.554 -0.027 0.488 -6.05 -0.5335 2007 AE M 05_06 1.643 -0.027 0.488 -6.05 -0.5335 2007 AE M 09_10 1.674 -0.027 0.488 -6.05 -0.5335 2007 AE M 03_04 1.593 -0.027 0.488 -6.05 -0.5335 2007 AE M 11_12 1.726 -0.027 0.488 -6.05 -0.5335 2007 AE M 01_02 1.517 -0.027 0.488 -6.05 -0.5335 6062 HC M 05_06 1.911 -0.014 -3.802 4.093 -3.5335 6062 HC M 07_08 1.887 -0.014 -3.802 4.093 -3.5335 6062 HC M 09_10 1.951 -0.014 -3.802 4.093 -3.5335 6062 HC M 03_04 1.798 -0.014 -3.802 4.093 -3.5335 6062 HC M 11_12 1.953 -0.014 -3.802 4.093 -3.5335 6062 HC M 01_02 1.772 -0.014 -3.802 4.093 -3.5335 2072 AE M 05_06 1.667 0.253 1.908 0.289999999999999 -1.0335 2072 AE M 07_08 1.587 0.253 1.908 0.289999999999999 -1.0335 2072 AE M 09_10 1.739 0.253 1.908 0.289999999999999 -1.0335 2072 AE M 03_04 1.638 0.253 1.908 0.289999999999999 -1.0335 2072 AE M 11_12 1.784 0.253 1.908 0.289999999999999 -1.0335 2072 AE M 01_02 1.662 0.253 1.908 0.289999999999999 -1.0335 2008 HC F 05_06 1.623 -0.014 -1.372 -2.317 2.1365 2008 HC F 07_08 1.6 -0.014 -1.372 -2.317 2.1365 2008 HC F 09_10 1.688 -0.014 -1.372 -2.317 2.1365 2008 HC F 03_04 1.624 -0.014 -1.372 -2.317 2.1365 2008 HC F 11_12 1.772 -0.014 -1.372 -2.317 2.1365 2008 HC F 01_02 1.656 -0.014 -1.372 -2.317 2.1365 2070 AE F 05_06 1.657 0.113 -1.372 -0.140000000000001 -5.5335 2070 AE F 07_08 1.579 0.113 -1.372 -0.140000000000001 -5.5335 2070 AE F 09_10 1.75 0.113 -1.372 -0.140000000000001 -5.5335 2070 AE F 03_04 1.808 0.113 -1.372 -0.140000000000001 -5.5335 2070 AE F 11_12 1.777 0.113 -1.372 -0.140000000000001 -5.5335 2070 AE F 01_02 1.702 0.113 -1.372 -0.140000000000001 -5.5335 2064 AE F 11_12 1.781 -0.027 -5.512 3.57 -3.5335 2064 AE F 09_10 1.724 -0.027 -5.512 3.57 -3.5335 2064 AE F 01_02 1.631 -0.027 -5.512 3.57 -3.5335 2064 AE F 03_04 1.607 -0.027 -5.512 3.57 -3.5335 2064 AE F 05_06 1.577 -0.027 -5.512 3.57 -3.5335 2064 AE F 07_08 1.546 -0.027 -5.512 3.57 -3.5335 2039 HC M 09_10 1.879 -0.014 2.628 -1.867 -5.5335 2039 HC M 11_12 1.918 -0.014 2.628 -1.867 -5.5335 2039 HC M 03_04 1.794 -0.014 2.628 -1.867 -5.5335 2039 HC M 05_06 1.787 -0.014 2.628 -1.867 -5.5335 2039 HC M 07_08 1.687 -0.014 2.628 -1.867 -5.5335 2039 HC M 01_02 1.774 -0.014 2.628 -1.867 -5.5335 2117 HC F 09_10 1.712 -0.014 0.917999999999999 1.293 3.7965 2117 HC F 11_12 1.75 -0.014 0.917999999999999 1.293 3.7965 2117 HC F 03_04 1.717 -0.014 0.917999999999999 1.293 3.7965 2117 HC F 07_08 1.587 -0.014 0.917999999999999 1.293 3.7965 2117 HC F 05_06 1.667 -0.014 0.917999999999999 1.293 3.7965 2117 HC F 01_02 1.663 -0.014 0.917999999999999 1.293 3.7965 " ) dat$ID <- as.factor(dat$ID) fm <- aov_car( Value ~ Propdd00 + Group + Gender + GAS0 + MAD0 + CPD0 + Error(ID / ROI), data = dat, factorize = FALSE, return = "Anova" ) fm0 <- aov_car( Value ~ MAD0 + CPD0 + Error(ID / ROI), data = dat, factorize = FALSE, return = 'afex_aov' ) expect_is(fm, "Anova.mlm") expect_is(fm0, "afex_aov") }) test_that("ANOVA: ids in multiple between.subjects conditions", { species <- c( "a", "b", "c", "c", "b", "c", "b", "b", "a", "b", "c", "c", "a", "a", "b", "b", "a", "a", "b", "c" ) habitat <- c( "x", "x", "x", "y", "y", "y", "x", "x", "y", "z", "y", "y", "z", "z", "x", "x", "y", "y", "z", "z" ) mvt.rate <- c(6, 5, 7, 8, 9, 4, 3, 5, 6, 9, 3, 6, 6, 7, 8, 9, 5, 6, 7, 8) ind <- as.factor(c( 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 )) data1 <- data.frame(species, habitat, mvt.rate, ind) # should give an error expect_error( aov_ez("ind", "mvt.rate", data1, within = "habitat", between = "species"), "Following ids are in more than one between subjects condition:" ) }) test_that("empty factors are not causing aov.cat to choke", { data(sleepstudy) #Example data in lme4 sleepstudy$Days <- factor(sleepstudy$Days) #Works with all factors expect_is( aov_ez( "Subject", "Reaction", sleepstudy, within = "Days", return = "Anova" ), "Anova.mlm" ) #If you remove a factor it fails... expect_is( aov_ez( "Subject", "Reaction", sleepstudy[sleepstudy$Days != 9, ], within = "Days", return = "Anova" ), "Anova.mlm" ) }) test_that("factors have more than one level", { data(obk.long) expect_error( aov_car( value ~ treatment + Error(id / phase), data = obk.long[obk.long$treatment == "control", ] ), "one level only." ) expect_error( aov_car( value ~ treatment + Error(id / phase), data = obk.long[obk.long$phase == "pre", ] ), "one level only." ) }) test_that("variable names longer", { data(obk.long) obk.long$gender2 <- obk.long$treatment orig <- aov_car( value ~ treatment * gender + age + Error(id / phase * hour), data = obk.long, factorize = FALSE, observed = "gender" ) v1 <- aov_car( value ~ gender2 * gender + age + Error(id / phase * hour), data = obk.long, factorize = FALSE, observed = "gender" ) v2 <- aov_car( value ~ gender2 * gender + age + Error(id / phase * hour), data = obk.long, factorize = FALSE, observed = "gender2" ) expect_equivalent(orig$anova_table, v1$anova_table) expect_identical(nice(orig)[, -1], nice(v1)[, -1]) expect_identical( nice(orig)[, c("df", "MSE", "F", "p.value")], nice(v2)[, c("df", "MSE", "F", "p.value")] ) expect_equivalent( orig$anova_table[, c("num Df", "den Df", "MSE", "F", "Pr(>F)")], v2$anova_table[c("num Df", "den Df", "MSE", "F", "Pr(>F)")] ) }) test_that("works with dplyr data.frames (see https://github.com/singmann/afex/issues/6):", { if (getRversion() >= "3.1.2") { skip_if_not_installed("dplyr") data(md_12.1) md2 <- dplyr::as_tibble(md_12.1) expect_is( aov_ez( "id", "rt", md2, within = c("angle", "noise"), anova_table = list(correction = "none", es = "none") ), "afex_aov" ) } }) test_that("return='nice' works", { data(md_12.1) expect_is( aov_ez("id", "rt", md_12.1, within = c("angle", "noise"), return = "nice"), "data.frame" ) }) test_that("aov_car works with column names containing spaces: https://github.com/singmann/afex/issues/22", { data <- list( "dependent" = rnorm(100), "RM Factor 1" = factor(rep(c("Level 1", "Level 2"), 50)), "subject" = factor(rep(1:50, each = 2)) ) attr(data, 'row.names') <- seq_len(length(data[[1]])) attr(data, 'class') <- 'data.frame' expect_is( aov_car(dependent ~ `RM Factor 1` + Error(subject / (`RM Factor 1`)), data), "afex_aov" ) expect_is( aov_4(dependent ~ `RM Factor 1` + (`RM Factor 1` | subject), data), "afex_aov" ) expect_is( aov_ez("subject", "dependent", data, within = "RM Factor 1"), "afex_aov" ) }) test_that("aov_car works with column names containing spaces for between factors", { data <- list( "dependent" = rnorm(100), "RM Factor 1" = factor(rep(c("Level 1", "Level 2"), 50)), "subject" = factor(rep(1:100)) ) attr(data, 'row.names') <- seq_len(length(data[[1]])) attr(data, 'class') <- 'data.frame' expect_is( aov_car(dependent ~ `RM Factor 1` + Error(subject), data), "afex_aov" ) expect_is(aov_4(dependent ~ `RM Factor 1` + (1 | subject), data), "afex_aov") expect_is( aov_ez("subject", "dependent", data, between = "RM Factor 1"), "afex_aov" ) }) test_that("aov_ez works with multiple covariates", { skip_if_not_installed("psychTools") require(psychTools) data(msq) msq2 <- msq[!is.na(msq$Extraversion), ] msq2 <- droplevels(msq2[msq2$ID != "18", ]) msq2$TOD <- msq2$TOD - mean(msq2$TOD) msq2$MSQ_Time <- msq2$MSQ_Time - mean(msq2$MSQ_Time) msq2$condition <- msq2$condition - mean(msq2$condition) # that is somewhat stupid mulcov <- aov_ez( data = msq2, dv = "Extraversion", id = "ID", between = "condition", covariate = c("TOD", "MSQ_Time"), factorize = FALSE, fun_aggregate = mean ) expect_is(mulcov, "afex_aov") }) test_that("aov_car works with p.val adjustment == NA for HF as well as GG", { # see: https://github.com/singmann/afex/issues/36 skip_on_cran() ## takes rather long load("anova_hf_error.rda") #load("tests/testthat/anova_hf_error.rda") expect_is( nice(aov_ez("Snum", "RT", demo, within = c("DistF", "WidthF", "AngleF"))), "nice_table" ) expect_is( nice(aov_ez( "Snum", "RT", demo, within = c("DistF", "WidthF", "AngleF"), anova_table = list(correction = "GG") )), "nice_table" ) expect_is( nice(aov_ez( "Snum", "RT", demo, within = c("DistF", "WidthF", "AngleF"), anova_table = list(correction = "HF") )), "nice_table" ) }) test_that("aov_car: character variables and factorize = FALSE", { data(obk.long) obk2 <- obk.long obk2$treatment <- as.character(obk2$treatment) a1 <- aov_car( value ~ treatment * gender + Error(id), data = obk.long, fun_aggregate = mean ) a2 <- aov_car( value ~ treatment * gender + Error(id), data = obk2, fun_aggregate = mean ) a3 <- aov_car( value ~ treatment * gender + Error(id), data = obk2, fun_aggregate = mean, factorize = FALSE ) expect_equal(a1$anova_table, a2$anova_table) expect_equal(a1$anova_table, a3$anova_table) }) test_that("additive design works without interaction and corresponding data", { dat <- read.csv("skf_issue.csv") dat[["ID"]] <- factor(1:nrow(dat)) aov1 <- aov_car( formula = Y ~ A + B + C + D + E + F + G + Error(ID), data = dat, type = "3" ) expect_is(aov1, "afex_aov") datFac <- dat for (i in 1:7) { datFac[[LETTERS[i]]] <- factor(ifelse(dat[[LETTERS[i]]] == -1, "a", "b")) } aov2 <- aov_car( formula = Y ~ A + B + C + D + E + F + G + Error(ID), data = datFac, type = "3" ) expect_is(aov2, "afex_aov") })