如何识别双峰分布?

机器算法验证 分布
2022-02-02 07:09:34

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

4个回答

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

分箱通常过于简单:结果通常取决于您放置分箱切点的位置。

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

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

Silverman 有一篇著名的论文处理了这个问题。它采用核密度估计。

BW Silverman,使用核密度估计来研究多模态J. Royal Stat。社会党。B,卷。43,没有。1,1981,第 97-99 页。

请注意,论文表格中存在一些错误。这只是一个起点,但却是一个很好的起点。它提供了一个定义明确的算法来使用,如果这是您最需要的。您可能会在 Google Scholar 上查看引用它以获得更“现代”方法的论文。

我来晚了,但如果你只是对它是否是多模式感兴趣,这意味着你对模式的数量不感兴趣,你应该看看diptest

R包中称为diptest.

wiki 中的定义让我有点困惑。只有一种模式的连续数据集的概率为零。对双峰分布进行编程的一种简单方法是使用两个不同中心的独立正态分布。这会创建两个峰值或 wiki 所称的模式。实际上,您几乎可以使用任何两个分布,但更难的统计机会之一是在组合两个随机数据分布后找出数据集是如何形成的。