What is the equation for a multivariate skewed normal distribution, specifically a two dimensional skewed normal distribution?

  • 1
    $\begingroup$ Google: bivariate skew normal distribution or biomet.oxfordjournals.org/content/83/4/715.full.pdf amongst many such links $\endgroup$
    – wolfies
    Dec 11 '16 at 5:48
  • 1
    $\begingroup$ This threw me off because all bivariate normal distributions are symmetric. But apparently this is a larger family of distributions that includes the normal. $\endgroup$ Dec 11 '16 at 11:13
  • 1
    $\begingroup$ The paper referenced @wolfies provides the multivariate skewed normal density in equation 2.3 and treats the special case of the bivariate case in section 3 with its density given in equation 3.1. $\endgroup$ Dec 11 '16 at 11:34

Bivariate (or multivariate) skew normal distributions can be constructed with the same methods that is used in the univariate case. The usual univariate skewnormal density (due to Azzalini https://en.wikipedia.org/wiki/Skew_normal_distribution) is given by $$ \phi_{\text{Skew}}(x;\alpha) =2\phi(x)\Phi(\alpha x) $$ where $\phi$ is the usual standard normal density and $\alpha$ is a new skewness parameter. $\Phi$ is the standard normal cumulative distribution.

We can use the same construction in the multivariate case, introducing the covariance matrix $\Omega$ but still keeping the center at zero. $$ \phi_{d,\text{Skew}}(x;\Omega,\alpha) = 2 \phi_d(x;\Omega)\Phi(\alpha^T x) $$ where $d$ is the dimension and $\phi_d$ is the multinormal density with covariance matrix $\Omega$ (and center zero), $\Phi$ is still the univariate standard normal cumulative distribution.

A contour plot is shown below, the parameters used can be gleaned from the R code below it:

enter image description here


alpha <-  c(0.5, 1)
Omega <-  matrix(c(1, 0.5, 0.5, 1), 2, 2)
xran  <-  seq(-3, 3, length=101)
yran  <-  seq(-3, 3, length=101)
z     <-  outer(xran, yran, FUN=Vectorize( function(x, y) dmsn(c(x, y), c(0, 0),
                                                    Omega, alpha) )  )
image(xran, yran, z)
contour(xran, yran, z, ncontours=20, add=TRUE)
title("bivariate skewnormal density")

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.