如何识别双峰分布?


48

我了解,一旦将值绘制为图表,便可以通过观察双峰来识别双峰分布,但是如何以编程方式找到它呢?(我正在寻找一种算法。)


5
有趣的问题。我对此一无所知,因此不会尝试回答,但是使用谷歌搜索双峰+测试会给出很多有希望的线索。 google.co.uk/search?q=bimodality+test
一站式服务(

www.estima.com上提供了测试多模式的程序代码,称为MODES.SRC。您可以轻松地将其转换为Matlab,R或其他软件。问候,圭多。

1
您无法确定模式的数量(分布可以具有的微小摆动的数量没有限制),但是您可以得到一个下限。例如,请参阅此处projecteuclid.org/euclid.aos/1176351045
Glen_b 2014年

Answers:


27

识别连续分布的模式需要对数据进行平滑或合并。

分箱通常过于谨慎:结果通常取决于将分箱切割点放置在何处。

内核平滑(特别是以内核密度估计的形式)是一个不错的选择。尽管许多内核形状都是可能的,但是通常结果并不十分依赖于形状。这取决于内核带宽。因此,人们要么使用自适应内核平滑,要么进行一系列内核平滑以改变固定带宽,以检查所识别模式的稳定性。尽管使用自适应或“最佳”平滑器很有吸引力,但是请注意,大多数(全部?)旨在实现精度与平均精度之间的平衡:它们并非旨在优化模式位置的估计。

就实现而言,内核平滑器会在本地移动和缩放预定函数以适合数据。假设此基本函数是可微分的-高斯人是一个不错的选择,因为您可以根据需要任意多次对其进行微分-然后,您要做的就是用它的导数替换它,以获得平滑的导数。然后,只需应用标准的零查找程序即可检测和测试关键点。(布伦特的方法效果很好。)当然,您可以对二阶导数执行相同的技巧,以快速测试任何临界点是否为局部最大值(即模式)。


2
@venkasub,您还可以查看穆勒的寻根方法。它比Brent的方法更简单,并且“几乎”与Newton的方法一样有效,但是不需要知道目标函数的导数。
主教

25

Silverman有一篇著名的论文涉及这个问题。它采用核密度估计。看到

BW Silverman,使用核密度估计来研究多峰性J。Royal Stat。Soc。B卷 43号 1981年1月,第97-99页。

请注意,纸张表格中存在一些错误。这只是一个起点,但相当不错。如果您最需要的是它,它提供了定义明确的算法供您使用。您可能会在Google学术搜索中看到一些引用它的文章,以寻求更多的“现代”方法。


4
+1本文利用有关表观模式数如何取决于内核宽度(对于高斯内核)的信息来选择合适的宽度,然后按照我的答复中所述继续进行操作。
ub

2

我参加聚会的时间很晚,但是如果您只是对它是否是多峰感兴趣,这意味着您对模式的数量不感兴趣,那么您应该看看diptest

R包中称为diptest


2
全名是Hartigan的单峰浸入式测试。原始论文的描述给出了这种描述:倾角测试通过经验分布函数和最小化最大差异的单峰分布函数之间的所有样本点上的最大差来度量样本中的多峰。该算法并非易事,但您可以在Dip统计量的计算以测试单峰性的基础上,根据原始Fortran实施轻松找到C,Python,MATLAB和现代Fortran转换。
mortehu


0

维基中的定义让我有些困惑。连续数据集仅具有一种模式的概率为零。编写双峰Distrubiton的一种简单方法是使两个单独的正态分布的中心不同。这将创建两个峰值或Wiki称为模式。实际上,您几乎可以使用任何两个分布,但是更困难的统计机会之一是在组合两个随机数据分布后,查找数据集的形成方式。


您将如何识别两个正态分布的中心?
venkasub 2011年

@venkasub,正态分布的中心为其平均值。如果您知道双峰性来自两个正态分布,则可以拟合混合模型来估计均值,这将是两个模态。
mpiktas 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.