Medians and central interval estimates of yrep with y overlaid. See the Plot Descriptions section, below.

ppc_intervals(y, yrep, x = NULL, ..., prob = 0.5, prob_outer = 0.9,
  size = 1, fatten = 3)

ppc_intervals_grouped(y, yrep, x = NULL, group, facet_args = list(), ...,
  prob = 0.5, prob_outer = 0.9, size = 1, fatten = 3)

ppc_ribbon(y, yrep, x = NULL, ..., prob = 0.5, prob_outer = 0.9,
  alpha = 0.33, size = 0.25)

ppc_ribbon_grouped(y, yrep, x = NULL, group, facet_args = list(), ...,
  prob = 0.5, prob_outer = 0.9, alpha = 0.33, size = 0.25)

ppc_intervals_data(y, yrep, x = NULL, group = NULL, prob = 0.5,
  prob_outer = 0.9, ...)

ppc_ribbon_data(y, yrep, x = NULL, group = NULL, prob = 0.5,
  prob_outer = 0.9, ...)



A vector of observations. See Details.


An \(S\) by \(N\) matrix of draws from the posterior predictive distribution, where \(S\) is the size of the posterior sample (or subset of the posterior sample used to generate yrep) and \(N\) is the number of observations (the length of y). The columns of yrep should be in the same order as the data points in y for the plots to make sense. See Details for additional instructions.


A numeric vector the same length as y to use as the x-axis variable. For example, x could be a predictor variable from a regression model, a time variable for time-series models, etc. If x is missing or NULL, then 1:length(y) is used for the x-axis.


Currently unused.

prob, prob_outer

Values between 0 and 1 indicating the desired probability mass to include in the inner and outer intervals. The defaults are prob=0.5 and prob_outer=0.9.


A grouping variable (a vector or factor) the same length as y. Each value in group is interpreted as the group level pertaining to the corresponding value of y.


An optional list of arguments (other than facets) passed to facet_wrap to control faceting.

alpha, size, fatten

Arguments passed to geoms. For ribbon plots alpha and size are passed to geom_ribbon. For interval plots size and fatten are passed to geom_pointrange.


A ggplot object that can be further customized using the ggplot2 package. The _data functions return the data that would have been drawn by the plotting function.

Plot Descriptions

ppc_intervals, ppc_ribbon

100*prob% central intervals for yrep at each x value. ppc_intervals plots intervals as vertical bars with points indicating yrep medians and darker points indicating observed y values. ppc_ribbon plots a ribbon of connected intervals with a line through the median of yrep and a darker line connecting observed y values. In both cases an optional x variable can also be specified for the x-axis variable. Depending on the number of observations and the variability in the predictions at different values of x, one or the other of these plots may be easier to read than the other.

ppc_intervals_grouped, ppc_ribbon_grouped

Same as ppc_intervals and ppc_ribbon, respectively, but a separate plot (facet) is generated for each level of a grouping variable.


Gelman, A., Carlin, J. B., Stern, H. S., Dunson, D. B., Vehtari, A., and Rubin, D. B. (2013). Bayesian Data Analysis. Chapman & Hall/CRC Press, London, third edition. (Ch. 6)

See also


y <- rnorm(50) yrep <- matrix(rnorm(5000, 0, 2), ncol = 50) color_scheme_set("brightblue") ppc_ribbon(y, yrep)
ppc_intervals(y, yrep)
# change x axis to y values (instead of indices) and add x = y line ppc_intervals(y, yrep, x = y) + abline_01()
color_scheme_set("teal") year <- 1950:1999 ppc_ribbon(y, yrep, x = year, alpha = 0, size = 0.75) + ggplot2::xlab("Year")
color_scheme_set("pink") year <- rep(2000:2009, each = 5) group <- gl(5, 1, length = 50, labels = LETTERS[1:5]) ppc_ribbon_grouped(y, yrep, x = year, group) + ggplot2::scale_x_continuous(breaks = pretty)
ppc_ribbon_grouped( y, yrep, x = year, group, facet_args = list(scales = "fixed"), alpha = 1, size = 2 ) + xaxis_text(FALSE) + xaxis_ticks(FALSE) + panel_bg(fill = "gray20")
ppc_dat <- ppc_intervals_data(y, yrep, x = year, prob = 0.5) ppc_group_dat <- ppc_intervals_data(y, yrep, x = year, group = group, prob = 0.5)
# NOT RUN { library("rstanarm") fit <- stan_glmer(mpg ~ wt + (1|cyl), data = mtcars) yrep <- posterior_predict(fit) color_scheme_set("purple") with(mtcars, ppc_intervals(mpg, yrep, x = wt, prob = 0.5)) + panel_bg(fill="gray90", color = NA) + grid_lines(color = "white") ppc_intervals_grouped(y = mtcars$mpg, yrep, prob = 0.8, x = mtcars$wt, group = mtcars$cyl) color_scheme_set("gray") ppc_intervals(mtcars$mpg, yrep, prob = 0.5) + ggplot2::scale_x_continuous( labels = rownames(mtcars), breaks = 1:nrow(mtcars) ) + xaxis_text(angle = -70, vjust = 1, hjust = 0) # }