mvncdf返回NaN的问题

3次浏览(过去30天)
乔治·Apostolakis
乔治·Apostolakis 2021年7月12日
你好,我在使用“mvncdf”时遇到了一些问题。考虑:
Mu = [0.4704 14.5809];
冠状病毒= [0.0030 0.0922;0.0922 - 2.8597);
Xl = [8 0];
徐= [12 4];
然后,mvncdf(xl, xu, mu, cov)返回NaN,但我不明白为什么。更重要的是,文档没有提到任何相关的东西。而且,更奇怪的是,mvncdf(xu, mu, cov) - mvncdf(xl, mu, cov)(这是等价的)返回一个double,而不是Nan。这是由于一个bug在mvncdf,还是我错过了一些重要的东西?

接受的答案

保罗
保罗 2021年7月12日
编辑:保罗 2021年7月12日
在xl和xu中定义的积分面积的极限在密度函数的尾部,这可能是mvncdf有问题的原因。
根据我的理解,mvncdf…设p(x1,x2)为关节密度。然后mvncdf计算概率P,给出如下:
信谊p (x1, x2)
Xl = sym(“xl”[1, 2]);
Xu = sym(“徐”[1, 2]);
P = int(int(P,x1,xl(1),xu(1)),x2,xl(2),xu(2)))
P =
首先,让我们看一下由问题中的参数定义的pdf
Mu = [0.4704 14.5809];
冠状病毒= [0.0030 0.0922;0.0922 - 2.8597);
func(μ,浸);
现在,重画,但用一个矩形显示积分面积:
Xlower = [8 0];
Xupper = [12 4];
func(μ,浸,xlower xupper)
如你所见,积分的区域在那里。我不知道为什么mvncdf在这种情况下返回NaN而不是零,但它可能与试图集成一个具有令人难以置信的小值的函数有关。
现在尝试一个更合理的积分区域
Xlower = [0.4 13];
Xupper = [0.5 15];
func(μ,浸,xlower xupper);
概率是:
mvncdf (xlower xupper,μ,浸)
Ans = 0.4229
这似乎很合理。
另外,我不认为mvncdf(xu, mu, cov) - mvncdf(xl, mu, cov)是等价的
Mvncdf (xupper, mu, cov) - Mvncdf (xlower, mu, cov)
Ans = 0.4985
因为它包含了红色矩形之外的区域,特别是x1 > 0.4和x2 < 13的浅蓝色区域。
函数func(μ,浸,xlower xupper)
X1 = 0.2:.001:.8;
X2 = 10:.001:18;
[X1,X2] = meshgrid(X1,X2);
X = [x1 (:) x2 (:)];
p = mvnpdf(X,mu,cov);
P =重塑(P,长度(x2),长度(x1));
数字
pcolor (x1, x2, p),阴影插值函数, colorbar
包含(x1的), ylabel (“x2”
如果Nargin == 4
矩形(“位置”,[xlower(1) xlower(2) xupper(1)-xlower(1) xupper(2)-xlower(2)],“EdgeColor”“r”);
汽车
结束
结束
7评论
乔治·Apostolakis
乔治·Apostolakis 2021年7月28日
太好了。谢谢你! !

登录评论。

更多答案(0)

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!