MultivariateDistribution {fMultivar}R Documentation

Multivariate Normal and Student-t Distributions

Description

A collection and description of functions to compute multivariate densities and probabilities from skew normal and skew Student-t distribution functions. Furthermore, multivariate random daviates can be generated, and for multivariate data, the parameters of the underlying distribution can be estimated by the maximum log-likelihood estimation.

The functions are:

dmvsnorm Multivariate Skew Normal Density,
pmvsnorm Multivariate Skew Normal Probability,
rmvsnorm Random Deviates from MV Skew Normal Distribution,
dmvst Multivariate Skew Student Density,
pmvst Multivariate Skew Student Probability,
rmvst Random Deviates from MV Skew Student Distribution,
mvFit Fits a MV Skew Normal or Student-t Distribution,
print S3 print method for an object of class 'fMV',
plot S3 Plot method for an object of class 'fMV',
summary S3 summary method for an object of class 'fMV'.

These functions are useful for portfolio selection and optimization if one likes to model the data by multivariate normal, skew normal, or skew Student-t distribution functions.

Usage

dmvsnorm(x, dim = 2, mu = rep(0, dim), Omega = diag(dim), alpha = rep(0, dim))
pmvsnorm(q, dim = 2, mu = rep(0, dim), Omega = diag(dim), alpha = rep(0, dim))
rmvsnorm(n, dim = 2, mu = rep(0, dim), Omega = diag(dim), alpha = rep(0, dim))

dmvst(x, dim = 2, mu = rep(0, dim), Omega = diag(dim), alpha = rep(0, dim), df = 4)
pmvst(q, dim = 2, mu = rep(0, dim), Omega = diag(dim), alpha = rep(0, dim), df = 4)
rmvst(n, dim = 2, mu = rep(0, dim), Omega = diag(dim), alpha = rep(0, dim), df = 4)

mvFit(x, method = c("snorm", "st"), fixed.df = NA, title = NULL, 
    description = NULL, trace = FALSE, ...) 

## S3 method for class 'fMV':
print(x, ...)
## S3 method for class 'fMV':
plot(x, which = "ask", ...)
## S3 method for class 'fMV':
summary(object, which = "ask", ...)

Arguments

description [mvFit] -
a character string, assigning a brief description to an "fMV" object.
dim [*mvsnorm][*mvst] -
the colum dimension of the matrix x. If x is specified as a vector, dim=1 must be set to one.
fixed.df either NA, the default, or a numeric value assigning the number of degrees of freedom to the model. In the case that fixed.df=NA the value of df will be included in the optimization process, otherwise not.
method [mvFit] -
a string value specifying the method applied in the optimizing process. This can be either method="snorm" or method="st", in the first case the parameters for a skew normal distribution will be fitted and in the second case the parameters for a skew Student-t distribution.
mu, Omega, alpha, df [*mvsnorm][*mvst] -
the model parameters:
mu a vector of mean values, one for each column,
Omega the covariance matrix,
alpha the skewness vector, and
df the number of degrees of freedom which is a measure for the fatness of the tails (excess kurtosis).
For a symmetric distribution alpha is a vector of zeros. For the normal distributions df is not used and set to infinity, Inf. Note that all columns assume the same value for df.
n [rmvsnorm][rmvst] -
number of data records to be simulated, an integer value.
object [summary] -
an object of class fMV.
title [mvFit] -
a character string, assigning a title to an "fMV" object.
trace a logical, if set to TRUE the optimization process will be traced, otherwise not. The default setting is FALSE.
which which of the five plots should be displayed? which can be either a character string, "all" (displays all plots) or "ask" (interactively asks which one to display), or a vector of 5 logical values, for those elements which are set TRUE the correponding plot will be displayed.
x, q [*mvsnorm][*mvst][mvFit] -
a numeric matrix of quantiles (returns) or any other rectangular object like a data.frame or a multivariate time series objects which can be transformed by the function as.matrix to an object of class matrix. If x is a vector, it will be transformed into a matrix object with one column.
[plot][print] -
An object of class fMV.
... optional arguments to be passed to the optimization or plotting functions.

