Nothing
#' Plot a Beta-Binomial Bayesian Model
#'
#' Consider a Beta-Binomial Bayesian model for parameter \eqn{\pi} with
#' a Beta(alpha, beta) prior on \eqn{\pi} and Binomial likelihood with n trials
#' and y successes. Given information on the prior (alpha and data) and data (y and n),
#' this function produces a plot of any combination of the corresponding prior pdf,
#' scaled likelihood function, and posterior pdf. All three are included by default.
#'
#' @param alpha,beta positive shape parameters of the prior Beta model
#' @param y observed number of successes
#' @param n observed number of trials
#' @param prior a logical value indicating whether the prior model should be plotted
#' @param likelihood a logical value indicating whether the scaled likelihood should be plotted
#' @param posterior a logical value indicating whether posterior model should be plotted
#'
#' @return a ggplot
#' @export
#' @import ggplot2
#' @importFrom stats dbeta dbinom integrate
#' @examples
#'
#' plot_beta_binomial(alpha = 1, beta = 13, y = 25, n = 50)
#' plot_beta_binomial(alpha = 1, beta = 13, y = 25, n = 50, posterior = FALSE)
#'
plot_beta_binomial <- function (alpha,
beta,
y = NULL,
n = NULL,
prior = TRUE,
likelihood = TRUE,
posterior = TRUE){
if (is.null(y) | is.null(n))
warning("To visualize the posterior,
specify data y and n")
g <- ggplot(data = data.frame(x = c(0, 1)), aes(x)) +
labs(x = expression(pi),
y = "density") +
scale_fill_manual("",
values = c(prior = "#f0e442",
`(scaled) likelihood` = "#0071b2",
posterior = "#009e74"),
breaks = c("prior",
"(scaled) likelihood",
"posterior"))
if (prior == TRUE) {
g <- g +
stat_function(fun = dbeta,
args = list(shape1 = alpha,
shape2 = beta)) +
stat_function(fun = dbeta,
args = list(shape1 = alpha,
shape2 = beta),
geom = "area",
alpha = 0.5,
aes(fill = "prior"))
}
if (!is.null(y) & !is.null(n)) {
alpha_post <- alpha + y
beta_post <- beta + n - y
y_data <- y
like_scaled <- function(x) {
like_fun <- function(x) {
dbinom(x = y_data, size = n, prob = x)
}
scale_c <- integrate(like_fun, lower = 0, upper = 1)[[1]]
like_fun(x)/scale_c
}
}
if (!is.null(y) & !is.null(n) & (likelihood != FALSE)) {
g <- g +
stat_function(fun = like_scaled) +
stat_function(fun = like_scaled,
geom = "area",
alpha = 0.5,
aes(fill = "(scaled) likelihood"))
}
if (!is.null(y) & !is.null(n) & posterior == TRUE) {
g <- g +
stat_function(fun = dbeta,
args = list(shape1 = alpha_post,
shape2 = beta_post)) +
stat_function(fun = dbeta,
args = list(shape1 = alpha_post,
shape2 = beta_post),
geom = "area", alpha = 0.5,
aes(fill = "posterior"))
}
g
} # end of function
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.