Running 'test_a_utils.R' [2s]
  Running 'test_anova.R' [10s]
Running the tests in 'tests/test_anova.R' failed.
Complete output:
  > # 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