Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# bayesplot (development version)

* 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.
Expand Down
23 changes: 15 additions & 8 deletions R/mcmc-intervals.R
Original file line number Diff line number Diff line change
Expand Up @@ -599,13 +599,20 @@ mcmc_intervals_data <- function(x,
prob <- probs[1]
prob_outer <- probs[2]

x <- prepare_mcmc_array(x, pars, regex_pars, transformations)
x <- merge_chains(x)

data_long <- melt_mcmc(x) %>%
data_long <- melt_mcmc(
merge_chains(prepare_mcmc_array(x, pars, regex_pars, transformations))
) %>%
dplyr::as_tibble() %>%
rlang::set_names(tolower)

compute_intervals(data_long, prob, prob_outer, point_est, rhat)
}

# Internal helper shared by mcmc_intervals_data() and mcmc_areas_data()
compute_intervals <- function(data_long, prob, prob_outer,
point_est = c("median", "mean", "none"),
rhat = numeric()) {

probs <- c(0.5 - prob_outer / 2,
0.5 - prob / 2,
0.5 + prob / 2,
Expand Down Expand Up @@ -691,17 +698,17 @@ mcmc_areas_data <- function(x,
point_est <- match.arg(point_est)
temp_point_est <- if (point_est == "none") "median" else point_est

intervals <- mcmc_intervals_data(x, pars, regex_pars, transformations,
prob = probs[1], prob_outer = probs[2],
point_est = temp_point_est, rhat = rhat)

x <- prepare_mcmc_array(x, pars, regex_pars, transformations)
x <- merge_chains(x)

data_long <- melt_mcmc(x) %>%
dplyr::as_tibble() %>%
rlang::set_names(tolower)

intervals <- compute_intervals(data_long, prob = probs[1],
prob_outer = probs[2],
point_est = temp_point_est, rhat = rhat)

# Compute the density intervals
data_inner <- data_long %>%
compute_column_density(
Expand Down
Loading