使用样条查找密度函数的局部极值

机器算法验证 r 密度函数 样条 极值
2022-01-27 13:11:27

我正在尝试找到概率密度函数的局部最大值(使用 Rdensity方法找到)。我不能做一个简单的“环顾邻居”方法(一个人环顾一个点,看看它是否是相对于它的邻居的局部最大值),因为有大量数据。此外,使用样条插值然后找到一阶导数的根似乎更有效和通用,而不是使用容错和其他参数构建“环顾邻居”。

所以,我的问题:

  1. 给定一个来自 的函数splinefun,什么方法可以找到局部最大值?
  2. 是否有一种简单/标准的方法来查找使用返回的函数的导数splinefun
  3. 是否有更好/标准的方法来找到概率密度函数的局部最大值?

作为参考,下面是我的密度函数图。我正在使用的其他密度函数在形式上是相似的。我应该说我是 R 新手,但对编程并不陌生,所以可能有一个标准库或包来实现我所需要的。 密度函数

谢谢你的帮助!!

1个回答

您想要做的是化学计量学中的峰值检测。您可以使用多种方法。我在这里只演示一个非常简单的方法。

require(graphics)
#some data
d <- density(faithful$eruptions, bw = "sj")

#make it a time series
ts_y<-ts(d$y)

#calculate turning points (extrema)
require(pastecs)
tp<-turnpoints(ts_y)
#plot
plot(d)
points(d$x[tp$tppos],d$y[tp$tppos],col="red")