[Numpy-discussion] warning or error for non-physical multivariate_normal covariance matrices?

Michael Gilbert michael.s.gilbert@gmail....
Tue Sep 15 13:57:47 CDT 2009

On Tue, 15 Sep 2009 13:26:23 -0500, Robert Kern wrote:
> On Tue, Sep 15, 2009 at 12:50, Charles R
> Harris<charlesr.harris@gmail.com> wrote:
> >
> >
> > On Tue, Sep 15, 2009 at 11:38 AM, Michael Gilbert
> > <michael.s.gilbert@gmail.com> wrote:
> >>
> >> hi,
> >>
> >> when using numpy.random.multivariate_normal, would it make sense to warn
> >> the user that they have entered a non-physical covariance matrix? i was
> >> recently working on a problem and getting very strange results until i
> >> finally realized that i had actually entered a bogus covariance matrix.
> >>
> >> its easy to determine when this is the case -- its when the
> >> determinant of the covariance matrix is negative.  i.e. the
> >> multivariate normal distribution has det(C)^1/2 as part of the
> >> normalization factor, so when det(C)<0, you end up with an imaginary
> >> probability distribution.
> >>
> >
> > Hmm, you mean it isn't implemented using a cholesky decomposition? That
> > would (should) throw an error if the covariance isn't symmetric positive
> > definite.
> We use the SVD to do the matrix square root. I believe I was just
> following the older code that I was replacing. I have run into nearly
> degenerate cases where det(C) ~ 0 such that the SVD method gave not
> unreasonable answers, given the circumstances, while the Cholesky
> decomposition gave an error "too soon" in my estimation.

i just tried a non-symmetric covariance matrix, which, like you
mention is also non-physical.  there were also no errors for this
situation, and the results will obviously be incorrect.

regardless of the method for determining the matrix square root, it
should be possible to determine whether an error needs to be thrown
based on whether or not the result is imaginary, right?


More information about the NumPy-Discussion mailing list