On 10 February 2019 at 08:20, Dirk Eddelbuettel wrote: | | On 10 February 2019 at 13:35, Paul Gevers wrote: | | Source: lme4, r-cran-lmertest | | Control: found -1 lme4/1.1-20-1 | | Control: found -1 r-cran-lmertest/3.0-1-2 | | Severity: important | | X-Debbugs-CC: [email protected] | | User: [email protected] | | Usertags: breaks needs-update | | | | Dear maintainers, | | | | With a recent upload of lme4 the autopkgtest of r-cran-lmertest fails in | | testing when that autopkgtest is run with the binary packages of lme4 | | from unstable. It passes when run with only packages from testing. In | | tabular form: | | pass fail | | lme4 from testing 1.1-20-1 | | r-cran-lmertest from testing 3.0-1-2 | | all others from testing from testing | | | | I copied some of the output at the bottom of this report. | | | | Currently this regression is blocking the migration of lme4 to testing | | [1]. Due to the nature of this issue, I filed this bug report against | | both packages. Can you please investigate the situation and reassign the | | bug to the right package? If needed, please change the bug's severity. | | Sorry I don't really have the time for this. I maintain r-cran-lme4; it | passes. The relevant page for me is | | https://cloud.r-project.org/web/checks/check_results_lme4.html | | which shows that lme4 builds and passes its checks where it matters (we can | disregard Solaris and old-Windows here). | | The package has MANY reverse dependencies but I am responsible for | those. Talk to _their_ maintainers. Thanks for your understandind.
A casual glance at this reveals that one of the two packages you mention (r-cran-mlmrev) is not current as it was updated two days ago: https://cloud.r-project.org/web/packages/mlmRev/index.html The other fails ALL its tests at CRAN and needs an upstream fix: https://cloud.r-project.org/web/checks/check_results_lmerTest.html So as I suggested earlier: please reassign to the dependee packages. Dirk | Dirk | | | More information about this bug and the reason for filing it can be found on | | https://wiki.debian.org/ContinuousIntegration/RegressionEmailInformation | | | | Paul | | | | [1] https://qa.debian.org/excuses.php?package=lme4 | | | | https://ci.debian.net/data/autopkgtest/testing/amd64/r/r-cran-lmertest/1896879/log.gz | | | | autopkgtest [04:42:34]: test run-unit-test: [----------------------- | | BEGIN TEST test_a_utils.R | | | | R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" | | Copyright (C) 2018 The R Foundation for Statistical Computing | | Platform: x86_64-pc-linux-gnu (64-bit) | | | | R is free software and comes with ABSOLUTELY NO WARRANTY. | | You are welcome to redistribute it under certain conditions. | | Type 'license()' or 'licence()' for distribution details. | | | | R is a collaborative project with many contributors. | | Type 'contributors()' for more information and | | 'citation()' on how to cite R or R packages in publications. | | | | Type 'demo()' for some demos, 'help()' for on-line help, or | | 'help.start()' for an HTML browser interface to help. | | Type 'q()' to quit R. | | | | > # test_a_utils.R | | > | | > library(lmerTest) | | Loading required package: lme4 | | Loading required package: Matrix | | | | Attaching package: 'lmerTest' | | | | The following object is masked from 'package:lme4': | | | | lmer | | | | The following object is masked from 'package:stats': | | | | step | | | | > | | > # test safeDeparse() - equivalence and differences to deparse(): | | > deparse_args <- formals(deparse) | | > safeDeparse_args <- formals(lmerTest:::safeDeparse) | | > stopifnot( | | + all.equal(names(deparse_args), names(safeDeparse_args)), | | + all.equal(deparse_args[!names(deparse_args) %in% c("control", | | "width.cutoff")], | | + safeDeparse_args[!names(safeDeparse_args) %in% | | c("control", "width.cutoff")]), | | + all.equal(deparse_args[["width.cutoff"]], 60L), | | + all(eval(safeDeparse_args[["control"]]) %in% | | eval(deparse_args[["control"]])), | | + all.equal(safeDeparse_args[["width.cutoff"]], 500L) | | + ) | | > | | > | | BEGIN TEST test_anova.R | | | | R version 3.5.2 (2018-12-20) -- "Eggshell Igloo" | | Copyright (C) 2018 The R Foundation for Statistical Computing | | Platform: x86_64-pc-linux-gnu (64-bit) | | | | R is free software and comes with ABSOLUTELY NO WARRANTY. | | You are welcome to redistribute it under certain conditions. | | Type 'license()' or 'licence()' for distribution details. | | | | R is a collaborative project with many contributors. | | Type 'contributors()' for more information and | | 'citation()' on how to cite R or R packages in publications. | | | | Type 'demo()' for some demos, 'help()' for on-line help, or | | 'help.start()' for an HTML browser interface to help. | | Type 'q()' to quit R. | | | | > # test_anova.R | | > library(lmerTest) | | Loading required package: lme4 | | Loading required package: Matrix | | | | Attaching package: 'lmerTest' | | | | The following object is masked from 'package:lme4': | | | | lmer | | | | The following object is masked from 'package:stats': | | | | step | | | | > | | > # WRE says "using if(requireNamespace("pkgname")) is preferred, if | | possible." | | > # even in tests: | | > assertError <- function(expr, ...) | | + if(requireNamespace("tools")) tools::assertError(expr, ...) else | | invisible() | | > assertWarning <- function(expr, ...) | | + if(requireNamespace("tools")) tools::assertWarning(expr, ...) else | | invisible() | | > | | > # Kenward-Roger only available with pbkrtest and only then validated | | in R >= 3.3.3 | | > # (faulty results for R < 3.3.3 may be due to unstated dependencies in | | pbkrtest) | | > has_pbkrtest <- requireNamespace("pbkrtest", quietly = TRUE) && | | getRversion() >= "3.3.3" | | > | | > data("sleepstudy", package="lme4") | | > TOL <- 1e-4 | | > | | > #################################### | | > ## Basic anova tests | | > #################################### | | > | | > m <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy) | | > | | > ####### ddf argument: | | > (an1 <- anova(m)) # Also testing print method. | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, ddf="Satterthwaite")) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2b <- anova(m, ddf="Satterthwaite", type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2c <- anova(m, ddf="Satterthwaite", type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an2, tolerance=TOL) | | + )) | | > (an3 <- anova(m, ddf="Sat")) ## Abbreviated argument | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an3, tolerance=TOL) | | + )) | | > if(has_pbkrtest) { | | + (anova(m, ddf="Kenward-Roger")) | | + (anova(m, ddf="Kenward-Roger", type=3)) | | + } | | Type III Analysis of Variance Table with Kenward-Roger's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 17 45.843 3.268e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an1 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | Days 1 30024 30024 45.843 | | > (an2 <- anova(m, ddf="lme4", type=3)) # 'type' is ignored with ddf="lme4" | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | Days 1 30024 30024 45.843 | | > stopifnot(isTRUE( | | + all.equal(an1, an2, tolerance=TOL) | | + )) | | > res <- assertError(anova(m, ddf="KR")) ## Error on incorrect arg. | | > stopifnot( | | + grepl("'arg' should be one of ", unlist(res[[1]])$message) | | + ) | | > | | > ## lme4 method: | | > an1 <- anova(m, ddf="lme4") | | > an2 <- anova(as(m, "lmerMod")) | | > stopifnot(isTRUE( | | + all.equal(an1, an2, tolerance=TOL) | | + )) | | > | | > ###### type argument: | | > (an1 <- anova(m, type="1")) # valid type arg. | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type="I")) # same | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an2, tolerance=TOL) | | + )) | | > (an3 <- anova(m, type=1)) # Not strictly valid, but accepted | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an3, tolerance=TOL) | | + )) | | > | | > (an1 <- anova(m, type="2")) # valid type arg. | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type="II")) # same | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an2, tolerance=TOL) | | + )) | | > (an3 <- anova(m, type=3)) # Not strictly valid, but accepted | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an3, check.attributes=FALSE, tolerance=TOL) | | + )) | | > | | > (an1 <- anova(m, type="3")) # valid type arg. | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type="III")) # same | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an2, tolerance=TOL) | | + )) | | > (an3 <- anova(m, type=3)) # Not strictly valid, but accepted | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 30024 30024 1 16.995 45.843 3.273e-06 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot(isTRUE( | | + all.equal(an1, an3, tolerance=TOL) | | + )) | | > assertError(anova(m, type=0)) # Not valid arg. | | > assertError(anova(m, type="i")) # Not valid arg. | | > | | > ####### Model comparison: | | > fm <- lm(Reaction ~ Days, sleepstudy) | | > (an <- anova(m, fm)) | | refitting model(s) with ML (instead of REML) | | Data: sleepstudy | | Models: | | fm: Reaction ~ Days | | m: Reaction ~ Days + (Days | Subject) | | Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq) | | fm 3 1906.3 1915.9 -950.15 1900.3 | | m 6 1763.9 1783.1 -875.97 1751.9 148.35 3 < 2.2e-16 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot( | | + nrow(an) == 2L, | | + rownames(an)[2] == "m" | | + ) | | > | | > m2 <- lmer(Reaction ~ Days + I(Days^2) + (Days | Subject), sleepstudy) | | > (an <- anova(m, m2, refit=FALSE)) | | Data: sleepstudy | | Models: | | m: Reaction ~ Days + (Days | Subject) | | m2: Reaction ~ Days + I(Days^2) + (Days | Subject) | | Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq) | | m 6 1755.6 1774.8 -871.81 1743.6 | | m2 7 1756.8 1779.2 -871.41 1742.8 0.8127 1 0.3673 | | > stopifnot( | | + nrow(an) == 2L, | | + rownames(an)[1] == "m" | | + ) | | > | | > | | > #################################### | | > ## Example with factor fixef: | | > #################################### | | > | | > ## 'temp' is continuous, 'temperature' an ordered factor with 6 levels | | > data("cake", package="lme4") | | > m <- lmer(angle ~ recipe * temp + (1|recipe:replicate), cake) | | > (an <- anova(m)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 4.00 2.00 2 254.02 0.0957 0.9088 | | temp 1966.71 1966.71 1 222.00 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222.00 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_lme4 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | recipe 2 10.39 5.20 0.2488 | | temp 1 1966.71 1966.71 94.1632 | | recipe:temp 2 1.74 0.87 0.0417 | | > | | > if(has_pbkrtest) { | | + (an_KR <- anova(m, ddf="Kenward-Roger")) | | + # res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + # an_lme4[, c("Sum Sq", "Mean Sq", "F value")]) | | + # stopifnot(isTRUE(res)) | | + res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_KR[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | + stopifnot(isTRUE(res)) | | + } | | > stopifnot(all.equal(c(2, 1, 2), an$NumDF, tol=1e-6), | | + all.equal(c(254.0157612, 222, 222), an$DenDF, tol=TOL)) | | > | | > an3 <- anova(m, type=3) | | > an2 <- anova(m, type=2) | | > an1 <- anova(m, type=1) | | > | | > ## Data is balanced, so Type II and III should be identical: | | > ## One variable is continuous, so Type I and II/III are different: | | > stopifnot( | | + isTRUE(all.equal(an3, an2, check.attributes=FALSE, tolerance=TOL)), | | + !isTRUE(all.equal(an1, an2, check.attributes=FALSE, tolerance=1e-8)) | | + ) | | > | | > # Using an ordered factor: | | > m <- lmer(angle ~ recipe * temperature + (1|recipe:replicate), cake) | | > (an1 <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > # Type 3 is also available with ordered factors: | | > (an3 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > ## Balanced data and only factors: Type I, II and III should be the same: | | > stopifnot( | | + isTRUE(all.equal(an1, an2, check.attributes=FALSE, tolerance=TOL)), | | + isTRUE(all.equal(an1, an3, check.attributes=FALSE, tolerance=TOL)) | | + ) | | > | | > (an <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_lme4 <- anova(m, type=1, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | recipe 2 10.19 5.09 0.2488 | | temperature 5 2100.30 420.06 20.5199 | | recipe:temperature 10 205.98 20.60 1.0062 | | > res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_lme4[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | > stopifnot(isTRUE(res)) | | > if(has_pbkrtest) { | | + (an_KR <- anova(m, type=1, ddf="Kenward-Roger")) | | + res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_KR[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | + stopifnot(isTRUE(res)) | | + } | | > stopifnot(all.equal(c(2, 5, 10), an$NumDF, tolerance=TOL), | | + all.equal(c(42, 210, 210), an$DenDF, tolerance=TOL)) | | > | | > ######## | | > ## Make case with balanced unordered factors: | | > cake2 <- cake | | > cake2$temperature <- factor(cake2$temperature, ordered = FALSE) | | > # str(cake2) | | > stopifnot( | | + !is.ordered(cake2$temperature) | | + ) | | > m <- lmer(angle ~ recipe * temperature + (1|recipe:replicate), cake2) | | > (an1 <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an3 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.19 5.09 2 42 0.2488 0.7809 | | temperature 2100.30 420.06 5 210 20.5199 <2e-16 *** | | recipe:temperature 205.98 20.60 10 210 1.0062 0.4393 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > ## Balanced data and only factors: Type I, II, and III should be the same: | | > stopifnot( | | + isTRUE(all.equal(an1, an2, check.attributes=FALSE, tolerance=TOL)), | | + isTRUE(all.equal(an3, an2, check.attributes=FALSE, tolerance=TOL)) | | + ) | | > ######## | | > | | > # No intercept: | | > m <- lmer(angle ~ 0 + recipe * temp + (1|recipe:replicate), cake) | | > (an <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 21442.9 7147.6 3 42 342.2200 <2e-16 *** | | temp 1966.7 1966.7 1 222 94.1632 <2e-16 *** | | recipe:temp 1.7 0.9 2 222 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 4.48 1.49 3 254.02 0.0714 0.9752 | | temp 1966.71 1966.71 1 222.00 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222.00 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 4.48 1.49 3 254.02 0.0714 0.9752 | | temp 1966.71 1966.71 1 222.00 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222.00 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > if(has_pbkrtest) | | + (an_KR <- anova(m, ddf="Kenward-Roger")) | | Type III Analysis of Variance Table with Kenward-Roger's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 4.48 1.49 3 254.02 0.0714 0.9752 | | temp 1966.71 1966.71 1 222.00 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222.00 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_lme4 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | recipe 3 21442.9 7147.6 342.2200 | | temp 1 1966.7 1966.7 94.1632 | | recipe:temp 2 1.7 0.9 0.0417 | | > res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_lme4[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | > stopifnot(isTRUE(res)) | | > | | > # ML-fit: | | > m <- lmer(angle ~ recipe * temp + (1|recipe:replicate), cake, REML=FALSE) | | > (an <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.99 5.49 2 45 0.2666 0.7672 | | temp 1966.71 1966.71 1 225 95.4357 <2e-16 *** | | recipe:temp 1.74 0.87 2 225 0.0423 0.9586 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > if(has_pbkrtest) | | + assertError(an <- anova(m, ddf="Kenward-Roger")) # KR fits should be | | REML | | > (an_lme4 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | recipe 2 10.99 5.49 0.2666 | | temp 1 1966.71 1966.71 95.4357 | | recipe:temp 2 1.74 0.87 0.0423 | | > res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_lme4[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | > stopifnot(isTRUE(res)) | | > | | > #################################### | | > ## Using contr.sum: | | > #################################### | | > | | > m <- lmer(angle ~ recipe * temp + (1|recipe:replicate), cake, | | + contrasts = list('recipe' = "contr.sum")) | | > (an <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.39 5.20 2 42 0.2488 0.7809 | | temp 1966.71 1966.71 1 222 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 4.00 2.00 2 254.02 0.0957 0.9088 | | temp 1966.71 1966.71 1 222.00 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222.00 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an3 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 4.00 2.00 2 254.02 0.0957 0.9088 | | temp 1966.71 1966.71 1 222.00 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222.00 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > stopifnot( | | + isTRUE(all.equal(an2, an3, check.attributes=FALSE, tolerance=TOL)) | | + ) | | > if(has_pbkrtest) | | + (an_KR <- anova(m, type=1, ddf="Kenward-Roger")) | | Type I Analysis of Variance Table with Kenward-Roger's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | recipe 10.39 5.20 2 42 0.2488 0.7809 | | temp 1966.71 1966.71 1 222 94.1632 <2e-16 *** | | recipe:temp 1.74 0.87 2 222 0.0417 0.9592 | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_lme4 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | recipe 2 10.39 5.20 0.2488 | | temp 1 1966.71 1966.71 94.1632 | | recipe:temp 2 1.74 0.87 0.0417 | | > res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_lme4[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | > stopifnot(isTRUE(res)) | | > | | > | | > #################################### | | > ## Example with continuous fixef: | | > #################################### | | > | | > # Example with no fixef: | | > m <- lmer(Reaction ~ -1 + (Days | Subject), sleepstudy) | | > # m <- lmer(Reaction ~ 0 + (Days | Subject), sleepstudy) # alternative | | > stopifnot(length(fixef(m)) == 0L) | | > (an <- anova(m, type=1)) | | Type I Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | > (an_2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | > (an_3 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | > stopifnot(nrow(an) == 0L, | | + nrow(an_2) == 0L, | | + nrow(an_3) == 0L) | | > # anova(m, ddf="lme4") # Bug in lme4 it seems | | > if(has_pbkrtest) { | | + (an_KR <- anova(m, ddf="Kenward-Roger")) | | + stopifnot( | | + nrow(an_KR) == 0L | | + ) | | + } | | > | | > # Example with intercept only: | | > m <- lmer(Reaction ~ (Days | Subject), sleepstudy) | | > # m <- lmer(Reaction ~ 1 + (Days | Subject), sleepstudy) # alternative | | > stopifnot(length(fixef(m)) == 1L, | | + names(fixef(m)) == "(Intercept)") | | > (an <- anova(m)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | > (an_2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | > (an_3 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | > (an_lme4 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | > stopifnot(nrow(an) == 0L, | | + nrow(an_2) == 0L, | | + nrow(an_3) == 0L, | | + nrow(an_lme4) == 0L) | | > if(has_pbkrtest) { | | + (an_KR <- anova(m, ddf="Kenward-Roger")) | | + stopifnot( | | + nrow(an_KR) == 0L | | + ) | | + } | | > | | > # Example with 1 fixef without intercept: | | > m <- lmer(Reaction ~ Days - 1 + (Days | Subject), sleepstudy) | | Warning message: | | In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : | | Model failed to converge with max|grad| = 0.00416642 (tol = 0.002, | | component 1) | | > # m <- lmer(Reaction ~ 0 + Days + (Days | Subject), sleepstudy) # | | alternative | | > stopifnot(length(fixef(m)) == 1L, | | + names(fixef(m)) == "Days") | | > (an <- anova(m)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 93779 93779 1 16.995 143.19 1.054e-09 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_2 <- anova(m, type=2)) | | Type II Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 93779 93779 1 16.995 143.19 1.054e-09 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_3 <- anova(m, type=3)) | | Type III Analysis of Variance Table with Satterthwaite's method | | Sum Sq Mean Sq NumDF DenDF F value Pr(>F) | | Days 93779 93779 1 16.995 143.19 1.054e-09 *** | | --- | | Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 | | > (an_lme4 <- anova(m, ddf="lme4")) | | Analysis of Variance Table | | Df Sum Sq Mean Sq F value | | Days 1 93779 93779 143.19 | | > stopifnot(nrow(an) == 1L, | | + nrow(an_2) == 1L, | | + nrow(an_3) == 1L, | | + nrow(an_lme4) == 1L) | | > if(has_pbkrtest) { | | + (an_KR <- anova(m, ddf="Kenward-Roger")) | | + stopifnot( | | + nrow(an_KR) == 1L | | + ) | | + } | | > | | > res <- all.equal(an[, c("Sum Sq", "Mean Sq", "F value")], | | + an_lme4[, c("Sum Sq", "Mean Sq", "F value")], | | tolerance=TOL) | | > stopifnot(isTRUE(res)) | | > stopifnot(isTRUE(all.equal( | | + c(1, 17), unname(unlist(an[, c("NumDF", "DenDF")])), tolerance=TOL | | + ))) | | Error: isTRUE(all.equal(c(1, 17), unname(unlist(an[, c("NumDF", | | "DenDF")])), .... is not TRUE | | Execution halted | | autopkgtest [04:42:39]: test run-unit-test: -----------------------] | | | | x[DELETED ATTACHMENT signature.asc, application/pgp-signature] | | -- | http://dirk.eddelbuettel.com | @eddelbuettel | [email protected] -- http://dirk.eddelbuettel.com | @eddelbuettel | [email protected]

