dmix {bisque}R Documentation

Evaluate a mixture density


Evaluates mixture densities of the form

f(x) = ∑_{j=1}^k f(x|θ^{(k)}) w_k

where the w_k are (possibly negative) weights that sum to 1 and f(x|θ^{(k)}) are densities that are specified via parameters θ^{(k)}, which are passed in the function argument params. A unique feature of this function is that it is able to evaluate mixture densities in which some of the mixture weights w_k are negative.


dmix(x, f, params, wts, log = FALSE, errorNodesWts = NULL, ...)



Points at which the mixture should be evaluated. If the density is multivariate, then each row of x should contain one set of points at which the mixture should be evaluated.


Density used in the mixture. The function should be defined so it is can be called via f(x, params, log, ...). The density f is evaluated at the points in x using one set of parameters params, i.e., for some specific θ^{(k)}. if log==TRUE, then ln(f) is returned. Additional parameters may be passed to f via ....


Matrix in which each row contains parameters that define f. The number of rows in params should match the number of mixture components k.


vector of weights for each mixture component


TRUE to return the log of the mixture density


list with elements inds and weights that point out which params get used to compute an approximation of the quadrature error.


additional arguments to be passed to f


# evaluate mixture density at these locations
x = seq(0, 1, length.out = 100)

# density will be a mixture of beta distributions
f = function(x, theta, log = FALSE) {
  dbeta(x, shape1 = theta[1], shape2 = theta[2], log = log)

# beta parameters are randomly assigned
params = matrix(exp(2*runif(10)), ncol=2)

# mixture components are equally weighted
wts = rep(1/nrow(params), nrow(params))

# evaluate mixture density
fmix = dmix(x = x, f = f, params = params, wts = wts)

# plot mixture density
plot(x, fmix, type='l', ylab = expression(f(x)), 
     ylim = c(0, 4))

# plot component densities
for(i in 1:length(wts)){
  curve(f(x, params[i,]), col = 2, add = TRUE)

[Package bisque version 1.0.2 Index]