【问题标题】:How to convert a kernel smoothed probability density estimate into units of 'stuff'如何将内核平滑概率密度估计转换为“东西”单位
【发布时间】:2018-10-01 07:36:16
【问题描述】:

我目前正在研究多元概率分布(MATLAB 函数 mvksdensity),但我遇到了一个问题。

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

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

我的第一个想法是将 PDF 除以其总和(因此 sum(PDF) = 1),然后乘以 [XYZ] 点的总数。这样总和(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])

【问题讨论】:

  • 您的 PDF 总和应为 1。乘以点数将导致每个“bin”中的数字。
  • @CrisLuengo 这就是问题中的示例似乎正在做的事情。我认为更相关的问题是该示例在哪些方面不是问题的解决方案?!
  • 另请注意,来自有限支持均匀分布 (rand) 的样本的 KDE 将在支持 (0:1000 在这种情况下) 上近似均匀,但在超出由于内核的宽度,支持限制。如果您仅在输入数据范围内的点处评估 KDE,则结果将整合到小于 1,因为 KDE 假定对于每个观察到的数据点,都有可能在距离之外看到一个新点。
  • 大家好,在 Matlab 中,函数 ksdensity 和 mvksdensity 的输出总和不等于一。输出的积分总和为 1。您可以在示例中看到,对于我来说 nansum(f(:)) = 7.14-06 左右。所以问题是我所做的是否是一种适当的方法——如果是这样,那就太好了!但我不确定……
  • 如果您的目标是让f 表示pos 中有多少点落入每个50-unit 立方体中,那么这几乎是合适的。因为您的网格不会低于0 或高于1000,所以在该网格上集成mvksdensity 应该会小于1。因此,根据 KDE 除以nansum(f(:)) 会高估有多少点落在每个网格单元格中,因为它假设没有点落在网格之外,而 KDE 假设有一些点落在网格之外。

标签: matlab 3d probability probability-density


【解决方案1】:

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

这些单位与柱状图具有单位体积的直方图的单位基本相同。如果一个元素输出要代表一个更大的 bin,乘以 bin 的体积以表示预期落在该单元 bin 数量内的点数。

在点网格上评估 mvksdensity 将留下一个值网格,这些值是由核密度估计定义的 PDF 的数值近似值。将其乘以网格单元体积(对于您的网格 ndgrid(vindx) 等于 50^3)产生的值在求和时形成 PDF 积分的 numerical approximation

PDF 在整个 XYZ 域上的解析积分定义1。为了使您的值公平地反映 KDE 定义的 PDF,您不应像在 f./nansum(f(:)) 的示例中那样除以总和。如果数值积分nansum(f(:) * 50^3)不等于1,这反映了数值积分的近似误差,要么表示网格延伸不够远,要么过于粗糙。

【讨论】:

  • 这基本上回答了我的问题,所以我在这里接受了。我不确定它有多普遍。例如,我现在使用 mvksdensity 来近似球体表面的概率。由于垃圾箱不再具有恒定的体积/面积,因此该答案如何适用?
  • mvksdensity 假设点之间的距离是欧几里得,所以如果你的输入点是球坐标,那么密度估计一开始就是错误的。球体北极旁边的一个点在极点另一侧的一点上的密度贡献与赤道上的一个点在与它直径相对的一点上的密度贡献相同。只要mvksdensity 的假设成立,从分布中以均匀间隔采样应该仍然是微不足道的。
  • 我不明白;我的点是 XYZ 坐标,但它们落在一个单位球体上。我计算了这个球体上一堆点的概率密度估计(matlab 函数“球体”)。我同意在极点处估计的精度会更高,因为那里有更多的网格点,但实际值不应该是不正确的。我也不明白你的例子:靠近极点的点对极点另一侧的点有贡献,但对对极点的贡献要小得多(完全相反)。跨度>
  • 对于球体上的 3D 笛卡尔点,您会遇到不同的问题:这些点被定义并假设分布在 3 个正交维度上。这意味着mvksdensity 在您的球体内部和外部以及其表面上的点处建模非零概率密度,即使实际上没有。
  • 您可以推导出转换,使您能够确定由sphere 返回的 UV 球体每个面的“等效体积”,以允许您整合这些值,但这是一个相当大的问题复杂的创可贴解决了潜在的问题,即您对数据的概率密度使用了不合适的模型。我希望使用非欧几里德距离度量从第一原理实现 KDE 比弄清楚这一点更容易;无论如何,解决欧几里得空间中的统一笛卡尔网格超出了这个问题的范围。
猜你喜欢
  • 2017-12-07
  • 2018-12-11
  • 2020-10-12
  • 1970-01-01
  • 2021-07-22
  • 2021-09-11
  • 1970-01-01
  • 2017-02-03
  • 2013-02-02
相关资源
最近更新 更多