How do I calculate the inverse of the cumulative distribution function (CDF) of a multivariate normal distribution? Does it even exist for the multivariate case?

I know this is possible for a univariate case in python as

from scipy.stats import norm    
norm.ppf(0.95, loc=10, scale=2) # mean=10,variance=2, probability=0.95

Out[34]: 0.94999999999999996  # x value corresponding to given probability

Can somebody tell me a function similar to this for a multivariate case in Python or R?

Sample Input : mean is a dimensional vector variance is p*p matrix probability(between 0 &1) Expected output : 'x' which would be a p dimensional vector


1 Answer 1


It doesn't exist. Consider the most simple case, $X$ and $Y$ are i.i.d. Gaussians. Because of independence, by definition $f_{XY}(X,Y) = f_X(X)\,f_Y(Y)$. If they are i.i.d., then

$$ f_{XY}(z, -z) = f_{XY}(-z, z) = f_X(-z) \, f_Y(z) = f_X(z) \, f_Y(-z) $$

To obtain a cumulative distribution function $F_{XY}$, you would integrate over the probability density function $f_{XY}$. In such case, inevitably, you would observe that $F_{XY}(z, -z) = F_{XY}(-z, z)$. So multiple inputs could lead to the same outputs, so there is no inverse for it.

  • 4
    $\begingroup$ Another point worth signaling is that a multivariate cdf at a random value, $F_X(X)$, is no longer distributed as a Uniform $\mathcal U(0,1)$ variable. $\endgroup$
    – Xi'an
    Jun 13, 2021 at 7:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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