当我运行代码时
hist(1:5)
或
hist(c(1,2,3,4,5))
生成的直方图显示,当阵列中只有一个“1”时,第一个数字“1”的频率为2。
我也试过
hist(c(1,2,3,7,7,7,9))
但它仍然表明第一个柱子比第二个柱子高两倍
然而,当我跑
时 hist(c(1:10))
每个条的频率高度相等
我对统计数据和R很新,所以我不知道这背后的原因是什么。我希望有人可以帮我澄清为什么会这样。谢谢
答案 0 :(得分:12)
以第一个例子hist(1:5)
为例,您有五个数字,这些数字被放入四个箱子中。因此,这五个中的两个被归为一个。
直方图在2
,3
,4
和5
处有中断,因此您可以合理地推断出hist
的定义数字被绘制,是:
#pseudocode
if (i <= break) { # plot in bin }
您可以手动指定中断来解决此问题:
hist(1:5, breaks=0:5)
答案 1 :(得分:8)
试试这个:
> trace("hist.default", quote(print(fuzzybreaks)), at = 25)
Tracing function "hist.default" in package "graphics"
[1] "hist.default"
>
> out <- hist(1:5)
Tracing hist.default(1:5) step 25
[1] 0.9999999 2.0000001 3.0000001 4.0000001 5.0000001
> out$count
[1] 2 1 1 1
显示它正在使用的实际fuzzybreaks
值以及每个bin中的计数。显然,第一个bin中有两个点(0.9999999
和2.0000001
之间),每个其他bin中有一个点。
与:比较:
> out <- hist(1:5, breaks = 0:5 + 0.5)
Tracing hist.default(1:5, breaks = 0:5 + 0.5) step 25
[1] 0.4999999 1.5000001 2.5000001 3.5000001 4.5000001 5.5000001
> out$count
[1] 1 1 1 1 1
现在每个垃圾箱中都有一个点。
答案 2 :(得分:5)
您所看到的是,hist将1:5
放入四个区间。所以会有一个有2个计数的垃圾箱。
如果您指定截止点,请执行以下操作:
hist(1:5, breaks=(c(0.5, 1.5, 2.5, 3.5, 4.5 , 5.5)))
然后你会得到你期望的行为。