how to improve the precision when using the cumulative density function
2 views (last 30 days)
Show older comments
Dear fellows,
I am calulating the log likelihood of bivariate normal distribution using the the buillt in function mvncdf. But I always get a lot of -Inf. Is there any solution to get the precise answer? I will show you an example to make my question clear:)
Here is the code
mu = [181.665319288082,145.332255430466]; SIGMA = [2 1; 1 2]; hatmu=[25,23]; X1=[hatmu(1)-0.5 hatmu(2)-0.5]; X2=[hatmu(1)+0.5 hatmu(2)+0.5]; X = [X1, X2]; p = log(mvncdf(X1,X2,mu,SIGMA))
When I run the above code, the result I get is p=-Inf.(the answer for mvncdf(X1,X2,mu,SIGMA)) is 0 so it is not surpriising to get p=-Inf)
Appreciate any help:)
0 Comments
Accepted Answer
Tom Lane
on 28 Nov 2012
This may be too elaborate an answer, but it's all I have.
You are computing the probability of falling into a rectangle. If the lowest value of the pdf in this rectangle is L, and the highest value is H, then the answer will be bounded by A*L < answer < A*H where A is the area of the rectangle. To get a rough approximation, you could compute A*T where T is a typical value of the pdf in the rectangle.
So it remains to compute the pdf. If you try using mvnpdf you'll get zero. Edit that file, and at the end change the "y = exp(...)" stuff to remove the exponential and return the result on the log scale. Save the file under your own name and run it. When I try that, I get these log pdf values at the four corners of your rectangle:
1.0e+03 *
-6.8303
-6.7373
-6.8011
-6.7668
The rectangle has area 4, but that doesn't matter much -- your answer is around exp(-6800). That's really small. So small that I suspect it's not going to do you much good.
Just to be clear, I don't recommend this as a general procedure, but it's one way to try to get a rough idea of the value.
2 Comments
Tom Lane
on 12 Dec 2012
Sorry, I don't understand. In my answer I described how I arrived at the number exp(-6800) as a rough estimate of the order of magnitude. The 1.0e+03 in my display is just the way MATLAB displays the vector when all elements are small.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!