如何将核平滑的概率密度估计值转换为“东西”的单位

时间:2018-10-01 07:36:17

标签: matlab 3d probability probability-density

我目前正在使用多元概率分布(MATLAB函数mvksdensity),但是我遇到了一个困扰。

我在空间中有[XYZ]个点的3D PDF。我希望以点为单位,例如每个仓位的估计点数,而不是概率。

这是因为我想估计在某些区域中发现的点数,所以我想将PDF转换为时间(乘以1 /采样率),并且希望将不同的PDF分开。不同的数据等

我的第一个想法是将PDF除以其总和(因此sum(PDF)= 1),然后乘以[XYZ]点的总数。这样,sum(PDF)=点数,我应该能够完成上述所有操作。

基本上我的问题是如何将PDF转换为更像直方图的图形-以便单位是“填充”而不是概率...

任何帮助将不胜感激,

谢谢

杆。

这是我的意思的玩具示例:

pos = rand(50000,3)*1000; % [XYZ] points
vindx = 0:50:1000; % grid over which we want to estimate KDE
[xv,yv,zv] = ndgrid(vindx); % grid over which we want to estimate KDE
f = mvksdensity(pos,[xv(:),yv(:),zv(:)],'Bandwidth',75,'Kernel','normal','Function','pdf'); % PDF
f = f./nansum(f(:)) .* length(pos(:,1)); % now the sum of f will = the number of [XYZ] points

map = NaN(length(vindx),length(vindx),length(vindx)); % prepare an empty 3D map
[~,idx] = ismember(xv(:),vindx); % get the indices along X
[~,idy] = ismember(yv(:),vindx); % get the indices along Y
[~,idz] = ismember(zv(:),vindx); % get the indices along Z
ida = sub2ind(size(map),idy,idx,idz); % get the indices into map
map(ida) = f(:); % add the values to map

figure % plot data
isosurface(map,nanmax(f(:))/2);
daspect([1 1 1])

1 个答案:

答案 0 :(得分:1)

mvksdensity表示的概率密度函数已经具有“每单位体积 XYZ 的总人口的分数”的单位。乘以原始点数确实会将其转换为“每单位体积 XYZ 的原始样本中的点数”。

这些单位与直方图的单位基本相同,直方图的垃圾箱具有单位体积。如果一个元素输出表示更大的仓,则将其乘以仓的体积以表示预期落入该单位仓数量之内的点数。

在点网格上评估mvksdensity将留下一个值网格,该值网格是内核密度估计所定义的PDF的数字近似值。将其乘以网格单元格体积(对于您的网格ndgrid(vindx)等于50^3),得出的值将在相加后形成PDF积分的numerical approximation

整个 XYZ 域中PDF的分析积分定义1。为了使您的值能够公平地反映出KDE定义的PDF,不应像在示例中使用f./nansum(f(:))那样将其除以总和。如果数字积分nansum(f(:) * 50^3)不等于1,则表明数字积分的近似误差,或者表明网格距离不够远或太粗。