## ----echo=FALSE---------------------------------------------------------------
req_suggested_packages <- c("emmeans", "ggplot2", "cowplot",
                            "ggbeeswarm", "ggpol", 
                            "nlme", "glmmTMB", "rstanarm", "brms", 
                            "MEMSS", "GLMMadaptive")
pcheck <- lapply(req_suggested_packages, requireNamespace, 
                 quietly = TRUE)
if (any(!unlist(pcheck))) {
   message("Required package(s) for this vignette are not available/installed and code will not be executed.")
   knitr::opts_chunk$set(eval = FALSE)
}

## ----set-options, echo=FALSE, cache=FALSE-----------------------------------------------
options(width = 90)
knitr::opts_chunk$set(dpi=72)
knitr::knit_hooks$set(document = function(x){
  gsub("```\n*```r*\n*", "", x)
})

## ----message=FALSE, warning=FALSE-------------------------------------------------------
library("afex")     
library("ggplot2")  
library("cowplot")
theme_set(theme_bw(base_size = 14) + 
            theme(legend.position="bottom", 
                  panel.grid.major.x = element_blank(),
                  panel.grid.minor.x = element_blank()))

## ---------------------------------------------------------------------------------------
set_sum_contrasts()

## ---------------------------------------------------------------------------------------
warp.lm <- lm(breaks ~ wool * tension, data = warpbreaks)

## ----fig.width=7, fig.height=3----------------------------------------------------------
p1 <- afex_plot(warp.lm, "tension")
p2 <- afex_plot(warp.lm, "tension", "wool")
plot_grid(p1, p2)

## ---------------------------------------------------------------------------------------
ins <- data.frame(
    n = c(500, 1200, 100, 400, 500, 300),
    size = factor(rep(1:3,2), labels = c("S","M","L")),
    age = factor(rep(1:2, each = 3)),
    claims = c(42, 37, 1, 101, 73, 14))

## ----fig.width=3, fig.height=3----------------------------------------------------------
ins.glm <- glm(claims ~ size + age + offset(log(n)), 
               data = ins, family = "poisson")
afex_plot(ins.glm, "size", "age")

## ---------------------------------------------------------------------------------------
## binomial glm adapted from ?predict.glm
ldose <- factor(rep(0:5, 2))
numdead <- c(1, 4, 9, 13, 18, 20, 0, 2, 6, 10, 12, 16)
sex <- factor(rep(c("M", "F"), c(6, 6)))
SF <- numdead/20  ## dv should be a vector, no matrix
budworm.lg <- glm(SF ~ sex*ldose, family = binomial, 
                  weights = rep(20, length(numdead)))

## ----fig.width=8, fig.height=3----------------------------------------------------------
a <- afex_plot(budworm.lg, "ldose")
b <- afex_plot(budworm.lg, "ldose", "sex") ## data point is hidden behind mean!
c <- afex_plot(budworm.lg, "ldose", "sex", 
          data_arg = list(size = 4, color = "red"))
plot_grid(a, b, c, labels = "AUTO", nrow = 1)

## ----fig.width=8, fig.height=6----------------------------------------------------------
## nlme mixed model
data(Oats, package = "nlme")
Oats$nitro <- factor(Oats$nitro)
oats.1 <- nlme::lme(yield ~ nitro * Variety, 
                    random = ~ 1 | Block / Variety,
                    data = Oats)
plot_grid(
  afex_plot(oats.1, "nitro", "Variety", data = Oats), # A
  afex_plot(oats.1, "nitro", "Variety", data = Oats), # B
  afex_plot(oats.1, "nitro", "Variety", data = Oats, id = "Block"), # C
  afex_plot(oats.1, "nitro", data = Oats), # D
  afex_plot(oats.1, "nitro", data = Oats, id = c("Block", "Variety")), # E
  afex_plot(oats.1, "nitro", data = Oats, id = "Block"), # F
  labels = "AUTO"
)

## ----eval=FALSE-------------------------------------------------------------------------
# library("glmmTMB")
# tmb <- glmmTMB(count~spp * mined + (1|site),
#               ziformula = ~spp * mined,
#               family=nbinom2, Salamanders)
# 

## ----eval=FALSE, include=FALSE----------------------------------------------------------
# library("glmmTMB")
# afex::set_sum_contrasts()
# tmb <- glmmTMB(count~spp * mined + (1|site),
#               ziformula = ~spp * mined,
#               family=nbinom2, Salamanders)
# save(tmb, file = "inst/extdata/tmb_example_fit.rda", compress = "xz")

## ----echo=FALSE, include=FALSE----------------------------------------------------------
library("glmmTMB")
data(Salamanders, package = "glmmTMB")
load(system.file("extdata/", "tmb_example_fit.rda", package = "afex"))
tmb <- up2date(tmb)

