0

我有一些我假设来自分布的数据,我正在尝试估计该分布。现在我正在使用 R 中的包KernSmooth和高斯内核,并且正在使用包的dpik()功能来自动选择我的带宽。(我假设它使用 AMISE 或排序,如果有更好的自动带宽选择过程,请告诉我)不过,我感兴趣的是找到与分布中最高峰对应的 x 值。 ..这对我来说似乎是一件非常简单的事情,而且我早些时候把它视为微不足道的事情,但令我沮丧的是,我遇到了一些障碍。这bkde()KernSmooth 中的函数传回一组 (x,y) 坐标,这些坐标映射出算法估计的分布。我知道我可以简单地对数据进行线性搜索以找到最大 y 值,并且可以简单地获取相应的 x 值,但是,当我正在编写一个可能在自动化过程中经常调用的函数时,我觉得它是效率低下。特别是效率低下,因为bkde()回馈了很多价值。

我的另一个想法是尝试对其拟合曲线并取导数并将其设置为零,但这听起来也可能效率低下。也许density()在这里使用会更好?

请让我知道是否有任何有效的方法......我实际上计划对我找到的分布做一些推断。比如找到截断点,把两边的尾巴砍掉一定比例(即置信区间),求出期望值。我现在的模糊计划是使用一些蒙特卡罗技术或尝试从分布中汲取灵感,以了解具有自举技术的领域。对任何方法的任何帮助将不胜感激。

4

1 回答 1

2

使用:

> require(KernSmooth)
Loading required package: KernSmooth
KernSmooth 2.23 loaded
Copyright M. P. Wand 1997-2009
> mod <- bkde(faithful$waiting)
> str(mod)
List of 2
 $ x: num [1:401] 22.7 23 23.2 23.4 23.7 ...
 $ y: num [1:401] 3.46e-08 1.17e-07 1.40e-07 1.68e-07 2.00e-07 ...

这还不够高效吗?

> which(mod$y == max(mod$y))
[1] 245

density()做了类似的事情,但它返回 512 个密度值,以 512 个固定间隔为x.

在这两个函数中,返回的点数都是可以控制的。请参阅gridsizeinbkde()nin 中的参数density()。当然,该方法的精度确实取决于估计 KDE 的点的密度,因此您不会想将其设置得太低。

我的直觉告诉我,与仅使用上述简单解决方案相比,您可能会花费更多时间来思考和实施更有效的方法。

于 2012-06-05T20:00:12.270 回答