计算直方图中的最佳bin数量


79

我有兴趣寻找一种尽可能最佳的方法来确定直方图中应使用的箱数。我的数据最多应包含30到350个对象,并且特别是我尝试应用阈值处理(例如Otsu的方法),在该阈值中,我应减少并应分散的“好”对象与“不良”的物品,其价值应更高。每个对象的具体值得分为1-10。我有5-10个对象,得分6-10,以及20-25个对象,得分1-4。我想找到一个直方图合并模式,该模式通常允许使用Otsu的方法来限制低得分对象。但是,在我看到的Otsu的实现中,bin大小为256,通常我的数据点比256小得多,对我来说,这表明256不是一个很好的bin数。在数据很少的情况下,我应该采用什么方法来计算要使用的垃圾箱数量?


我认为Sturges规则可用于n <200;其中n是观测数量
venkasub

Answers:


94

h=2×IQR×n1/3(maxmin)/hn

在基数R中,可以使用:

hist(x, breaks="FD")

对于其他没有此选项的绘图库(例如ggplot2),您可以将binwidth计算为:

bw <- 2 * IQR(x) / length(x)^(1/3)

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)

2
@nico。R中的默认值是breaks =“ Sturges”,它并不总是能提供良好的结果。
罗布·海恩德曼

4
如何计算IQR
Kurt Mueller 2014年

1
@KurtMueller IQR表示四分位间距。寻找第一四分位数和第三四分位数,区别是IQR。IQR已随附R,因此您可以使用它。
xiaodai 2014年

4
如果我没记错的话,答案应该是num_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FD九年前不存在。
Rob Hyndman

18

如果使用的箱数太少,则直方图并不能很好地描绘数据。如果您有太多的垃圾箱,则会出现断梳的外观,也不会给人以分布感。

一种解决方案是创建一个显示每个值的图形。点图或累积频率分布都不需要任何分档。

如果要创建具有等间距间隔的频率分布,则需要确定有多少个间隔(或每个间隔的宽度)。决定显然取决于值的数量。如果您有很多值,那么如果您有很多箱,则图形将看起来更好,并且信息量也更大。此Wikipedia页面列出了几种用于根据观察数确定箱宽的方法。最简单的方法是将bin的数量设置为等于要合并的值的数量的平方根。

Hideaki Shimazaki的本页解释了另一种方法。计算起来有点复杂,但似乎做得很好。页面的顶部是Java应用程序。滚动浏览以了解其理论和解释,然后继续滚动以找到说明该方法的论文的链接。


到Hideaki页面的链接已断开。我不确定这是否是同一件事:toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW 2012年

9

也许Denby和Mallows 的论文“ 直方图的变化 ”会引起人们的兴趣:

我们称这种新显示为“ dhist”(用于对角线切割的直方图),保留了等宽历史记录和等面积历史记录的理想特征。当数据出现尖峰时,它将显示像ea hist这样的高窄窄条,并像通常的直方图一样显示孤立的离群值。

他们还提到R中的代码可应要求提供。


5

我不确定这是否严格来说是正确的做法,但是我倾向于生成多个具有不同bin宽度的直方图,并根据哪个直方图适合我试图最好地传达的解释,选择要使用的直方图。尽管这给直方图的选择带来了一些客观性,但我要证明这一点是合理的,因为我比给直方图的人有更多的时间来理解数据,因此我需要给他们一个非常简洁的信息。

我也非常喜欢在每个bin中显示相同数量的点而不是相同bin宽度的直方图。我通常会发现,尽管它们很难产生,但它们代表的数据远好于恒定箱宽。


1
抱歉,我应该提到我需要以自动化方式进行此操作。“多次执行此操作,直到找到最适合我的目的的选项”对我不起作用。必须通过计算来完成...
Tony Stark 2010年

4
我同意-有一个“最佳”箱宽的想法是一个巨大的简化假设。
哈德利2011年

5

您是否看到了Shishimazaki-Shinomoto方法?

尽管它似乎在计算上很昂贵,但它可能会给您带来良好的效果。如果计算时间不是您的问题,那么值得尝试一下。以下链接中的Java,MATLAB等有一些此方法的实现,它们的运行速度足够快: web-interface


3

如果我需要以编程方式确定垃圾箱的数量,通常我会从直方图开始,该直方图具有比所需数量更多的垃圾箱。填充完直方图后,我便合并箱,直到每个箱中有足够的条目供我使用的方法使用,例如,如果我想在具有正态分布不确定性的计数实验中对泊松不确定性建模,直到我拥有超过10的东西条目。


2

请看这个答案作为罗伯·海德曼先生的答案的补充。

为了使用具有基本R或封装的Freedman–Diaconis规则创建具有完全相同的间隔或“ binwidth”的直方图,我们可以使用函数值之一。假设我们要使用Freedman–Diaconis规则从数据创建直方图。在基本R中,我们使用ggplot2hist()breaksqsecmtcars

x <- mtcars$qsec
hist(x, breaks = "FD")

同时,ggplot2我们在包装中使用

h <- hist(x, breaks = "FD", plot = FALSE)
qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white"))

或者

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white")

它们全都生成直方图,其间隔与目标箱数完全相同。


-5

我对金/吨有600个观测值。Bin大小1给我这个:在此处输入图片说明

自动选择(忽略bin范围)可实现以下功能:在此处输入图片说明

数据在第一张图和第二张图上看起来为O'K,好像数据完整性没有问题。只有箱尺寸0.1(g / t)回答了这个问题:测量结果既不准确也不准确在此处输入图片说明

我的判断:1.地球上没有测量技术可以显示自然现象的真实价值。所有测量值均为近似值,有些接近真实值。它取决于采样设计,校准,人员资格等。2.这就是为什么分布偏斜而不是对称的原因。3.尽管如此,分布的形状至少应近似“钟形”部分。一次响铃(除非有多个地质环境)。4,带仓尺寸操纵的频率分布可以帮助揭示出测量完成的精确度的模式。这样一来,需要实验性地捡拾垃圾箱的大小,而不是在石头上划一条规则。


2
除非您讲出道德准则,否则这更是评论而不是答案。我要说的是:所有规则都是经验法则,有些规则比其他规则具有更多的统计依据,但是如果分布具有很高的偏度或峰度,则大多数规则可能无法满足您的期望。因此,也要运用您的判断力。
尼克·考克斯

2
您已经添加了注释,但是我不清楚是否有任何注释有助于该线程的新细节。1.对我来说很好,但是这里不是问题。2.不遵循1.,因为某些分布几乎是对称的。3.令人怀疑:在许多情况下,预期的形状不是钟形。4.由于原始测量的质量通常从任何直方图上都不明显,但通常最好注意分布的非常精细的结构,因此也令人怀疑。
尼克·考克斯

2.近对称不对称。您不能几乎怀孕:无论怀孕与否。
Sergo Cusiani 2015年

2
当然,但是数据中精确的对称性非常罕见,以至于如果我说过“对称”的话,也可能有人会反对。几乎是对称的很容易。这就是为什么以及我们有偏度度量的原因。
尼克·考克斯

1
注意,但您的评论是笼统的,缺少您现在提供的上下文。反过来,我说“可疑”而不是“错误”。我的主要意见仍然是,您的答案并没有真正增加如何选择垃圾箱大小或垃圾箱数量等价的线程。举一个很难解决的例子,是一个问题的旋转,而不是一个答案。
尼克·考克斯
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.