## ----fig.width=8, fig.height=3----------------------------------------------------------
plot_grid(
  afex_plot(tmb, "spp"),
  afex_plot(tmb, "spp", data_geom = geom_violin),
  afex_plot(tmb, "spp", id = "site", data = Salamanders), 
  labels = "AUTO", nrow = 1
)

## ----fig.width=8.5, fig.height=3.5------------------------------------------------------
a <- afex_plot(tmb, "spp", "mined")
b <- afex_plot(tmb, "spp", "mined", data_alpha = 0.3,
          data_arg = list(
            position = 
              ggplot2::position_jitterdodge(
                jitter.width = 0.2, 
                jitter.height = 0.5, 
                dodge.width = 0.5  ## needs to be same as dodge
                ),
            color = "darkgrey"))
plot_grid(a, b, labels = "AUTO")

## ----fig.width=5.5, fig.height=3.5------------------------------------------------------
afex_plot(tmb, "spp", "mined", id = "site", data = Salamanders, 
          data_geom = ggbeeswarm::geom_beeswarm, 
          data_arg = list(dodge.width = 0.5, cex = 0.4,
                          color = "darkgrey")
          )

## ----eval=FALSE-------------------------------------------------------------------------
# library("GLMMadaptive")
# afex::set_sum_contrasts()
# data(Salamanders, package = "glmmTMB")
# gm1 <- mixed_model(count~spp * mined, random = ~ 1 | site, data = Salamanders,
#                    family = zi.poisson(), zi_fixed = ~ ~spp * mined)

## ----eval=FALSE, include=FALSE----------------------------------------------------------
# library("GLMMadaptive")
# afex::set_sum_contrasts()
# gm1 <- mixed_model(count~spp * mined, random = ~ 1 | site, data = Salamanders,
#                    family = zi.poisson(), zi_fixed = ~ ~spp * mined)
# save(gm1, file = "inst/extdata/glmmadapt_example_fit.rda", compress = "xz")

## ----echo=FALSE, include=FALSE----------------------------------------------------------
library("GLMMadaptive")
data(Salamanders, package = "glmmTMB")
load(system.file("extdata/", "glmmadapt_example_fit.rda", package = "afex"))

## ----fig.width=4, fig.height=3----------------------------------------------------------
afex_plot(gm1, "spp", "mined", id = "site", 
          data = Salamanders, data_geom = ggplot2::geom_count)

## ----eval=FALSE-------------------------------------------------------------------------
# library("rstanarm") ## requires resetting the ggplot2 theme
# theme_set(theme_bw(base_size = 14) +
#             theme(legend.position="bottom",
#                   panel.grid.major.x = element_blank(),
#                   panel.grid.minor.x = element_blank()))
# cbpp <- lme4::cbpp
# cbpp$prob <- with(cbpp, incidence / size)
# example_model <- stan_glmer(prob ~ period + (1|herd),
#                             data = cbpp, family = binomial, weight = size,
#                             chains = 2, cores = 1, seed = 12345, iter = 500)

## ----eval=FALSE-------------------------------------------------------------------------
# b1 <- afex_plot(example_model, "period")
# ## dv column detected: prob
# ## No id column passed. Assuming all rows are independent samples.
# b2 <- afex_plot(example_model, "period", data_geom = geom_violin)
# ## dv column detected: prob
# ## No id column passed. Assuming all rows are independent samples.
# plot_grid(b1, b2, labels = "AUTO")

## ----fig.width=7, fig.height=3, echo=FALSE----------------------------------------------
load(system.file("extdata/", "plots_rstanarm.rda", package = "afex"))
grid::grid.newpage(); grid::grid.draw(b12)

## ----eval=FALSE-------------------------------------------------------------------------
# cbpp_l <- vector("list", nrow(cbpp))
# for (i in seq_along(cbpp_l)) {
#   cbpp_l[[i]] <- data.frame(
#     herd = cbpp$herd[i],
#     period = cbpp$period[i],
#     incidence = rep(0, cbpp$size[i])
#   )
#   cbpp_l[[i]]$incidence[seq_len(cbpp$incidence[i])] <- 1
# }
# cbpp_l <- do.call("rbind", cbpp_l)
# cbpp_l$herd <- factor(cbpp_l$herd, levels = levels(cbpp$herd))
# cbpp_l$period <- factor(cbpp_l$period, levels = levels(cbpp$period))
# example_model2 <- stan_glmer(incidence ~ period + (1|herd),
#                              data = cbpp_l, family = binomial,
#                              chains = 2, cores = 1, seed = 12345, iter = 500)

## ----eval=FALSE-------------------------------------------------------------------------
# b3 <- afex_plot(example_model2, "period")
# ## dv column detected: incidence
# ## No id column passed. Assuming all rows are independent samples.
# b4 <- afex_plot(example_model2, "period", id = "herd")
# ## dv column detected: incidence
# plot_grid(b3, b4, labels = "AUTO")

