gpt4 book ai didi

R 历史 : relationship between 'breaks' value and number/size of bins

转载 作者:行者123 更新时间:2023-12-01 23:37:57 25 4
gpt4 key购买 nike

关于 R/中的 HIST/hist() 函数 谁能帮我找到:

一个非常简单的定义来解释“breaks”的指定值与直方图中产生的 bin 数量之间的关系?

例如,我使用 R 工具提供的基本数据集:

data(mtcars)
hist(mtcars$mpg, break=3) --> will draw 3 bins (really??? weird!)
hist(mtcars$mpg, break=4) --> will draw 5 bins
hist(mtcars$mpg, break=5) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=6) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=7) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=8) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=9) --> will draw 11 bins (why???)

为什么breaks = 4,5,6,7,8 会导致相同数量的bins 而breaks=3 只导致4 个bins,...?

您可以在 ?hist 或以下链接中找到 R 文档:
http://localhost//library/graphics/html/hist.html

并没有真正的帮助,我试图在“breaks=”中指定的值、bin 的大小和 bin 的数量之间建立任何联系,但我找不到一个简单或简单的公式或解释来扣除这种“链接”。

我只是不明白“breaks=3”是什么意思?
它的意思是“3 次休息”还是“每隔 3 个单位休息一次”或完全不同的意思?

我真的很感激任何提示、帮助、任何类型的指针。

谢谢你。

最佳答案

hist 的文档说当您将中断指定为单个数字时(就像您所做的那样)然后

the number is a suggestion only; as the breakpoints will be set to pretty values



如果您点击 pretty 的文档链接它说

The values are chosen so that they are 1, 2 or 5 times a power of 10.



您不能以 1,2、5 或 10 的 4 个均匀间隔的倍数跨越 10 和 35 之间的间隙,因此它选择了 5 个 bin(6 个断点)。如果你真的想要四个均匀间隔的垃圾箱,你可以使用
hist(mtcars$mpg, seq(10,35, length.out=5))

Histogram with 4 bins

请注意,您需要使用 length.out=5 来获得四个 bin(四个起点加上一个额外的端点)。当然,这并没有给出“漂亮”的值(value)。

如果您不喜欢 x 轴上的刻度不与 bin 对齐(我不喜欢),您可以在 hist 中去掉轴。并自己添加它们。
H = hist(mtcars$mpg, seq(10,35, length.out=5), axes=FALSE, ylim=c(0,14))
axis(side=1, at=seq(10,35, length.out=5))
axis(side=2, pretty(0:14))

Histogram 2
breaks的进一步说明

文档 ?hist在休息时说有 5 种类型的值可以用于休息。您正在使用的是:

a single number giving the number of cells for the histogram



但是如上所述,文档补充说:

the number is a suggestion only; the breakpoints will be set to pretty values.



所以当你给 hist参数 breaks=4 ,它知道你想要 4 个 bin,但它也会坚持使用“漂亮”的边界值,即均匀间隔的 1,2 的倍数,10 的幂的 5 倍。端点上也可能存在限制。

让我们研究一下它对您的 mtcars$mpg 数据的作用。
你可以得到很多关于什么的信息 hist是通过保存返回值来做的。我还将抑制直方图的实际绘制,因为现在我只对值感兴趣。
HV = hist(mtcars$mpg, 4, plot=FALSE)

可以打印出HV,看到信息量很大
关于直方图。我们在这里关心的所有内容都存储在 breaks 中.
HV$breaks
[1] 10 15 20 25 30 35

这给出了箱的 6 个边界值(需要 5 个箱
6 个边界值)。但是我们要了 4 个垃圾箱,而不是 5 个!如果分开
将 10-35 范围划分为四个 bin 即可获得边界
10、16.25、22.5、28.75 和 35。这些不是“漂亮”的边界值。
相反, hist使用 pretty函数来为边界找到更好的值,但这意味着它必须放弃使用 4 个 bin。

对于一系列中断值,我们会得到多少个中断点?
让我们尝试 2 次休息,最多 20 次休息。
sapply(2:20, function(n) 
length(hist(mtcars$mpg, n, plot=FALSE)$breaks))
[1] 4 4 6 6 6 6 6 13 13 13 13 13 13 13 13 25 25 25 25

再次注意:4 个断点意味着 3 个 bin。
6 个断点意味着 5 个 bin。只有四种不同
创建的拆分。这些是什么?
unique(lapply(2:20, function(n) hist(mtcars$mpg, n, plot=FALSE)$breaks))
[[1]]
[1] 10 20 30 40
[[2]]
[1] 10 15 20 25 30 35
[[3]]
[1] 10 12 14 16 18 20 22 24 26 28 30 32 34
[[4]]
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

边界变化 10、5 2 或 1 - 漂亮的边界。

如果你想有更多的控制,你需要能够指定
你想要边界的地方。这就是我在上面的例子中所做的。用于指定 breaks 的其他选项之一是:

a vector giving the breakpoints between histogram cells



这是我指定时使用的 seq(10,35, length.out=5) .
但请注意以下值:
seq(10,35, length.out=5)
[1] 10.00 16.25 22.50 28.75 35.00

不漂亮。

所以你可以让它变得简单而漂亮,但没有很好的控制
超过垃圾箱的数量,或者您可以控制数量
以更多的工作和更丑陋的边界为代价的垃圾箱。

关于R 历史 : relationship between 'breaks' value and number/size of bins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com