From 74362e0d9df45d1d0ef3708e8f7d3bdc94ccc484 Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:20:16 -0600 Subject: [PATCH 1/7] bump version --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index da8229d8..b5a3fd44 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: bayesplot Type: Package Title: Plotting for Bayesian Models -Version: 1.15.0.9000 -Date: 2025-12-11 +Version: 1.16.0 +Date: 2026-08-24 Authors@R: c(person("Jonah", "Gabry", role = c("aut", "cre"), email = "jgabry@gmail.com"), person("Tristan", "Mahr", role = "aut", comment = c(ORCID = "0000-0002-8890-5116")), person("Paul-Christian", "Bürkner", role = "ctb"), From 2103ecdf48f4ec5d6fb793981555665cb9ccedad Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:20:42 -0600 Subject: [PATCH 2/7] Add PPC-calibration to ppc-overview.R --- R/ppc-overview.R | 3 +++ man/PPC-calibration.Rd | 12 ++++++------ man/PPC-censoring.Rd | 2 +- man/PPC-discrete.Rd | 2 +- man/PPC-distributions.Rd | 2 +- man/PPC-errors.Rd | 2 +- man/PPC-intervals.Rd | 2 +- man/PPC-loo.Rd | 2 +- man/PPC-overview.Rd | 4 +++- man/PPC-scatterplots.Rd | 2 +- man/PPC-test-statistics.Rd | 2 +- 11 files changed, 20 insertions(+), 15 deletions(-) diff --git a/R/ppc-overview.R b/R/ppc-overview.R index 41cd0208..19e59fe3 100644 --- a/R/ppc-overview.R +++ b/R/ppc-overview.R @@ -99,6 +99,9 @@ #' distribution of censored data `y` to the distributions of individual #' simulated datasets (rows) in `yrep`. #' +#' * [PPC-calibration]: PPC functions to assess the calibration of predictions +#' or predictive probabilities in relation to binary observations. +#' #' @section Providing an interface for predictive checking from another package: #' #' In addition to the various plotting functions, the **bayesplot** package diff --git a/man/PPC-calibration.Rd b/man/PPC-calibration.Rd index 633bad64..c50a4de1 100644 --- a/man/PPC-calibration.Rd +++ b/man/PPC-calibration.Rd @@ -183,9 +183,9 @@ customized using the \strong{ggplot2} package. The functions with suffix function. } \description{ -Assess the calibration of the predictions, or predictive probabilites in relation to -binary observations. -See the \strong{Plot Descriptions} section, below, for details. +Assess the calibration of the predictions, or predictive probabilities in +relation to binary observations. See the \strong{Plot Descriptions} section, +below, for details. } \details{ The ppc_calibration functions are designed to assess the calibration of a @@ -201,7 +201,7 @@ The required inputs are \code{y}, representing binary observations \code{prep} or \code{yrep}. A document with detailed explanations and examples is available in the -\href{https://mc-stan.org/bayesplot/vignettes/articles-online-only/}{vignettes}. +\href{https://mc-stan.org/bayesplot/articles/}{vignettes}. } \section{Plot Descriptions}{ @@ -224,7 +224,7 @@ observation's posterior predictive draws using LOO importance weights. \item{\code{ppc_calibration_data()}}{ Data frame containing the data underlying the calibration plots, which can be used to build custom calibration plots. The \code{type} argument controls -whether the data frame for \code{ppc_calibration_overlay()} and its \verb{_grouped`` variant is computed (}type = "overlay"\verb{), or the data frame for }ppc_calibration()\verb{and its}_grouped\code{or}_loo\verb{ variant is computed (}type = "interval"`). +whether the data frame for \code{ppc_calibration_overlay()} and its \verb{_grouped`` variant is computed (}type = "overlay"\verb{), or the data frame for }ppc_calibration()\verb{and its}_grouped\code{or}_loo\verb{ variant is computed (}type = "interval"`). } } } @@ -255,7 +255,7 @@ Recommendations for visual predictive checks in Bayesian workflow. (Preprint). arXiv. https://doi.org/10.48550/arXiv.2503.01509 } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, \code{\link{PPC-distributions}}, diff --git a/man/PPC-censoring.Rd b/man/PPC-censoring.Rd index fc77d88a..f15f7ccf 100644 --- a/man/PPC-censoring.Rd +++ b/man/PPC-censoring.Rd @@ -150,7 +150,7 @@ from incomplete observations. doi:10.1080/01621459.1958.10501452. } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-discrete}}, \code{\link{PPC-distributions}}, diff --git a/man/PPC-discrete.Rd b/man/PPC-discrete.Rd index f1cfe99d..e46bfaf7 100644 --- a/man/PPC-discrete.Rd +++ b/man/PPC-discrete.Rd @@ -281,7 +281,7 @@ Visualizing count data regressions using rootograms. \url{https://arxiv.org/abs/1605.01311}. } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-distributions}}, diff --git a/man/PPC-distributions.Rd b/man/PPC-distributions.Rd index 42b93906..1544b7cc 100644 --- a/man/PPC-distributions.Rd +++ b/man/PPC-distributions.Rd @@ -465,7 +465,7 @@ Tesso, H., & Vehtari, A. (2026). LOO-PIT predictive model checking. arXiv preprint https://arxiv.org/abs/2603.02928. } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, diff --git a/man/PPC-errors.Rd b/man/PPC-errors.Rd index 4b3df841..c84e8e38 100644 --- a/man/PPC-errors.Rd +++ b/man/PPC-errors.Rd @@ -250,7 +250,7 @@ A., and Rubin, D. B. (2013). \emph{Bayesian Data Analysis.} Chapman & Hall/CRC Press, London, third edition. (Ch. 6) } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, diff --git a/man/PPC-intervals.Rd b/man/PPC-intervals.Rd index 34acff1c..2f924463 100644 --- a/man/PPC-intervals.Rd +++ b/man/PPC-intervals.Rd @@ -247,7 +247,7 @@ A., and Rubin, D. B. (2013). \emph{Bayesian Data Analysis.} Chapman & Hall/CRC Press, London, third edition. (Ch. 6) } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, diff --git a/man/PPC-loo.Rd b/man/PPC-loo.Rd index 0789e928..ecf5ee0a 100644 --- a/man/PPC-loo.Rd +++ b/man/PPC-loo.Rd @@ -414,7 +414,7 @@ Tesso, H., & Vehtari, A. (2026). LOO-PIT predictive model checking. arXiv preprint https://arxiv.org/abs/2603.02928. } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, diff --git a/man/PPC-overview.Rd b/man/PPC-overview.Rd index f58465d2..e91f256b 100644 --- a/man/PPC-overview.Rd +++ b/man/PPC-overview.Rd @@ -96,6 +96,8 @@ leave-one-out (LOO) cross-validation. \item \link{PPC-censoring}: PPC functions comparing the empirical distribution of censored data \code{y} to the distributions of individual simulated datasets (rows) in \code{yrep}. +\item \link{PPC-calibration}: PPC functions to assess the calibration of predictions +or predictive probabilities in relation to binary observations. } } @@ -123,7 +125,7 @@ A., and Rubin, D. B. (2013). \emph{Bayesian Data Analysis.} Chapman & Hall/CRC Press, London, third edition. (Ch. 6) } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, diff --git a/man/PPC-scatterplots.Rd b/man/PPC-scatterplots.Rd index 6e9c1307..a14349da 100644 --- a/man/PPC-scatterplots.Rd +++ b/man/PPC-scatterplots.Rd @@ -163,7 +163,7 @@ A., and Rubin, D. B. (2013). \emph{Bayesian Data Analysis.} Chapman & Hall/CRC Press, London, third edition. (Ch. 6) } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, diff --git a/man/PPC-test-statistics.Rd b/man/PPC-test-statistics.Rd index 71fb4ae9..8c52e8e3 100644 --- a/man/PPC-test-statistics.Rd +++ b/man/PPC-test-statistics.Rd @@ -235,7 +235,7 @@ A., and Rubin, D. B. (2013). \emph{Bayesian Data Analysis.} Chapman & Hall/CRC Press, London, third edition. (Ch. 6) } \seealso{ -Other PPCs: +Other PPCs: \code{\link{PPC-calibration}}, \code{\link{PPC-censoring}}, \code{\link{PPC-discrete}}, From 553b99ab86ddb6e67d01322d96676db8374fa837 Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:21:33 -0600 Subject: [PATCH 3/7] fix broken url --- R/ppc-calibration.R | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/R/ppc-calibration.R b/R/ppc-calibration.R index f343ca89..4cd1963e 100644 --- a/R/ppc-calibration.R +++ b/R/ppc-calibration.R @@ -1,8 +1,8 @@ #' PPC calibration #' -#' Assess the calibration of the predictions, or predictive probabilites in relation to -#' binary observations. -#' See the **Plot Descriptions** section, below, for details. +#' Assess the calibration of the predictions, or predictive probabilities in +#' relation to binary observations. See the **Plot Descriptions** section, +#' below, for details. #' #' @name PPC-calibration #' @family PPCs @@ -31,9 +31,11 @@ #' `ppc_loo_calibration()`, and `ppc_loo_calibration_grouped()` accept either #' `prep` or `yrep`. #' -#' A document with detailed explanations and examples is available in the -#' [vignettes](https://mc-stan.org/bayesplot/vignettes/articles-online-only/). -#' +#' `prep` or `yrep`. +#' +#' A document with detailed explanations and examples is available in the +#' [vignettes](https://mc-stan.org/bayesplot/articles/). +#' #' @section Plot Descriptions: #' \describe{ #' \item{`ppc_calibration()`,`ppc_calibration_grouped()`}{ From 89260774476b908e08afd45a1a870b0c400719a1 Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:25:24 -0600 Subject: [PATCH 4/7] Update ppc-calibration.R --- R/ppc-calibration.R | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/R/ppc-calibration.R b/R/ppc-calibration.R index 4cd1963e..f8429176 100644 --- a/R/ppc-calibration.R +++ b/R/ppc-calibration.R @@ -1,8 +1,9 @@ #' PPC calibration #' #' Assess the calibration of the predictions, or predictive probabilities in -#' relation to binary observations. See the **Plot Descriptions** section, -#' below, for details. +#' relation to binary observations. See the **Plot Descriptions** and +#' **Details** sections below and also the PPC Calibration vignette for more +#' details and examples. #' #' @name PPC-calibration #' @family PPCs @@ -19,8 +20,8 @@ #' @template return-ggplot-or-data #' #' @details -#' The ppc_calibration functions are designed to assess the calibration of a -#' model with binary outcomes. In this context, calibration refers to the +#' The PPC calibration functions are designed to assess the calibration of a +#' model with binary outcomes. In this context, calibration refers to the #' agreement between predicted probabilities and conditional event probabilities #' (CEPs) see Dimitriadis et al. (2021) and Säilynoja et al. (2025) for details. #' From 52b7b40aa2a65c663cbf32a661655eec8ce333ba Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:26:45 -0600 Subject: [PATCH 5/7] fix R cmd check note --- man/PPC-calibration.Rd | 11 +++++++---- tests/testthat/test-ppc-errors.R | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/man/PPC-calibration.Rd b/man/PPC-calibration.Rd index c50a4de1..ccfa0fd7 100644 --- a/man/PPC-calibration.Rd +++ b/man/PPC-calibration.Rd @@ -184,11 +184,12 @@ function. } \description{ Assess the calibration of the predictions, or predictive probabilities in -relation to binary observations. See the \strong{Plot Descriptions} section, -below, for details. +relation to binary observations. See the \strong{Plot Descriptions} and +\strong{Details} sections below and also the PPC Calibration vignette for more +details and examples. } \details{ -The ppc_calibration functions are designed to assess the calibration of a +The PPC calibration functions are designed to assess the calibration of a model with binary outcomes. In this context, calibration refers to the agreement between predicted probabilities and conditional event probabilities (CEPs) see Dimitriadis et al. (2021) and Säilynoja et al. (2025) for details. @@ -200,6 +201,8 @@ The required inputs are \code{y}, representing binary observations \code{ppc_loo_calibration()}, and \code{ppc_loo_calibration_grouped()} accept either \code{prep} or \code{yrep}. +\code{prep} or \code{yrep}. + A document with detailed explanations and examples is available in the \href{https://mc-stan.org/bayesplot/articles/}{vignettes}. } @@ -224,7 +227,7 @@ observation's posterior predictive draws using LOO importance weights. \item{\code{ppc_calibration_data()}}{ Data frame containing the data underlying the calibration plots, which can be used to build custom calibration plots. The \code{type} argument controls -whether the data frame for \code{ppc_calibration_overlay()} and its \verb{_grouped`` variant is computed (}type = "overlay"\verb{), or the data frame for }ppc_calibration()\verb{and its}_grouped\code{or}_loo\verb{ variant is computed (}type = "interval"`). +whether the data frame for \code{ppc_calibration_overlay()} and its \verb{_grouped`` variant is computed (}type = "overlay"\verb{), or the data frame for }ppc_calibration()\verb{and its}_grouped\code{or}_loo\verb{ variant is computed (}type = "interval"`). } } } diff --git a/tests/testthat/test-ppc-errors.R b/tests/testthat/test-ppc-errors.R index e50829b1..3a94a3f5 100644 --- a/tests/testthat/test-ppc-errors.R +++ b/tests/testthat/test-ppc-errors.R @@ -175,8 +175,8 @@ test_that("ppc_error_binned renders correctly", { four_draws <- structure( c(-2.118, -2.061, -2.069, -2.011, 7.604, 9.720, 9.7186, 10.1888), - .Dim = c(4L, 2L), - .Dimnames = list( + dim = c(4L, 2L), + dimnames = list( iterations = NULL, parameters = c("(Intercept)", "(phi)") ) From cdadfc6a871c3b26c1be133e43e6e607f2dccfcc Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:27:16 -0600 Subject: [PATCH 6/7] Move both new vignettes to "Additional topics" section --- _pkgdown.yml | 8 ++++---- .../articles-online-only/loo-pit-correlated-tests.Rmd | 4 ++-- vignettes/articles-online-only/ppc-calibration.Rmd | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index 8500671c..af566799 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -46,12 +46,12 @@ articles: - plotting-mcmc-draws - visual-mcmc-diagnostics - graphical-ppcs - - articles-online-only/ppc-calibration - - title: "PIT-ECDF model checking" + - title: "Additional topics" desc: > - Articles on dependence-aware PIT-ECDF checks (website only; not included - in the CRAN package). + Articles on specific topics like calibration for binary models and + dependence-aware PIT-ECDF checks contents: + - articles-online-only/ppc-calibration - articles-online-only/loo-pit-correlated-tests reference: diff --git a/vignettes/articles-online-only/loo-pit-correlated-tests.Rmd b/vignettes/articles-online-only/loo-pit-correlated-tests.Rmd index dd05e3df..a5720509 100644 --- a/vignettes/articles-online-only/loo-pit-correlated-tests.Rmd +++ b/vignettes/articles-online-only/loo-pit-correlated-tests.Rmd @@ -1,5 +1,5 @@ --- -title: "Model checking using 'ppc_pit_ecdf' and 'ppc_loo_pit_ecdf'" +title: "Model checking using `ppc_pit_ecdf` and `ppc_loo_pit_ecdf`" author: "Florence Bockting" date: "`r Sys.Date()`" output: @@ -616,4 +616,4 @@ https://link.springer.com/article/10.1007/S11222-016-9696-4 Vehtari, A., Simpson, D., Gelman, A., Yao, Y., and Gabry, J. (2024). Pareto smoothed importance sampling. *Journal of Machine Learning Research*, 25(72), 1–58. https://www.jmlr.org/papers/v25/19-556.html - \ No newline at end of file + diff --git a/vignettes/articles-online-only/ppc-calibration.Rmd b/vignettes/articles-online-only/ppc-calibration.Rmd index 0d8a269a..ed90206c 100644 --- a/vignettes/articles-online-only/ppc-calibration.Rmd +++ b/vignettes/articles-online-only/ppc-calibration.Rmd @@ -1,5 +1,5 @@ --- -title: "PPC Calibration - Calibration of Bayesian models with binary outcomes" +title: "Calibration of Bayesian models with binary outcomes" author: "Florence Bockting" date: "`r Sys.Date()`" output: @@ -9,7 +9,7 @@ output: params: EVAL: true vignette: > - %\VignetteIndexEntry{PPC Calibration - Calibration of Bayesian models with binary outcomes} + %\VignetteIndexEntry{Calibration of Bayesian models with binary outcomes} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- From d5dc0674c1b9c85545e1cddbadf09e84c602193e Mon Sep 17 00:00:00 2001 From: jgabry Date: Mon, 24 Aug 2026 11:36:03 -0600 Subject: [PATCH 7/7] release notes --- NEWS.md | 99 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 38 deletions(-) diff --git a/NEWS.md b/NEWS.md index c306f31b..1760b6f7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,41 +1,64 @@ -# bayesplot (development version) - -* Fixed bug in `mcmc_pairs()` (introduced in bayesplot 1.10.0) where some panels' divergences/treedepth hits were missing(#555) -* Unified density-control argument defaults (`bw`, `adjust`, `kernel`, `n_dens`) to use `NULL` with internal fallbacks. No change in user-facing behavior. -* `prepare_mcmc_array()` now warns instead of erroring on `NA`s in the input. -* Fixed `validate_chain_list()` colnames check to compare all chains, not just the first two. -* Added test verifying `legend_move("none")` behaves equivalently to `legend_none()`. -* Added singleton-dimension edge-case tests for exported `_data()` functions. -* Validate empty list and zero-row matrix inputs in `nuts_params.list()`. -* Validate user-provided `pit` values in `ppc_loo_pit_data()` and `ppc_loo_pit_qq()`, rejecting non-numeric inputs, missing values, and values outside `[0, 1]`. -* New `show_marginal` argument to `ppd_*()` functions to show the PPD - the marginal predictive distribution by @mattansb (#425) -* `ppc_ecdf_overlay()`, `ppc_ecdf_overlay_grouped()`, and `ppd_ecdf_overlay()` now always use `geom_step()`. The `discrete` argument is deprecated. -* Fixed missing `drop = FALSE` in `nuts_params.CmdStanMCMC()`. -* Replace `apply()` with `storage.mode()` for integer-to-numeric matrix conversion in `validate_predictions()`. -* Fixed `is_chain_list()` to correctly reject empty lists instead of silently returning `TRUE`. -* Added unit tests for `mcmc_areas_ridges_data()`, `mcmc_parcoord_data()`, and `mcmc_trace_data()`. -* `mcmc_trace()` now supports highlighting a chain with lines using the `highlight` and `alpha` arguments. Previously this was only available via `mcmc_trace_highligh()` and with points instead of lines. (#552) -* Added unit tests for `ppc_error_data()` and `ppc_loo_pit_data()` covering output structure, argument handling, and edge cases. -* Added vignette sections demonstrating `*_data()` companion functions for building custom ggplot2 visualizations (#435) -* Extract `drop_singleton_values()` helper in `mcmc_nuts_treedepth()` to remove duplicated filtering logic. -* Eliminate redundant data processing in `mcmc_areas_data()` by reusing the prepared MCMC array for both interval and density computation. -* Validate equal chain lengths in `validate_df_with_chain()`, reject missing chain labels, and renumber data-frame chain labels internally when converting to arrays. -* Added unit tests for previously untested edge cases in `param_range()`, `param_glue()`, and `tidyselect_parameters()` (no-match, partial-match, and negation behavior). -* Bumped minimum version for `rstantools` from `>= 1.5.0` to `>= 2.0.0` . -* Use `rlang::warn()` and `rlang::inform()` for selected PPC user messages instead of base `warning()` and `message()`. -* Standardize input validation errors in `ppc_km_overlay()` and interpolation helpers to use `rlang::abort()` for consistent error handling. -* Fix assignment-in-call bug in `mcmc_rank_ecdf()` (#). -* Replaced deprecated `dplyr` and `tidyselect` functions (`top_n`, `one_of`, `group_indices`) with their modern equivalents to ensure future compatibility. (#431) -* Documentation added for all exported `*_data()` functions (#209) -* Improved documentation for `binwidth`, `bins`, and `breaks` arguments to clarify they are passed to `ggplot2::geom_area()` and `ggdist::stat_dots()` in addition to `ggplot2::geom_histogram()` -* Improved documentation for `freq` argument to clarify it applies to frequency polygons in addition to histograms -* Fixed test in `test-ppc-distributions.R` that incorrectly used `ppc_dens()` instead of `ppd_dens()` when testing PPD functions -* New functions `mcmc_dots` and `mcmc_dots_by_chain` for dot plots of MCMC draws by @behramulukir (#402) -* Default to `quantiles=100` for all dot plots by @behramulukir (#402) -* Use `"neff_ratio"` consistently in diagnostic color scale helpers to avoid relying on partial matching of `"neff"`. -* Replace `expand = c(mult, add)` with `ggplot2::expansion()` helper in scale functions for consistency with ggplot2 >= 3.3.0 style. -* Replace uses of `geom_bar(stat = "identity")` with the more idiomatic ggplot2 form `geom_col()` -* New function `ppc_rootogram_grouped` for grouped rootogram plots by @behramulukir and @jgabry (#419) +# bayesplot 1.16.0 + +### New plots and plotting capabilities + +* `mcmc_dots()` and `mcmc_dots_by_chain()` are new quantile dot plots for + MCMC draws. All dot-plot functions now default to `quantiles = 100`. + @behramulukir (#402) +* `ppc_calibration()` and the new grouped, overlay, LOO, and `_data()` + variants provide calibration plots for models with binary outcomes. + @TeemuSailynoja and @florence-bockting (#352) +* `ppc_loo_pit_ecdf()`, `ppc_pit_ecdf()`, and + `ppc_pit_ecdf_grouped()` gain `method = "correlated"` for + dependence-aware uniformity tests and visualization of influential ECDF + regions. The existing `"independent"` method remains the default but is + superseded. @florence-bockting (#428) +* `ppc_rootogram_grouped()` is a new grouped and faceted rootogram supporting + all existing rootogram styles. @behramulukir and @jgabry (#419) +* `ppd_*()` distribution and test-statistic functions gain `show_marginal` for + adding the marginal predictive distribution; defaults are unchanged. + @mattansb (#425) + +### Other improvements and behavior changes + +* `mcmc_areas()`, `mcmc_areas_ridges()`, `mcmc_dens()`, + `mcmc_dens_chains()`, and `mcmc_dens_overlay()` gain a `bounds` argument + for bounded density estimation, as do their `_data()` companions and the + PPC and PPD density functions. @VisruthSK (#317) +* `mcmc_trace()` now officially supports the `highlight` and `alpha` + arguments for highlighting a chain with lines. @jgabry (#552) +* `ppc_*()` and `ppd_*()` functions now accept `posterior::draws` objects for + predictive draws. @ishaan-arora-1 (#542) +* `ppc_ecdf_overlay()`, `ppc_ecdf_overlay_grouped()`, and + `ppd_ecdf_overlay()` now always draw ECDFs as step functions; their + `discrete` argument is deprecated. @utkarshpawade (#259) +* `prepare_mcmc_array()` now warns rather than errors when draws contain + `NA`s, allowing MCMC plots of ragged arrays padded with missing values. It + also rejects unequal chain lengths and mismatched parameter names that + could previously corrupt or misalign draws. @utkarshpawade + (#250, #498, #528) + +### Bug fixes and compatibility + +* Improved compatibility with ggplot2 4.0 and current dplyr and tidyselect + releases, eliminating deprecation and small-group warnings and fixing + linetype legends. @jgabry, @BjarkeHautop, @ishaan-arora-1, and + @utkarshpawade (#410, #412, #414, #442, #446, #448, #450, #458, #468) +* `mcmc_pairs()` now correctly marks divergences and maximum-treedepth hits in + every panel; a regression introduced in bayesplot 1.10.0 could omit or + misassign them. @jgabry (#555) +* `nuts_params()` preserves array dimensions when a single parameter is + selected from a `CmdStanMCMC` object and gives clear errors for empty or + zero-row list inputs. @utkarshpawade (#530, #534) +* `ppc_loo_pit_data()` now validates user-supplied `pit` values at the entry + point and rejects nonnumeric, missing, or out-of-range inputs. + @utkarshpawade (#503) + + +There were many other non user-facing changes, including internal refactoring +and improved test coverage. The full changelog can be found at: +https://github.com/stan-dev/bayesplot/compare/v1.15.0...v1.16.0 + # bayesplot 1.15.0