library(glmmTMB) if (requireNamespace("pbkrtest") && requireNamespace("lme4")) { fm1_lmer <- lme4::lmer(formula(fm1), lme4::sleepstudy) fm2_lmer <- lme4::lmer(formula(fm2), lme4::sleepstudy) fm1 <- update(fm1, REML = TRUE) fm2 <- update(fm2, REML = TRUE) pbkrtest_dof <- function(m) { vva <- pbkrtest::vcovAdj(m) vv0 <- vcov(m) p <- length(fixef(m)) Lmat <- diag(p) ddf <- apply(Lmat, 1, \(L) pbkrtest::ddf_Lb(vva, L, vv0)) return(ddf) } test_that("approx KR df match with pbkrtest (fm1)", { df1 <- pbkrtest_dof(fm1_lmer) df2 <- dof_KR(fm1) expect_equal(df1, unname(c(df2)), tolerance = 1e-6) }) test_that("approx KR df match with pbkrtest (fm2)", { df1 <- pbkrtest_dof(fm2_lmer) df2 <- dof_KR(fm2) expect_equal(df1, unname(c(df2)), tolerance = 1e-6) }) test_that("KR in summary", { expect_identical( coef(summary(fm1, ddf = "kenward-roger"))$cond[,"ddf"], c(dof_KR(fm1)) ) }) } test_that("Satt in summary", { expect_identical( unname(coef(summary(fm1, ddf = "satterthwaite"))$cond[,"ddf"]), c(dof_satt(fm1)) ) }) ## add lmerTest comparisons? ## emmeans