繁体   English   中英

从R中的绘制密度函数(核密度估计)中寻找最大值

[英]Finding The Max Value from Plotted Density Function (Kernel Density Estimation) in R

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

我的另一个想法是尝试将曲线拟合到它并采用导数并将其设置为等于零,但听起来它可能也是低效的。 也许density()可以在这里使用更好的功能?

如果有任何有效的方法,请告诉我......我实际上打算对我找到的发行版进行一些推断。 例如找到切断点以切断任一侧尾部的一定百分比(即置信区间)并找到预期值。 我现在模糊的计划是使用一些蒙特卡罗技术或尝试从分布中抽取来获得有关自举技术的区域的想法。 任何有关这些方法的任何帮助都将不胜感激。

使用:

> 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常规间隔计算。

在这两个函数中,可以控制返回的点数。 请参阅bkde()参数gridsizedensity() n 当然,该方法的精确度取决于估计KDE的点的密度,因此您赢了;我想将此设置得太低。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM