[R-pkg-team] Bug#921938: lme4 breaks r-cran-lmertest autopkgtest
Dirk Eddelbuettel
edd at debian.org
Sun Feb 10 14:20:08 GMT 2019
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: debian-ci at lists.debian.org
| User: debian-ci at lists.debian.org
| 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.
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 | edd at debian.org
More information about the R-pkg-team
mailing list