我了解,一旦将值绘制为图表,便可以通过观察双峰来识别双峰分布,但是如何以编程方式找到它呢?(我正在寻找一种算法。)
我了解,一旦将值绘制为图表,便可以通过观察双峰来识别双峰分布,但是如何以编程方式找到它呢?(我正在寻找一种算法。)
Answers:
识别连续分布的模式需要对数据进行平滑或合并。
分箱通常过于谨慎:结果通常取决于将分箱切割点放置在何处。
内核平滑(特别是以内核密度估计的形式)是一个不错的选择。尽管许多内核形状都是可能的,但是通常结果并不十分依赖于形状。这取决于内核带宽。因此,人们要么使用自适应内核平滑,要么进行一系列内核平滑以改变固定带宽,以检查所识别模式的稳定性。尽管使用自适应或“最佳”平滑器很有吸引力,但是请注意,大多数(全部?)旨在实现精度与平均精度之间的平衡:它们并非旨在优化模式位置的估计。
就实现而言,内核平滑器会在本地移动和缩放预定函数以适合数据。假设此基本函数是可微分的-高斯人是一个不错的选择,因为您可以根据需要任意多次对其进行微分-然后,您要做的就是用它的导数替换它,以获得平滑的导数。然后,只需应用标准的零查找程序即可检测和测试关键点。(布伦特的方法效果很好。)当然,您可以对二阶导数执行相同的技巧,以快速测试任何临界点是否为局部最大值(即模式)。
Silverman有一篇著名的论文涉及这个问题。它采用核密度估计。看到
BW Silverman,使用核密度估计来研究多峰性,J。Royal Stat。Soc。B卷 43号 1981年1月,第97-99页。
请注意,纸张表格中存在一些错误。这只是一个起点,但相当不错。如果您最需要的是它,它提供了定义明确的算法供您使用。您可能会在Google学术搜索中看到一些引用它的文章,以寻求更多的“现代”方法。
我参加聚会的时间很晚,但是如果您只是对它是否是多峰感兴趣,这意味着您对模式的数量不感兴趣,那么您应该看看diptest。
在R
包中称为diptest
。
维基中的定义让我有些困惑。连续数据集仅具有一种模式的概率为零。编写双峰Distrubiton的一种简单方法是使两个单独的正态分布的中心不同。这将创建两个峰值或Wiki称为模式。实际上,您几乎可以使用任何两个分布,但是更困难的统计机会之一是在组合两个随机数据分布后,查找数据集的形成方式。