Learn R Programming

BAMBI (version 2.3.5)

rvmsin: The bivariate von Mises sine model

Description

The bivariate von Mises sine model

Usage

rvmsin(
  n,
  kappa1 = 1,
  kappa2 = 1,
  kappa3 = 0,
  mu1 = 0,
  mu2 = 0,
  method = "naive"
)

dvmsin(x, kappa1 = 1, kappa2 = 1, kappa3 = 0, mu1 = 0, mu2 = 0, log = FALSE)

Value

dvmsin gives the density and rvmsin generates random deviates.

Arguments

n

number of observations. Ignored if at least one of the other parameters have length k > 1, in which case, all the parameters are recycled to length k to produce k random variates.

kappa1, kappa2, kappa3

vectors of concentration parameters; kappa1, kappa2 > 0.

mu1, mu2

vectors of mean parameters.

method

Rejection sampling method to be used. Available choices are "naive" (default) or "vmprop". See details.

x

bivariate vector or a two-column matrix with each row being a bivariate vector of angles (in radians) where the densities are to be evaluated.

log

logical. Should the log density be returned instead?

Details

The bivariate von Mises sine model density at the point \(x = (x_1, x_2)\) is given by $$f(x) = C_s (\kappa_1, \kappa_2, \kappa_3) \exp(\kappa_1 \cos(T_1) + \kappa_2 \cos(T_2) + \kappa_3 \sin(T_1) \sin(T_2))$$ where $$T_1 = x_1 - \mu_1; T_2 = x_2 - \mu_2$$ and \(C_s (\kappa_1, \kappa_2, \kappa_3)\) denotes the normalizing constant for the sine model.

Two different rejection sampling methods are implemented for random generation. If method = "vmprop", then first the y-marginal is drawn from the associated marginal density, and then x is generated from the conditional distributio of x given y. The marginal generation of y is implemented in a rejection sampling scheme with proposal being either von Mises (if the target marginal density is unimodal), or a mixture of von Mises (if bimodal), with optimally chosen concentration. This the method suggested in Mardia et al. (2007). On the other hand, when method = "naive" (default) a (naive) bivariate rejection sampling scheme with (bivariate) uniform propsoal is used.

Note that although method = "vmprop" may provide better efficiency when the density is highly concentrated, it does have an (often substantial) overhead due to the optimziation step required to find a reasonable proposal concentration parameter. This can compensate the efficiency gains of this method, especially when n is not large.

Examples

Run this code
kappa1 <- c(1, 2, 3)
kappa2 <- c(1, 6, 5)
kappa3 <- c(0, 1, 2)
mu1 <- c(1, 2, 5)
mu2 <- c(0, 1, 3)
x <- diag(2, 2)
n <- 10

# when x is a bivariate vector and parameters are all scalars,
# dvmsin returns single density
dvmsin(x[1, ], kappa1[1], kappa2[1], kappa3[1], mu1[1], mu2[1])

# when x is a two column matrix and parameters are all scalars,
# dmvsin returns a vector of densities calculated at the rows of
# x with the same parameters
dvmsin(x, kappa1[1], kappa2[1], kappa3[1], mu1[1], mu2[1])

# if x is a bivariate vector and at least one of the parameters is
# a vector, all parameters are recycled to the same length, and
# dvmsin returns a vector of with ith element being the density
# evaluated at x with parameter values kappa1[i], kappa2[i],
# kappa3[i], mu1[i] and mu2[i]
dvmsin(x[1, ], kappa1, kappa2, kappa3, mu1, mu2)

# if x is a two column matrix and at least one of the parameters is
# a vector, rows of x and the parameters are recycled to the same
# length, and dvmsin returns a vector of with ith element being the
# density evaluated at ith row of x with parameter values kappa1[i],
# kappa2[i], # kappa3[i], mu1[i] and mu2[i]
dvmsin(x[1, ], kappa1, kappa2, kappa3, mu1, mu2)

# when parameters are all scalars, number of observations generated
# by rvmsin is n
rvmsin(n, kappa1[1], kappa2[1], kappa3[1], mu1[1], mu2[1])

# when at least one of the parameters is a vector, all parameters are
# recycled to the same length, n is ignored, and the number of
# observations generated by rvmsin is the same as the length of the
# recycled vectors
rvmsin(n, kappa1, kappa2, kappa3, mu1, mu2)

Run the code above in your browser using DataLab