## -----------------------------------------------------------------------------
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)

