## ------------------------------------------------------------------------
library(bridgesampling)
### generate data ###
set.seed(12345)
mu <- 0
tau2 <- 0.5
sigma2 <- 1
n <- 20
theta <- rnorm(n, mu, sqrt(tau2))
y <- rnorm(n, theta, sqrt(sigma2))
## ----eval=FALSE----------------------------------------------------------
# ### set prior parameters ###
# mu0 <- 0
# tau20 <- 1
# alpha <- 1
# beta <- 1
## ---- eval=FALSE---------------------------------------------------------
# library(R2jags)
#
# ### functions to get posterior samples ###
#
# # H0: mu = 0
# getSamplesModelH0 <- function(data, niter = 52000, nburnin = 2000, nchains = 3) {
#
# model <- "
# model {
# for (i in 1:n) {
# theta[i] ~ dnorm(0, invTau2)
# y[i] ~ dnorm(theta[i], 1/sigma2)
# }
# invTau2 ~ dgamma(alpha, beta)
# tau2 <- 1/invTau2
# }"
#
# s <- jags(data, parameters.to.save = c("theta", "invTau2"),
# model.file = textConnection(model),
# n.chains = nchains, n.iter = niter,
# n.burnin = nburnin, n.thin = 1)
#
# return(s)
#
# }
#
# # H1: mu != 0
# getSamplesModelH1 <- function(data, niter = 52000, nburnin = 2000,
# nchains = 3) {
#
# model <- "
# model {
# for (i in 1:n) {
# theta[i] ~ dnorm(mu, invTau2)
# y[i] ~ dnorm(theta[i], 1/sigma2)
# }
# mu ~ dnorm(mu0, 1/tau20)
# invTau2 ~ dgamma(alpha, beta)
# tau2 <- 1/invTau2
# }"
#
# s <- jags(data, parameters.to.save = c("theta", "mu", "invTau2"),
# model.file = textConnection(model),
# n.chains = nchains, n.iter = niter,
# n.burnin = nburnin, n.thin = 1)
#
# return(s)
#
# }
#
# ### get posterior samples ###
#
# # create data lists for JAGS
# data_H0 <- list(y = y, n = length(y), alpha = alpha, beta = beta, sigma2 = sigma2)
# data_H1 <- list(y = y, n = length(y), mu0 = mu0, tau20 = tau20, alpha = alpha,
# beta = beta, sigma2 = sigma2)
#
# # fit models
# samples_H0 <- getSamplesModelH0(data_H0)
# samples_H1 <- getSamplesModelH1(data_H1)
#
## ----eval=FALSE----------------------------------------------------------
# ### functions for evaluating the unnormalized posteriors on log scale ###
#
# log_posterior_H0 <- function(samples.row, data) {
#
# mu <- 0
# invTau2 <- samples.row[[ "invTau2" ]]
# theta <- samples.row[ paste0("theta[", seq_along(data$y), "]") ]
#
# sum(dnorm(data$y, theta, data$sigma2, log = TRUE)) +
# sum(dnorm(theta, mu, 1/sqrt(invTau2), log = TRUE)) +
# dgamma(invTau2, data$alpha, data$beta, log = TRUE)
#
# }
#
# log_posterior_H1 <- function(samples.row, data) {
#
# mu <- samples.row[[ "mu" ]]
# invTau2 <- samples.row[[ "invTau2" ]]
# theta <- samples.row[ paste0("theta[", seq_along(data$y), "]") ]
#
# sum(dnorm(data$y, theta, data$sigma2, log = TRUE)) +
# sum(dnorm(theta, mu, 1/sqrt(invTau2), log = TRUE)) +
# dnorm(mu, data$mu0, sqrt(data$tau20), log = TRUE) +
# dgamma(invTau2, data$alpha, data$beta, log = TRUE)
#
# }
#
## ----eval=FALSE----------------------------------------------------------
# # specify parameter bounds H0
# cn <- colnames(samples_H0$BUGSoutput$sims.matrix)
# cn <- cn[cn != "deviance"]
# lb_H0 <- rep(-Inf, length(cn))
# ub_H0 <- rep(Inf, length(cn))
# names(lb_H0) <- names(ub_H0) <- cn
# lb_H0[[ "invTau2" ]] <- 0
#
# # specify parameter bounds H1
# cn <- colnames(samples_H1$BUGSoutput$sims.matrix)
# cn <- cn[cn != "deviance"]
# lb_H1 <- rep(-Inf, length(cn))
# ub_H1 <- rep(Inf, length(cn))
# names(lb_H1) <- names(ub_H1) <- cn
# lb_H1[[ "invTau2" ]] <- 0
## ---- echo=FALSE---------------------------------------------------------
load(system.file("extdata/", "vignette_example_jags.RData",
package = "bridgesampling"))
## ----eval=FALSE----------------------------------------------------------
# # compute log marginal likelihood via bridge sampling for H0
# H0.bridge <- bridge_sampler(samples = samples_H0, data = data_H0,
# log_posterior = log_posterior_H0, lb = lb_H0,
# ub = ub_H0, silent = TRUE)
#
# # compute log marginal likelihood via bridge sampling for H1
# H1.bridge <- bridge_sampler(samples = samples_H1, data = data_H1,
# log_posterior = log_posterior_H1, lb = lb_H1,
# ub = ub_H1, silent = TRUE)
## ------------------------------------------------------------------------
print(H0.bridge)
print(H1.bridge)
## ----eval=FALSE----------------------------------------------------------
# # compute percentage errors
# H0.error <- error_measures(H0.bridge)$percentage
# H1.error <- error_measures(H1.bridge)$percentage
## ------------------------------------------------------------------------
print(H0.error)
print(H1.error)
## ------------------------------------------------------------------------
# compute Bayes factor
BF01 <- bf(H0.bridge, H1.bridge)
print(BF01)
## ------------------------------------------------------------------------
# compute posterior model probabilities (assuming equal prior model probabilities)
post1 <- post_prob(H0.bridge, H1.bridge)
print(post1)
## ------------------------------------------------------------------------
# compute posterior model probabilities (using user-specified prior model probabilities)
post2 <- post_prob(H0.bridge, H1.bridge, prior_prob = c(.6, .4))
print(post2)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.