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, 2016 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, 2016 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, 2016 at 11:34

1 Answer 1


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 and acknowledge you have read our privacy policy.