普通PDF的积分不等于使用MATLAB的normpdf

时间:2015-09-16 14:12:48

标签: matlab normal-distribution

以下方法应该计算PDF:

COUNT(...)

但是,如果我认为这些箱子像

那样
bins = [20 23 31.5 57 62.5 89 130];  % classes of values of my random variable

mean = 23;   
std  = mean/2;
values = mean + std*randn(1000,1);  % the actual values of the RV

% method 1

[num, bins] = hist(values, bins);  % histogram on the previously defined bins
pdf2 = num/trapz(bins, num);
trapz(bins, pdf2)  % checking the integral under the curve, which is indeed 1
ans =
 1

% method 2
pdf1 = normpdf(bins, mean, std); % the Matlab command for creating o normal PDF
trapz(bins, pdf1)  % this is NOT equal to 1
ans =
0.7069

结果

bins = [0:46];

所以在ans = 1 ans = 0.9544 的情况下,我仍然没有积分值1。

为什么normpdf不为PDF提供等于1的积分?上面的代码中是否有我遗漏的东西?

1 个答案:

答案 0 :(得分:5)

问题是您缺少PDF中的大量值,如果您使用bins = [0:46],则您有以下曲线:

enter image description here

这意味着您缺少所有部分x < 0x > 46,因此您计算的积分不是-oo+oo,而是来自{0 1}}到46,显然你不会得到正确答案。

请注意,您有mean = 23std = 11.5,因此,如果您有bins = 0:46,则每个边都有一个宽度为std的带子,所以根据{{​​3}},95%的值位于此范围内,这与您获得的0.9544一致。

如果你选择bins = -11.5:57.5,你现在每边都有三个标准偏差,你将得到99.7%这个频段的值(MATLAB给我0.9973,填充区域是你没有使用bins = 0:46)的那些:

68–95–99.7 rule

请注意,如果您想要使用优于10 -3 的错误到达1.000,则需要大约3.4个标准偏差 enter image description here

>> bins = (mean - 3.4 * std):(mean + 3.4 * std) ;
>> pdf  = normpdf(bins, mean, std) ;
>> trapz(bins, pdf)
0.9993

请注意,对于bins = [20 23 31.5 57 62.5 89 130];,您既有精度问题又有值缺失问题(您的曲线是蓝色曲线,红色曲线是使用bins = 20:130生成的):

1

很明显,如果你计算蓝色曲线下的面积,你就不会得到红色曲线下面积的值,你肯定不会得到一个接近{{之间的红色曲线的积分值的值。 1}}和-oo