tests/testthat/test-diagnostics.R

test_that("merMod residual diagnostics fail for GLMMs", {
  skip_on_cran()

  data(cbpp, package = "lme4")

  gm1 <- lme4::glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
                     data = cbpp, family = binomial,
                     nAGQ = 0)

  expect_error(residualDiagnostics(gm1))
})

test_that("merMod residual diagnostics work for LMMs", {
  skip_on_cran()

  m <- lme4::lmer(extra ~ group + (1 | ID), data = sleep)
  mrd <- residualDiagnostics(m)

  expect_is(mrd, c("residualDiagnostics.merMod", "residualDiagnostics"))
  expect_is(JWileymisc::as.residualDiagnostics(mrd),
            c("residualDiagnostics.merMod", "residualDiagnostics"))

  expect_equivalent(nrow(sleep), nrow(mrd$Residuals))
  expect_equivalent(
    mean(mrd$Residuals$Residuals, na.rm = TRUE),
    0,
    tolerance = .05)
})

test_that("merMod residual diagnostics work with missing data", {
  skip_on_cran()

  sleep[1,1] <- NA
  m <- lme4::lmer(extra ~ group + (1 | ID), data = sleep,
                  na.action = na.omit)
  mrd <- residualDiagnostics(m)

  expect_is(mrd, c("residualDiagnostics.merMod", "residualDiagnostics"))
  expect_is(JWileymisc::as.residualDiagnostics(mrd),
            c("residualDiagnostics.merMod", "residualDiagnostics"))

  expect_true(nrow(mrd$Residuals) < nrow(sleep))
  expect_equivalent(
    mean(mrd$Residuals$Residuals, na.rm = TRUE),
    0,
    tolerance = .05)
})

test_that("merMod residual diagnostics work for LMMs with on the fly functions", {
  skip_on_cran()

  data(aces_daily, package = "JWileymisc")
  aces_daily <- subset(aces_daily, !is.na(STRESS))
  m <- lme4::lmer(PosAff ~ poly(STRESS, 3) + (1 | UserID),
                  data = aces_daily)
  expect_warning(mrd <- residualDiagnostics(m))

  expect_is(mrd, c("residualDiagnostics.merMod", "residualDiagnostics"))
  expect_is(JWileymisc::as.residualDiagnostics(mrd),
            c("residualDiagnostics.merMod", "residualDiagnostics"))

  expect_true(nrow(mrd$Residuals) <= nrow(aces_daily))

  expect_equivalent(
    mean(mrd$Residuals$Residuals, na.rm = TRUE),
    0,
    tolerance = .05)
})



test_that("merMod model diagnostics fail for GLMMs", {
  skip_on_cran()

  data(cbpp, package = "lme4")

  gm1 <- lme4::glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
                     data = cbpp, family = binomial,
                     nAGQ = 0)

  expect_error(modelDiagnostics(gm1))
})

test_that("merMod model diagnostics work for LMMs, ev.perc = 0", {
  skip_on_cran()

  m <- lme4::lmer(extra ~ group + (1 | ID), data = sleep)
  md <- modelDiagnostics(m, ev.perc = 0)

  expect_is(md, c("modelDiagnostics.merMod", "modelDiagnostics"))
  expect_is(JWileymisc::as.modelDiagnostics(md),
            c("modelDiagnostics.merMod", "modelDiagnostics"))

  expect_length(md$modelDiagnostics, 1)

  expect_equivalent(nrow(md$extremeValues), 0)
})

test_that("merMod model diagnostics work for LMMs, ev.perc = .5", {
  skip_on_cran()

  m <- lme4::lmer(extra ~ group + (1 | ID), data = sleep)
  md <- modelDiagnostics(m, ev.perc = .5)

  expect_is(md, c("modelDiagnostics.merMod", "modelDiagnostics"))
  expect_is(JWileymisc::as.modelDiagnostics(md),
            c("modelDiagnostics.merMod", "modelDiagnostics"))

  expect_length(md$modelDiagnostics, 1)

  expect_true(nrow(md$extremeValues) > 0)
})

test_that("merMod model diagnostics work with missing data", {
  skip_on_cran()

  sleep[1,1] <- NA
  m <- lme4::lmer(extra ~ group + (1 | ID), data = sleep,
                  na.action = na.omit)
  md <- modelDiagnostics(m)

  expect_is(md, c("modelDiagnostics.merMod", "modelDiagnostics"))
  expect_is(JWileymisc::as.modelDiagnostics(md),
            c("modelDiagnostics.merMod", "modelDiagnostics"))

  expect_length(md$modelDiagnostics, 1)
})

test_that("merMod model diagnostics work for LMMs with on the fly functions and multiple random effects", {
  skip_on_cran()

  data(aces_daily, package = "JWileymisc")
  aces_daily <- subset(aces_daily, !is.na(STRESS))

  strictControl <- lme4::lmerControl(optCtrl = list(
                                       algorithm = "NLOPT_LN_NELDERMEAD",
                                       xtol_abs = 1e-10,
                                       ftol_abs = 1e-10))


  m <- lme4::lmer(PosAff ~ poly(STRESS, 2) + (1 + poly(STRESS, 2) | UserID),
                  data = aces_daily, control = strictControl)

  expect_warning(md <- modelDiagnostics(m, ev.perc = .1))

  expect_is(md, c("modelDiagnostics.merMod", "modelDiagnostics"))
  expect_is(JWileymisc::as.modelDiagnostics(md),
            c("modelDiagnostics.merMod", "modelDiagnostics"))

  expect_length(md$modelDiagnostics, 4)
})

Try the multilevelTools package in your browser

Any scripts or data that you put into this service are public.

multilevelTools documentation built on March 13, 2020, 2:07 a.m.