Details

These are "easy-to-use" functions which allow quickly to simulate multivariate data sets and to fit their parameters assuming a multivariate skew normal or skew Student-t distribution. The functions make use of the contributed R packages sn and mtvnorm.

For an extended functionality in modelling multivariate skew normal and Student-t distributions we recommend to download and use the functions from the original package sn which requires also the package mtvnorm.

The algorithm for the computation of the normal and Student-t distribution functions is described by Genz (1992) and (1993), and its implementation by Hothorn, Bretz, and Genz (2001).

The parameter estimation is done by the maximum log-likelihood estimation. The algorithm and the implemantation was done by Azzalini (1985-2003).

The multivariate skew-normal distribution is discussed in detail by Azzalini and Dalla Valle (1996); the (Omega,alpha) parametrization adopted here is the one of Azzalini and Capitanio (1999).

The family of multivariate skew-t distributions is an extension of the multivariate Student's t family, via the introduction of a shape parameter which regulates skewness; for a zero shape parameter the skew Student-t distribution reduces to the usual t distribution. When df = Inf the distribution reduces to the multivariate skew-normal one.

The plot facilities have been completely reimplemented. The S3 plot method allows for selective batch and interactive plots. The argument which takes care for the desired operation.

Value

[dp]mvsnorm
[dp]mvst
return a vector of density and probability values computed from the matrix x.

mvFit
returns a S4 object class of class "fASSETS", with the following slots:

