Last chance! 50% off unlimited learning
Sale ends in
marginalLikelihood(sampler, numSamples = 1000, method = "Chib", ...)
getSample
The harmonic mean approximation, is implemented only for comparison. Note that the method is numerically unrealiable and usually should not be used.
The third method is simply sampling from the prior. While in principle unbiased, it will only converge for a large number of samples, and is therefore numerically inefficient.
WAIC
, DIC
, MAP
# Harmonic mean works OK for a low-dim case with
likelihood <- function(x) sum(dnorm(x, log = TRUE))
prior = createUniformPrior(lower = rep(-1,2), upper = rep(1,2))
bayesianSetup <- createBayesianSetup(likelihood = likelihood, prior = prior)
out = runMCMC(bayesianSetup = bayesianSetup, settings = list(iterations = 5000))
plot(out)
marginalLikelihood(out, numSamples = 500)[[1]]
marginalLikelihood(out, method = "HM", numSamples = 500)[[1]]
marginalLikelihood(out, method = "Prior", numSamples = 500)[[1]]
# True marginal likelihood (brute force approximation)
marginalLikelihood(out, method = "Prior", numSamples = 10000)[[1]]
# Harmonic mean goes totally wrong for higher dimendsions - wide prior.
# Could also be a problem of numeric stability of the implementation
likelihood <- function(x) sum(dnorm(x, log = TRUE))
prior = createUniformPrior(lower = rep(-10,3), upper = rep(10,3))
bayesianSetup <- createBayesianSetup(likelihood = likelihood, prior = prior)
out = runMCMC(bayesianSetup = bayesianSetup, settings = list(iterations = 5000))
plot(out)
marginalLikelihood(out, numSamples = 500)[[1]]
marginalLikelihood(out, method = "HM", numSamples = 500)[[1]]
marginalLikelihood(out, method = "Prior", numSamples = 500)[[1]]
# True marginal likelihood (brute force approximation)
marginalLikelihood(out, method = "Prior", numSamples = 10000)[[1]]
Run the code above in your browser using DataLab