#' Contourplot for bivariate angular mixture model densities
#' @param model bivariate angular model whose mixture is of interest. Must be one of
#' "vmsin", "vmcos" and "wnorm2".
#' @param kappa1,kappa2,kappa3,mu1,mu2,pmix model parameters and mixing
#' proportions. See the respective mixture model densities (\link{dvmsinmix}, \link{dvmcosmix},
#' \link{dwnorm2mix}) for more details.
#' @param levels numeric vector of levels at which to draw contour lines;
#' passed to the \link{contour} function in graphics.
#' @param nlevels number of contour levels desired \strong{if} levels is not supplied;
#' passed to the \link{contour} function in graphics.
#' @param xpoints Points on the first (x-) coordinate where the density is to be evaluated.
#' Default to seq(0, 2*pi, length.out=100).
#' @param ypoints Points on the first (x-) coordinate where the density is to be evaluated.
#' Default to seq(0, 2*pi, length.out=100).
#' @param ... additional model specific argment
#' @param xlab,ylab,col,lty,main graphical parameters passed to \link{contour}.
#' @examples
#' contour_model('vmsin', 1, 1, 1.5, pi, pi)
#' contour_model('vmcos', 1, 1, 1.5, pi, pi)
#'
#'
#' @export
contour_model <- function(model = "vmsin", kappa1, kappa2, kappa3, mu1, mu2,
pmix = rep(1/length(kappa1), length(kappa1)),
xpoints = seq(0, 2*pi, length.out = 100),
ypoints = seq(0, 2*pi, length.out = 100),
levels, nlevels = 20,
xlab="x", ylab="y", col="black",
lty=1, main, ...)
{
if (!model %in% c("vmsin", "vmcos", "wnorm2"))
stop("model must be one of \"vmsin\", \"vmcos\" or \"wnorm2\"")
if (missing(levels)) {
levels <- exp(seq(-20,2, length.out = nlevels))
}
if (missing(main))
main <- paste("Contour plot for", length(kappa1), "component",
model, "mixture density")
coords <- as.matrix(expand.grid(xpoints, ypoints))
inargs <- list(x = coords, kappa1 = kappa1, kappa2 = kappa2, kappa3 = kappa3,
mu1 = mu1, mu2 = mu2, pmix = pmix, ...)
dens <- do.call(paste0("d", model, "mix"), inargs)
contour(xpoints, ypoints, matrix(dens, nrow=length(xpoints)), levels=levels,
xlab=xlab, ylab=ylab, col=col, lty=lty, main=main)
}
#' Surface for bivariate angular mixture model densities
#' @inheritParams contour_model
#' @param kappa1,kappa2,kappa3,mu1,mu2,pmix model parameters and mixing
#' proportions. See the respective mixture model densities (\link{dvmsinmix}, \link{dvmcosmix},
#' \link{dwnorm2mix}) for more details.
#' @param log.density logical. Should log density be used for the plot?
#' @param xlab,ylab,zlab,main graphical parameters passed to \code{lattice::wireframe}
#' @param ... additional arguments passed to \code{lattice::wireframe}
#' @examples
#' surface_model('vmsin', 1, 1, 1.5, pi, pi)
#' surface_model('vmcos', 1, 1, 1.5, pi, pi)
#'
#' @export
surface_model <- function(model = "vmsin", kappa1, kappa2, kappa3, mu1, mu2,
pmix = rep(1/length(kappa1), length(kappa1)),
xpoints = seq(0, 2*pi, length.out = 30),
ypoints = seq(0, 2*pi, length.out = 30),
log.density = FALSE, xlab="x", ylab="y",
zlab = ifelse(log.density, "Log Density", "Density"),
main, ...)
{
if (!model %in% c("vmsin", "vmcos", "wnorm2"))
stop("model must be one of \"vmsin\", \"vmcos\" or \"wnorm2\"")
if (missing(main))
main <- paste("Density surface for", length(kappa1), "component",
model, "mixture density")
coords <- as.matrix(expand.grid(xpoints, ypoints))
inargs <- list(x = coords, kappa1 = kappa1, kappa2 = kappa2,
kappa3 = kappa3,
mu1 = mu1, mu2 = mu2, pmix = pmix)
dens <- do.call(paste0("d", model, "mix"), inargs)
denmat <- matrix(dens, nrow = length(xpoints))
if(log.density) {
denmat <- log(denmat)
}
print(basic_surfaceplot(xpoints = xpoints, ypoints = ypoints,
denmat = denmat, xlab = xlab, ylab = ylab,
main = main, zlab = zlab, ...))
# nrden <- nrow(denmat)
# ncden <- ncol(denmat)
#
# denfacet <- denmat[-1, -1] + denmat[-1, -ncden] +
# denmat[-nrden, -1] + denmat[-nrden, -ncden]
#
# # Create a function interpolating colors in the range of specified colors
# jet.colors <- grDevices::colorRampPalette( c("blue", "green",
# "yellow", "orange", "red") )
# # Generate the desired number of colors from this palette
# nbcol <- 500
# color <- jet.colors(nbcol)
#
# denfacet <- denmat[-1, -1] + denmat[-1, -ncden] +
# denmat[-nrden, -1] + denmat[-nrden, -ncden]
# # Recode facet z-values into color indices
# facetcol <- cut(denfacet, nbcol)
#
# persp(x=xpoints, y=ypoints, z=denmat, theta = theta, phi = phi,
# expand = expand, col = color[facetcol],
# ltheta = 120, shade = shade, ticktype = "detailed",
# xlab = xlab, ylab = ylab, zlab = zlab,
# main = main, ...) -> res
# wireframe(x=denmat~x*y,
# data=data.frame(x=xpoints,
# y=rep(ypoints, each=length(xpoints)),
# denmat=denmat),
# xlab=xlab, ylab=ylab, zlab=zlab,
# main=main, colorkey=colorkey, outerbox=FALSE,
# par.settings=list(axis.line=list(col = 'transparent')),
# neval=length(xpoints), aspect = c(61/87, 0.4),
# drape=TRUE, light.source=c(10,0,10),
# col.regions=colorRampPalette(c("blue", "green",
# "yellow", "orange",
# "red"))(100),
# scales=list(arrows=FALSE, col=1)
# )
# do.call(wireframe, inargs)
# inargs$outerbox <- FALSE
# inargs$par.settings <- list(axis.line = list(col = 'transparent'))
# if (is.null(inargs$xlab)) inargs$xlab <- expression(Theta)
# if (is.null(inargs$ylab)) inargs$ylab <- expression(Phi)
# if (is.null(inargs$colorkey)) inargs$colorkey <- FALSE
# if (is.null(inargs$main)) inargs$main <- list(maintext, font=2, cex=1.5)
# if (is.null(inargs$neval)) inargs$neval <- 100
# if (is.null(inargs$aspect)) inargs$aspect <- c(61/87, 0.4)
# if (is.null(inargs$zlab)) inargs$zlab <- list("Density", rot=90)
# if (is.null(inargs$screen)) inargs$screen <- list(z=45,x=-45)
# if (is.null(inargs$colorkey)) inargs$colorkey <- TRUE
# if (is.null(inargs$scales))
# inargs$scales <- list(
# arrows = FALSE,
# x=list(at = c(-pi, -pi/2, 0, pi, pi/2),
# labels = c(expression(-pi), expression(-pi/2), 0,
# expression(pi), expression(pi/2))),
# y=list(at = c(-pi, -pi/2, 0, pi, pi/2),
# labels = c(expression(-pi), expression(-pi/2), 0,
# expression(pi), expression(pi/2))),
# col = "black", font = 1, tck=1)
# if (is.null(inargs$drape)) inargs$drape <- TRUE
# if (is.null(inargs$light.source))
# inargs$light.source <- c(10,0,10)
# if (is.null(inargs$col.regions))
# inargs$col.regions <- colorRampPalette(c("blue", "green",
# "yellow", "orange", "red"))(100)
# if (is.null(inargs$par.settings))
# inargs$par.settings <- list(top.padding = 0,
# bottom.padding = 0,
# left.padding=0,
# right.padding=0)
#
# inargs$par <- c(k1,k2,k3,0,0)
#
#
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.