如何建立“平衡直方图”?

机器算法验证 r 直方图
2022-03-19 06:57:39

我想创建一个“平衡直方图”,每个 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

谢谢!

3个回答

为了跟进@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