Nothing
context("effect_plot")
library(vdiffr)
library(ggplot2)
states <- as.data.frame(state.x77)
states$HSGrad <- states$`HS Grad`
states$o70 <- 0
states$o70[states$`Life Exp` > 70] <- 1
states$o70n <- states$o70
states$o70 <- factor(states$o70)
states$o70l <- states$`Life Exp` > 70
states$o70c <- ifelse(states$o70l, yes = "yes", no = "no")
set.seed(3)
states$wts <- runif(50, 0, 3)
fit <- lm(Income ~ HSGrad*Murder*Illiteracy + o70 + Area, data = states)
fit2 <- lm(Income ~ HSGrad*o70, data = states)
fit2n <- lm(Income ~ HSGrad*o70n, data = states)
fitw <- lm(Income ~ HSGrad*Murder*Illiteracy + o70 + Area, data = states,
weights = wts)
fitl <- lm(Income ~ HSGrad*o70l, data = states)
fitc <- lm(Income ~ HSGrad*Murder + o70c, data = states)
test_that("effect_plot works for lm", {
p <- effect_plot(model = fit, pred = Murder,centered = "all") +
ggtitle("All centered")
expect_doppelganger("lm-all-centered", p)
p <- effect_plot(model = fit, pred = Murder,centered = "all") +
ggtitle("All centered APA") + theme_apa()
expect_doppelganger("lm-all-centered-apa", p)
p <- effect_plot(model = fit,pred = Murder, centered = "HSGrad") +
ggtitle("HSGrad centered")
expect_doppelganger("lm-one-centered", p)
})
test_that("effect_plot: robust intervals works", {
p <- effect_plot(model = fit, pred = Murder, centered = "HSGrad",
robust = TRUE) +
ggtitle("Robust intervals")
expect_doppelganger("lm-robust", p)
})
test_that("effect_plot: rug plots work", {
p <- effect_plot(model = fit, pred = Murder, centered = "HSGrad", rug = TRUE) +
ggtitle("Rug default")
expect_doppelganger("lm-rug", p)
p <- effect_plot(model = fit, pred = Murder, centered = "HSGrad", rug = TRUE,
rug.sides = "lb") + ggtitle("Rug sides 'lb'")
expect_doppelganger("lm-rug-sides-lb", p)
})
test_that("effect_plot: plot.points works", {
p <- effect_plot(model = fit, pred = Murder, centered = "HSGrad",
plot.points = TRUE) +
ggtitle("Plot points HSGrad centered")
expect_doppelganger("lm-points-one-centered", p)
p <- effect_plot(model = fit, pred = Murder, centered = "all",
plot.points = TRUE) +
ggtitle("Plot points all centered")
expect_doppelganger("lm-points-all-centered", p)
})
test_that("effect_plot: partial residuals work", {
p <- effect_plot(model = fit, pred = Murder, centered = "HSGrad",
partial.residuals = TRUE) +
ggtitle("Partial residuals HSGrad centered")
expect_doppelganger("lm-partials-one-centered", p)
p <- effect_plot(model = fit, pred = Murder, centered = "all",
partial.residuals = TRUE) +
ggtitle("Partial residuals all centered")
expect_doppelganger("lm-partials-all-centered", p)
})
test_that("effect_plot works for weighted lm", {
p <- effect_plot(model = fitw, pred = Murder, centered = "all") +
ggtitle("Weighted lm")
expect_doppelganger("wlm-all-centered", p)
p <- effect_plot(model = fitw, pred = Murder, centered = "HSGrad") +
ggtitle("Weighted lm HSGrad centered")
expect_doppelganger("wlm-one-centered", p)
p <- effect_plot(model = fitw, pred = Murder, centered = "HSGrad",
robust = TRUE, interval = TRUE) +
ggtitle("Weighted lm HSGrad centered and robust intervals")
expect_doppelganger("wlm-one-centered-robust", p)
p <- effect_plot(model = fitw, pred = Murder, centered = "HSGrad",
robust = TRUE, interval = TRUE, plot.points = TRUE) +
ggtitle("Weighted lm HSGrad centered, robust, plot points")
expect_doppelganger("wlm-one-centered-robust-points", p)
p <- effect_plot(model = fitw, pred = Murder, centered = "HSGrad",
robust = TRUE, interval = TRUE, partial.residuals = TRUE) +
ggtitle("Weighted lm HSGrad centered, robust, partial residuals")
expect_doppelganger("wlm-one-centered-robust-partials", p)
})
if (requireNamespace("survey")) {
context("effect_plot survey")
library(survey, quietly = TRUE)
data(api)
dstrat <- svydesign(id = ~1, strata = ~stype, weights = ~pw,
data = apistrat, fpc = ~fpc)
regmodel <- svyglm(api00 ~ ell * meals * both + sch.wide, design = dstrat)
svyqb <- svyglm(sch.wide~ell+meals+mobility, design=dstrat,
family=quasibinomial)
test_that("effect_plot works for svyglm", {
p <- effect_plot(regmodel, pred = meals, centered = "all") +
ggtitle("svyglm")
expect_doppelganger("svyglm", p)
p <- effect_plot(regmodel, pred = meals, centered = "ell") +
ggtitle("svyglm ell centered")
expect_doppelganger("svyglm-one-centered", p)
p <- effect_plot(regmodel, pred = meals, centered = "all",
plot.points = TRUE) +
ggtitle("svyglm plot points")
expect_doppelganger("svyglm-all-centered-points", p)
p <- effect_plot(regmodel, pred = meals, centered = "all",
partial.residuals = TRUE) +
ggtitle("svyglm partial residuals")
expect_doppelganger("svyglm-all-centered-partials", p)
p <- effect_plot(svyqb, pred = mobility, centered = "all") +
ggtitle("svyglm binomial")
expect_doppelganger("svyglm-binomial", p)
})
}
if (requireNamespace("lme4")) {
context("effect_plot lme4")
library(lme4, quietly = TRUE)
data(VerbAgg)
va <- VerbAgg[sample(seq_len(nrow(VerbAgg)), 500),]
fmVA0 <- glmer(r2 ~ Anger + Gender + btype + situ + (1|id) + (1|item),
family = binomial, data = va, nAGQ=0L)
lmVA0 <- lmer(as.numeric(r2 == "Y") ~ Anger + Gender + btype + situ + (1|id) + (1|item),
data = va)
gm <- glmer(incidence ~ as.numeric(period) + (1 | herd), family = poisson,
data = cbpp, offset = log(size))
test_that("effect_plot works for lme4", {
p <- effect_plot(lmVA0, pred = Anger, data = va) +
ggtitle("lmer test")
expect_doppelganger("lmer", p)
p <- effect_plot(lmVA0, pred = Anger, plot.points = T, data = va) +
ggtitle("lmer test + plot points")
expect_doppelganger("lmer-points", p)
p <- effect_plot(lmVA0, pred = Anger, partial.residuals = T,
data = va) +
ggtitle("lmer test + partial residuals")
expect_doppelganger("lmer-partials", p)
p <- effect_plot(fmVA0, pred = Anger, data = va) +
ggtitle("glmer test")
expect_doppelganger("glmer", p)
expect_message(p <- effect_plot(gm, pred = period, data = cbpp) +
ggtitle("glmer + offset test"))
expect_doppelganger("glmer-offset", p)
})
context("lme4 predictions")
test_that("predict_mer works with random effects", {
expect_equal(head(jtools:::predict_mer(lmVA0, newdata = va,
type = "response")),
head(predict(lmVA0, newdata = va, type = "response")))
})
}
context("effect_plot offsets")
set.seed(1)
n <- 50
cov <- 10
x <- rnorm(n, 0, 0.2)
p <- 0.4 + 0.2*x
y <- rbinom(n, cov, p)
bindat <- data.frame(cbind(x, p, y, t = 10))
binglm <- glm(cbind(y, t-y) ~ x, data = bindat, family = binomial)
set.seed(100)
exposures <- rpois(50, 50)
counts <- exposures - rpois(50, 25)
money <- (counts/exposures) + rnorm(50, sd = 1)
talent <- counts*.5 + rnorm(50, sd = 3)
talent_f <- rbinom(50, 1, .5)
poisdat <- as.data.frame(cbind(exposures, counts, talent, talent_f, money))
poisdat$talent_f <- factor(poisdat$talent_f)
pmod <- glm(counts ~ talent*money + talent_f, offset = log(exposures),
data = poisdat, family = poisson)
test_that("effect_plot handles two-column DVs", {
p <- effect_plot(binglm, x, interval = T)
expect_doppelganger("glm-bin-2col", p)
})
test_that("effect_plot handles offsets", {
expect_message(p <- effect_plot(pmod, pred = money) + ggtitle("offset"))
expect_doppelganger("glm-offset", p)
})
test_that("effect_plot handles plot points with offsets", {
expect_message(p <- effect_plot(pmod, pred = money, plot.points = TRUE) +
ggtitle("offset plus plot points"))
expect_doppelganger("glm-offset-points", p)
})
test_that("effect_plot handles partial residuals with offsets", {
expect_message(p <- effect_plot(pmod, pred = money, partial.residuals = TRUE) +
ggtitle("offset plus partials"))
expect_doppelganger("glm-offset-partials", p)
})
context("effect_plot categorical predictors")
test_that("effect_plot handles offsets w/ categorical predictors", {
p <- effect_plot(pmod, pred = talent_f) +
ggtitle("categorical (plus offset)")
expect_doppelganger("glm-cat-offset", p)
expect_error(p <- effect_plot(pmod, pred = talent_f, int.type = "prediction"))
p <- effect_plot(pmod, pred = talent_f, plot.points = TRUE) +
ggtitle("categorical, offset, plot points")
expect_doppelganger("glm-cat-offset-points", p)
p <- effect_plot(pmod, pred = talent_f, partial.residuals = TRUE) +
ggtitle("categorical, offset, partial residuals")
expect_doppelganger("glm-cat-offset-partials", p)
})
test_that("effect_plot does line plots", {
p <- effect_plot(pmod, pred = talent_f, cat.geom = "line") +
ggtitle("categorical line plot")
expect_doppelganger("glm-cat-line-offset", p)
p <- effect_plot(pmod, pred = talent_f, cat.geom = "line", interval = FALSE) +
ggtitle("categorical line plot no intervals")
expect_doppelganger("glm-cat-line-offset-no-int", p)
})
test_that("effect_plot does bar plots", {
p <- effect_plot(pmod, pred = talent_f, cat.geom = "bar") +
ggtitle("categorical bar plot")
expect_doppelganger("glm-cat-bar-offset", p)
p <- effect_plot(pmod, pred = talent_f, cat.geom = "bar", interval = FALSE) +
ggtitle("categorical bar plot no intervals")
expect_doppelganger("glm-cat-bar-offset-no-int", p)
})
### Code used to create brmsfit and stanreg test objects
# library(brms)
# data(epilepsy)
# bprior1 <- prior(student_t(5,0,10), class = b) +
# prior(cauchy(0,2), class = sd)
# fit1 <- brm(count ~ zAge + zBase * Trt + (1|patient),
# data = epilepsy, family = poisson(), prior = bprior1,
# cores = 2, chains = 1, iter = 500, save_dso = FALSE)
# saveRDS(fit1, "brmfit.rds", version = 2)
#
# library(rstanarm)
# fitrs <- stan_glmer(incidence ~ size * as.numeric(period) + (1 | herd),
# data = lme4::cbpp, family = poisson,
# # this next line is only to keep the example small in size!
# chains = 2, cores = 2, seed = 12345, iter = 500)
# saveRDS(fitrs, "rsafit.rds")
# fitmv <- brm(
# bf(mpg ~ cyl + wt, sigma ~ cyl + wt) + bf(wt ~ cyl + mpg, sigma ~ cyl + mpg) +
# set_rescor(FALSE),
# data = mtcars, chains = 2, cores = 2, iter = 500
# )
# saveRDS(fitmv, "mvfit.rds")
#### brms and rstanarm tests #################################################
if (requireNamespace("brms")) {
context("brmsfit plots")
bfit <- readRDS("brmfit.rds")
mvfit <- readRDS("mvfit.rds")
test_that("brmsfit objects are supported", {
p <- effect_plot(bfit, pred = "zBase", interval = TRUE) + ggtitle("brms")
expect_doppelganger("brm", p)
expect_is(make_predictions(bfit, pred = "zBase", at = list("Trt" = c(0,1)),
interval = TRUE, estimate = "median"),
"data.frame")
})
test_that("brmsfit multivariate models work", {
p <- effect_plot(mvfit, pred = "cyl", interval = TRUE) +
ggtitle("mv default dv mpg")
expect_doppelganger("brm-multiv-default-int", p)
p <- effect_plot(mvfit, pred = "cyl", interval = TRUE, resp = "wt") +
ggtitle("mv selected dv wt")
expect_doppelganger("brm-multiv-selected-int", p)
})
test_that("brmsfit distributional models work", {
p <- effect_plot(mvfit, pred = "cyl", interval = TRUE, dpar = "sigma") +
ggtitle("mv default dv mpg sigma")
expect_doppelganger("brm-multiv-default-sigma-int", p)
p <- effect_plot(mvfit, pred = "cyl", interval = TRUE, resp = "wt",
dpar = "sigma") +
ggtitle("mv selected dv wt sigma")
expect_doppelganger("brm-multiv-selected-sigma-int", p)
expect_warning(p <- effect_plot(mvfit, pred = "cyl", interval = TRUE,
dpar = "sigma", resp = "mpg",
plot.points = TRUE) +
ggtitle("mv select dv mpg sigma warning"))
expect_error(make_predictions(mvfit, pred = "cyl", interval = TRUE,
resp = "mpg", dpar = "sigma",
partial.residuals = TRUE))
})
}
if (requireNamespace("rstanarm") & requireNamespace("lme4")) {
context("stanreg plots")
set.seed(100)
rsfit <- readRDS("rsafit.rds")
library(lme4)
data(cbpp)
test_that("stanreg objects are supported", {
p <- effect_plot(rsfit, pred = "size", interval = TRUE, data = lme4::cbpp) +
ggtitle("stanreg")
expect_doppelganger("rstanarm", p)
expect_s3_class(make_predictions(rsfit, pred = "size", interval = TRUE,
estimate = "median", data = cbpp), "data.frame")
})
test_that("facet.by works with rstanarm", {
p <- effect_plot(rsfit, pred = "size", interval = TRUE, data = lme4::cbpp,
facet.by = "herd") +
ggtitle("stanreg facet.by")
expect_doppelganger("rstanarm-facet", p)
})
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.