createPrior {BayesianTools} | R Documentation |
Creates a standardized prior class
Description
Creates a standardized prior class
Usage
createPrior(
density = NULL,
sampler = NULL,
lower = NULL,
upper = NULL,
best = NULL
)
Arguments
density |
Prior density |
sampler |
Sampling function for density (optional) |
lower |
vector with lower bounds of parameters |
upper |
vector with upper bounds of parameter |
best |
vector with "best" parameter values |
Details
This is the general prior generator. It is highly recommended to not only implement the density, but also the sampler function. If this is not done, the user will have to provide explicit starting values for many of the MCMC samplers. Note the existing, more specialized prior function. If your prior can be created by those, they are preferred. Note also that priors can be created from an existing MCMC output from BT, or another MCMC sample, via createPriorDensity
.
Note
min and max truncate, but not re-normalize the prior density (so, if a pdf that integrated to one is truncated, the integral will in general be smaller than one). For MCMC sampling, this doesn't make a difference, but if absolute values of the prior density are a concern, one should provide a truncated density function for the prior.
Author(s)
Florian Hartig
See Also
createPriorDensity
createBetaPrior
createUniformPrior
createTruncatedNormalPrior
createBayesianSetup
Examples
# the BT package includes a number of convenience functions to specify
# prior distributions, including createUniformPrior, createTruncatedNormalPrior
# etc. If you want to specify a prior that corresponds to one of these
# distributions, you should use these functions, e.g.:
prior <- createUniformPrior(lower = c(0,0), upper = c(0.4,5))
prior$density(c(2, 3)) # outside of limits -> -Inf
prior$density(c(0.2, 2)) # within limits, -0.6931472
# All default priors include a sampling function, i.e. you can create
# samples from the prior via
prior$sampler()
# [1] 0.2291413 4.5410389
# if you want to specify a prior that does not have a default function,
# you should use the createPrior function, which expects a density and
# optionally a sampler function:
density = function(par){
d1 = dunif(par[1], -2,6, log =TRUE)
d2 = dnorm(par[2], mean= 2, sd = 3, log =TRUE)
return(d1 + d2)
}
sampler = function(n=1){
d1 = runif(n, -2,6)
d2 = rnorm(n, mean= 2, sd = 3)
return(cbind(d1,d2))
}
prior <- createPrior(density = density, sampler = sampler,
lower = c(-10,-20), upper = c(10,20), best = NULL)
# note that the createPrior supports additional truncation
# To use a prior in an MCMC, include it in a BayesianSetup
set.seed(123)
ll <- function(x) sum(dnorm(x, log = TRUE)) # multivariate normal ll
bayesianSetup <- createBayesianSetup(likelihood = ll, prior = prior)
settings = list(iterations = 100)
out <- runMCMC(bayesianSetup = bayesianSetup, settings = settings)
# use createPriorDensity to create a new (estimated) prior from MCMC output
newPrior = createPriorDensity(out, method = "multivariate",
eps = 1e-10, lower = c(-10,-20),
upper = c(10,20), best = NULL, scaling = 0.5)