给定经验概率密度函数,如何找到密度达到峰值的值(在R中)?

时间:2013-10-02 10:55:03

标签: r probability-density

我计算以下数据的密度函数:

> dput(mydat)  
c(-20, -13, 30, 4, -4, 34, 27, 19, 13.5, 15, 13, 18, 10, 12, 
21, -0.769999999999996, 2.5, -7, 0, -30.6, 6.39999999999999, 
-18.6, -0.199999999999989, -20.4, -19.9, 4.60000000000001, -19.4, 
4.5, -9, -15, 9, -1, -14, 8, 6, -17, 5, 7)  

> myden = density(mydat)  # default kernel and bandwidth  

给了我这个结果:

enter image description here

我想找到两个密度峰的位置。我最初考虑在diff()上使用myden$y,然后检查所有有符号更改的位置,并将其作为选择X轴值的条件。我在几个测试向量上尝试了它,但我没有得到预期的结果,我怀疑它不是那么简单。

有没有直接的方法来实现这一目标?我想要一个可重复的解决方案,因为我将这个作为随机模拟研究的一部分进行~e + 05实现,并且可能发生峰值数量在整个模拟中变化。

2 个答案:

答案 0 :(得分:2)

使用which.max

myden$x[which.max(myden$y)]
# [1] 5.91428

您可以直观地测试:

plot(myden, col='red')
abline(v=myden$x[which.max(myden$y)])

enter image description here

答案 1 :(得分:2)

我经常使用pastecs::turnpoints来查找局部最大值和最小值。