如何在 R 中执行非等间距直方图?

机器算法验证 r 直方图
2022-03-28 03:59:44

来自hist 的 R 文档

R 的默认等间距中断(也是默认值)是绘制由中断定义的单元格中的计数。因此,矩形的高度与落入单元格的点数成正比,如果断点等距,其面积也是如此。

非等间距中断的默认设置是给出区域一的图,其中矩形的面积是落在单元格中的数据点的分数。

那么..我如何让 hist 绘制非等间距的休息?听起来好像它会计算休息时间以结束区域一,但我没有看到选项。

编辑:另外,什么是推荐的方法(在 R 中)做非等间距直方图?一个典型的情况是数据是尖峰的,导致一个或几个单元格中的所有操作,无论有多少被作为“中断”给出。另一个是两个活动区域,由大面积的零隔开,这意味着无论有多少次休息,你看到的都是平坦的,有两个巨大的窄尖峰。或者更糟糕的是,一个活动区域,然后是另一个活动较少的区域,这导致图表非常宽和平坦。

3个回答

Denby 和 Mallows 2009 未封闭 链接提供了一种称为“对角线切割直方图”的好方法,并在其补充材料中提供了一个功能“dhist”(可在上面的链接中获得)。

这是摘要:

在构建直方图时,通常使所有条形具有相同的宽度。也可以选择使它们都具有相同的区域。这两种选择具有互补的优势和劣势;等宽直方图在高密度区域过平滑,在识别尖峰方面较差;等面积直方图在低密度区域过平滑,因此不能识别异常值。我们描述了一种避免这两个缺陷的折衷方法。我们将直方图视为一种探索工具,而不是对密度的估计。我们认为,依赖积分均方误差的渐近线会导致选择 bin-width 的建议不合适

以及比较 a) cdf、b) 等面积直方图、c) 等 bin 宽度直方图和 d) dhist 的图:

在此处输入图像描述

洛林·丹比,科林·马洛斯。计算和图形统计杂志。2009 年 3 月 1 日,18(1):21-31。doi:10.1198/jcgs.2009.0002。

您会注意到breaks作为函数的一部分有一个参数hist(),默认设置为“Sturges”。您还可以设置自己的断点并使用它们来代替默认的 sturges 算法,如下所示:

breakpoints <- c(0, 1, 10, 11, 12)
hist(data, breaks=breakpoints)

如果您一直阅读到底部,那么还有几个非等距中断的示例。

更新:这可能不是您问题的直接答案,但您可以使用与直方图不同的方法(即图表)。就个人而言,我不觉得直方图非常有用。相反,您可以尝试kernel density plot,我认为这可以解决您列出的前两种情况(我不知道如何摆脱第三种情况)。在 R 中,代码为:plot(density(data)).

一种简单的解决方案是使用分位数作为中断:

x <- rnorm(100)
hist(x)
hist(x, breaks = quantile(x, 0:10 / 10))