## ----fig.width=7, fig.height=3, echo=FALSE----------------------------------------------
grid::grid.newpage(); grid::grid.draw(b34)

## ----eval=FALSE-------------------------------------------------------------------------
# data("Machines", package = "MEMSS")
# mm <- stan_lmer(score ~ Machine + (Machine|Worker), data=Machines,
#                 chains = 2, cores = 1, seed = 12345, iter = 500)

## ----eval=FALSE-------------------------------------------------------------------------
# b5 <- afex_plot(mm, "Machine")
# ## dv column detected: score
# ## No id column passed. Assuming all rows are independent samples.
# b6 <- afex_plot(mm, "Machine", id = "Worker")
# ## dv column detected: score
# plot_grid(b5, b6, labels = "AUTO")

## ----fig.width=7, fig.height=3, echo=FALSE----------------------------------------------
grid::grid.newpage(); grid::grid.draw(b56)

## ----eval=FALSE, include=FALSE----------------------------------------------------------
# library("rstanarm") ## requires resetting the ggplot2 theme
# library("ggplot2")
# theme_set(theme_bw(base_size = 14) +
#             theme(legend.position="bottom",
#                   panel.grid.major.x = element_blank(),
#                   panel.grid.minor.x = element_blank()))
# set_sum_contrasts()
# cbpp <- lme4::cbpp
# cbpp$prob <- with(cbpp, incidence / size)
# example_model <- stan_glmer(prob ~ period + (1|herd),
#                             data = cbpp, family = binomial, weight = size,
#                             chains = 2, cores = 1, seed = 12345, iter = 500)
# b1 <- afex_plot(example_model, "period")
# b2 <- afex_plot(example_model, "period", data_geom = geom_violin)
# b12 <- ggplotGrob(cowplot::plot_grid(b1, b2))
# 
# cbpp_l <- vector("list", nrow(cbpp))
# for (i in seq_along(cbpp_l)) {
#   cbpp_l[[i]] <- data.frame(
#     herd = cbpp$herd[i],
#     period = cbpp$period[i],
#     incidence = rep(0, cbpp$size[i])
#   )
#   cbpp_l[[i]]$incidence[seq_len(cbpp$incidence[i])] <- 1
# }
# cbpp_l <- do.call("rbind", cbpp_l)
# cbpp_l$herd <- factor(cbpp_l$herd, levels = levels(cbpp$herd))
# cbpp_l$period <- factor(cbpp_l$period, levels = levels(cbpp$period))
# example_model2 <- stan_glmer(incidence ~ period + (1|herd),
#                              data = cbpp_l, family = binomial,
#                              chains = 2, cores = 1, seed = 12345, iter = 500)
# b3 <- afex_plot(example_model2, "period")
# b4 <- afex_plot(example_model2, "period", id = "herd")
# b34 <- ggplotGrob(cowplot::plot_grid(b3, b4))
# 
# data("Machines", package = "MEMSS")
# mm <- stan_lmer(score ~ Machine + (Machine|Worker), data=Machines,
#                 chains = 2, cores = 1, seed = 12345, iter = 500)
# b5 <- afex_plot(mm, "Machine")
# b6 <- afex_plot(mm, "Machine", id = "Worker", data = Machines)
# b56 <- ggplotGrob(cowplot::plot_grid(b5, b6))
# save(b12, b34, b56, file = "../inst/extdata/plots_rstanarm.rda",
#      compress = "xz", version = 2)

## ----eval=FALSE-------------------------------------------------------------------------
# library("brms")
# data("Machines", package = "MEMSS")
# mm2 <- brm(score ~ Machine + (Machine|Worker), data=Machines,
#            chains = 2, cores = 1, seed = 12345, iter = 500)

## ----eval=FALSE-------------------------------------------------------------------------
# bb1 <- afex_plot(mm2, "Machine", data = Machines, dv = "score")
# ## No id column passed. Assuming all rows are independent samples.
# bb2 <- afex_plot(mm2, "Machine", id = "Worker",
#           data = Machines, dv = "score")
# plot_grid(bb1, bb2)

## ----fig.width=7, fig.height=3, echo=FALSE----------------------------------------------
load(system.file("extdata/", "plots_brms.rda", package = "afex"))
grid::grid.newpage(); grid::grid.draw(bbout)

## ----eval=FALSE, include=FALSE----------------------------------------------------------
# library("brms")
# data("Machines", package = "MEMSS")
# mm2 <- brm(score ~ Machine + (Machine|Worker), data=Machines,
#            chains = 2, cores = 1, seed = 12345, iter = 500)
# bb1 <- afex_plot(mm2, "Machine", data = Machines, dv = "score")
# bb2 <- afex_plot(mm2, "Machine", id = "Worker",
#           data = Machines, dv = "score")
# bbout <- ggplotGrob(plot_grid(bb1, bb2))
# save(bbout, file = "../inst/extdata/plots_brms.rda", version = 2)

