## ----synthetic-conjugate-prior------------------------------------------------
set.seed(20261022)
y <- stats::rnorm(18, mean = 0.35, sd = 1)
prior_sd <- c(0.10, 0.25, 0.50, 1, 2.5, 5)
posterior_sd <- sqrt(1 / (length(y) + 1 / prior_sd^2))
posterior_mean <- sum(y) / (length(y) + 1 / prior_sd^2)
q <- stats::qnorm(0.975)
tab <- data.frame(prior_sd = prior_sd, posterior_mean = posterior_mean,
                  lower = posterior_mean - q * posterior_sd,
                  upper = posterior_mean + q * posterior_sd)
stopifnot(all(tab$lower <= tab$posterior_mean),
          all(tab$posterior_mean <= tab$upper))
tab

## ----prior-sensitivity-forest, fig.width=8, fig.height=4, fig.cap="Synthetic normal-normal analytical posterior means and 95% equal-tailed credible intervals at declared prior scales. Not a posterior computation for the gp3bayes multilevel mediation API."----
graphics::plot(tab$posterior_mean, seq_along(tab$prior_sd),
  xlim = range(c(tab$lower, tab$upper)), ylim = c(0.5, nrow(tab) + 0.5),
  pch = 19, col = "#24577B", yaxt = "n",
  xlab = "Conditional posterior location", ylab = "Prior SD",
  main = "Declared prior sensitivity")
graphics::axis(2, at = seq_along(tab$prior_sd),
               labels = format(tab$prior_sd), las = 1)
graphics::segments(tab$lower, seq_along(tab$prior_sd),
                   tab$upper, seq_along(tab$prior_sd),
                   lwd = 2, col = "#567B97")
graphics::abline(v = 0, lty = 3, col = "#8E8E8E")

## ----prior-precision-figure, fig.width=8, fig.height=4, fig.cap="Exact posterior precision decomposition for the deliberately simple normal model; no uncertainty about the residual variance is propagated."----
prior_precision <- 1 / prior_sd^2
posterior_precision <- length(y) + prior_precision
graphics::plot(log10(prior_sd), prior_precision / posterior_precision,
  type = "b", pch = 19, col = "#B05E43",
  xaxt = "n", ylim = c(0, 1), xlab = "Prior standard deviation",
  ylab = "Prior fraction of total precision",
  main = "Independent information versus prior concentration")
graphics::axis(1, at = log10(prior_sd), labels = prior_sd)

