以下方法应该计算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的积分?上面的代码中是否有我遗漏的东西?
答案 0 :(得分:5)
问题是您缺少PDF中的大量值,如果您使用bins = [0:46]
,则您有以下曲线:
这意味着您缺少所有部分x < 0
和x > 46
,因此您计算的积分不是-oo
到+oo
,而是来自{0
1}}到46
,显然你不会得到正确答案。
请注意,您有mean = 23
和std = 11.5
,因此,如果您有bins = 0:46
,则每个边都有一个宽度为std
的带子,所以根据{{3}},95%的值位于此范围内,这与您获得的0.9544一致。
如果你选择bins = -11.5:57.5
,你现在每边都有三个标准偏差,你将得到99.7%
这个频段的值(MATLAB给我0.9973
,填充区域是你没有使用bins = 0:46
)的那些:
请注意,如果您想要使用优于10 -3 的错误到达1.000
,则需要大约3.4个标准偏差 :
>> 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}}和-oo
。