我想创建一个“平衡直方图”,每个 bin 中的数据点数量大致相同。我的第二个限制是我应该只有 4 个垃圾箱。鉴于以下数字列表,我该如何实现?
-2.153, -1.732, -1.699, -1.559, -1.355, -1.306, -1.151, -1.129, -0.636, 0.4085, 0.5408, 0.5731, 0.5842, 0.6206, 0.8175, 0.8274, 0.8710, 1.3214, 1.5552, 2.2342
谢谢!
我想创建一个“平衡直方图”,每个 bin 中的数据点数量大致相同。我的第二个限制是我应该只有 4 个垃圾箱。鉴于以下数字列表,我该如何实现?
-2.153, -1.732, -1.699, -1.559, -1.355, -1.306, -1.151, -1.129, -0.636, 0.4085, 0.5408, 0.5731, 0.5842, 0.6206, 0.8175, 0.8274, 0.8710, 1.3214, 1.5552, 2.2342
谢谢!
为了跟进@mbq 的建议,下面是使用 R 执行此操作的代码:
require(Hmisc)
x <- c(-2.153, -1.732, -1.699, -1.559, -1.355
, -1.306, -1.151, -1.129, -0.636, 0.4085
, 0.5408, 0.5731, 0.5842, 0.6206, 0.8175
, 0.8274, 0.8710, 1.3214, 1.5552, 2.2342
)
eqBins <- cut2(x, g = 4)
#what are the bins and how many in each?
> as.data.frame(table(eqBins))
eqBins Freq
1 [-2.153,-1.306) 5
2 [-1.306, 0.541) 5
3 [ 0.541, 0.827) 5
4 [ 0.827, 2.234] 5
您正在寻找分位数;在 R 中有一个函数quantile可以为你计算它们;HmiscR 包提供了cut2显式计算此类“平衡箱”的功能。
这里有一个直方图,其中 R 代码使用 quantile 函数进行大致相等的计数。
R 附带的 lattice 包中还有 histogram 函数。比较:
library("lattice")
histogram(islands^(1/4)) # equal width
histogram(islands^(1/4),breaks=NULL,equal.widths=FALSE) # approx. equal area