emix {bisque} | R Documentation |
Approximates expectations of the form
E[h(θ)] = \int h(θ) f(θ) dθ
using a weighted mixture
E[h(θ)] \approx ∑_{j=1}^k h(θ^{(k)}) w_k
emix(h, params, wts, ncores = 1, errorNodesWts = NULL, ...)
h |
Function for which the expectation should be taken. The function
should be defined so it is can be called via |
params |
Matrix in which each row contains parameters at which
h should be evaluated. The number of rows in |
wts |
vector of weights for each mixture component |
ncores |
number of cores over which to evaluate mixture. this function assumes a parallel backend is already registered. |
errorNodesWts |
list with elements |
... |
additional arguments to be passed to |
# density will be a mixture of betas params = matrix(exp(2*runif(10)), ncol=2) # mixture components are equally weighted wts = rep(1/nrow(params), nrow(params)) # compute mean of distribution by cycling over each mixture component h = function(p) { p[1] / sum(p) } # compute mixture mean mean.mix = emix(h, params, wts) # (comparison) Monte Carlo estimate of mixture mean nsamples = 1e4 component = sample(x = 1:length(wts), size = nsamples, prob = wts, replace = TRUE) x = sapply(component, function(cmp) { rbeta(n = 1, shape1 = params[cmp, 1], shape2 = params[cmp, 2]) }) mean.mix.mc = mean(x) # compare estimates c(emix = mean.mix, MC = mean.mix.mc)