@call the matched function call.
@data the input data in form of a data.frame.
@description allows for a brief project description.
@fit the results as a list returned from the underlying fitting function.
@method the selected method to fit the distribution, either "snorm", or "st".
@model the model parameters describing the fitted parameters in form of a list, model=list(mu, Omega, alpha, df.
@title a title string.
@fit$dp a list containing the direct parameters beta, Omega, alpha. Here, beta is a matrix of regression coefficients with dim(beta)=c(nrow(X), ncol(y)), Omega is a covariance matrix of order dim, alpha is a vector of shape parameters of length dim.
@fit$se a list containing the components beta, alpha, info. Here, beta and alpha are the standard errors for the corresponding point estimates; info is the observed information matrix for the working parameter, as explained below.
@fit$optim the list returned by the optimizer optim; see the documentation of this function for explanation of its components.


print
is the S3 print method for objects of class "fMV" returned from the function mvFit. If shows a summary report of the parameter fit.
plot
is the S3 plot method for objects of class "fMV" returned from the function mvFit. Five plots are produced. The first plot produces a scatterplot and in one dimension an histogram plot with the fitted distribution superimposed. The second and third plot represent a QQ-plots of Mahalanobis distances. The first of these refers to the fitting of a multivariate normal distribution, a standard statistical procedure; the second gives the corresponding QQ-plot of suitable Mahalanobis distances for the multivariate skew-normal fit. The fourth and fivth plots are similar to the previous ones, except that PP-plots are produced. The plots can be displayed in several ways, depending an the argument which, for details we refer to the arguments list above.
summary
is the S3 summary method for objects of class "fMV" returned from the function mvFit. The summary method prints and plots in one step the results as done by the print and plot methods.

Author(s)

Torsten Hothorn for R's mvtnorm package,
Alan Ganz and Frank Bretz for the underlying Fortran Code,
Adelchi Azzalini for R's sn package,
Diethelm Wuertz for the Rmetrics port.

References

Azzalini A. (1985); A Class of Distributions Which Includes the Normal Ones, Scandinavian Journal of Statistics 12, 171–178.

Azzalini A. (1986); Further Results on a Class of Distributions Which Includes the Normal Ones, Statistica 46, 199–208.

Azzalini A., Dalla Valle A. (1996); The Multivariate Skew-normal Distribution, Biometrika 83, 715–726.

Azzalini A., Capitanio A. (1999); Statistical Applications of the Multivariate Skew-normal Distribution, Journal Roy. Statist. Soc. B61, 579–602.

Azzalini A., Capitanio A. (2003); Distributions Generated by Perturbation of Symmetry with Emphasis on a Multivariate Skew-t Distribution, Journal Roy. Statist. Soc. B65, 367–389.

Genz A., Bretz F. (1999); Numerical Computation of Multivariate t-Probabilities with Application to Power Calculation of Multiple Contrasts, Journal of Statistical Computation and Simulation 63, 361–378.

Genz A. (1992); Numerical Computation of Multivariate Normal Probabilities, Journal of Computational and Graphical Statistics 1, 141–149.

Genz A. (1993); Comparison of Methods for the Computation of Multivariate Normal Probabilities, Computing Science and Statistics 25, 400–405.

Hothorn T., Bretz F., Genz A. (2001); On Multivariate t and Gauss Probabilities in R, R News 1/2, 27–29.

Examples

## SOURCE("fMultivar.7B-MultivariateDistribution")

## rmvst - 
   par(mfcol = c(3, 1), cex = 0.7)
   r1 = rmvst(200, dim = 1)
   ts.plot(as.ts(r1), xlab = "r", main = "Student-t 1d")
   r2 = rmvst(200, dim = 2, Omega = matrix(c(1, 0.5, 0.5, 1), 2))
   ts.plot(as.ts(r2), xlab = "r", col = 2:3, main = "Student-t 2d")
   r3 = rmvst(200, dim = 3, mu = c(-1, 0, 1), alpha = c(1, -1, 1), df = 5)
   ts.plot(as.ts(r3), xlab = "r", col = 2:4, main = "Skew Student-t 3d")    
   
## mvFit - 
   # Generate Grid Points:
   n = 51
   x = seq(-3, 3, length = n)
   xoy = cbind(rep(x, n), as.vector(matrix(x, n, n, byrow = TRUE)))
   X = matrix(xoy, n * n, 2, byrow = FALSE)
   head(X)
   # The Bivariate Normal Case:
   Z = matrix(dmvsnorm(X, dim = 2), length(x))
   par (mfrow = c(2, 2), cex = 0.7)
   persp(x, x, Z, theta = -40, phi = 30, col = "steelblue") 
   title(main = "Bivariate Normal Plot")
   image(x, x, Z)
   title(main = "Bivariate Normal Contours")
   contour(x, x, Z, add = TRUE)
   # The Bivariate Skew-Student-t Case:
   mu = c(-0.1, 0.1)
   Omega = matrix(c(1, 0.5, 0.5, 1), 2)
   alpha = c(-1, 1)
   Z = matrix(dmvst(X, 2, mu, Omega, alpha, df = 3), length(x))
   persp(x, x, Z, theta = -40, phi = 30, col = "steelblue") 
   title(main = "Bivariate Student-t Plot")
   image(x, x, Z)
   contour(x, x, Z, add = TRUE)
   title(main = "Bivariate Student-t Contours")
   
## plot -
   # Student-t: Fixed number of degrees of freedo
   fit2 = mvFit(x = rmvst(100, 5), method = "st", fixed.df = NA)
   # Show Model Slot:
   fit2@model
   # Show Scatterplot:
   ## par(mfrow = c(1, 1), cex = 0.7)
   ## plot(fit2, which = c(TRUE, FALSE, FALSE, FALSE, FALSE))
   # Show QQ and PP Plots:
   ## par(mfrow = c(2, 2), cex = 0.7)
   ## plot(fit2, which = !c(TRUE, FALSE, FALSE, FALSE, FALSE))
   # Interactive Plots:
   # par(mfrow = c(1, 1))
   # plot(fit2, which = "ask")

[Package fMultivar version 240.10068 Index]