我正在尝试找到概率密度函数的局部最大值(使用R density
方法找到)。由于存在大量数据,因此我无法执行一种简单的“环顾四周”方法(即环顾一个点以查看其是否是相对于其邻居的局部最大值)。此外,与使用容错和其他参数构建“环顾四周”相反,使用样条插值法然后找到一阶导数的根似乎更为有效和通用。
所以,我的问题是:
- 给定来自的函数
splinefun
,哪些方法可以找到局部最大值? - 有没有一种简单/标准的方法来查找使用返回的函数的派生形式
splinefun
? - 有没有更好的/标准的方法来找到概率密度函数的局部最大值?
供参考,以下是我的密度函数图。我正在使用的其他密度函数在形式上相似。我应该说我是R的新手,但不是编程的新手,因此可能会有一个标准的库或程序包来实现我所需要的。
谢谢你的帮助!!
我给这n为2 ^ 15,似乎该数据已在逐点水平有很多差异的。我尝试使用类似于邻域方法(通过
—
aaronlevin 2012年
msExtrema {msProcess}
)编写最大/最小查找器,并且只能通过使用公差设置来识别一些最大值,而不是全部。
看的代码
—
2012年
msExtrema
,它是一个简单的包装peaks
从splus2R
包,你会更好使用直接,如果你只希望当地的最大值,而不是局部极小。我不明白为什么使用默认span=3
不会发现所有的局部最大值。2 ^ 15 = 32768的大小应该不足以使效率成为一个大问题。
splinefun返回的函数的参数“ deriv”默认为0。将一阶导数设置为deriv = 1。
—
青色
嗯,
—
陌生
peaks
似乎有问题:它max.col
使用默认设置调用ties.method = "random"
,这不仅会随机打破平局,而且会为宣告平局设置相对容差1e-5。前者令人困惑,后者绝对不是您想要的。peaks()
还采用了strict
文档记录不充分的参数,并且在查看该函数的代码时,什么也没做。啊,用户提供的软件库的乐趣!尽管您说自己对编程并不
density()
不估计密度为每一个数据,它估计在密度Ñ值,其中Ñ是具有默认值的用户指定的参数Ñ = 512