在R中,可以绘制直方图并将其属性保存到变量:
> h1=hist(c(1,1,2,3,4,5,5), breaks=0.5:5.5)
然后可以阅读这些属性:
> h1
$breaks
[1] 0.5 1.5 2.5 3.5 4.5 5.5
$counts
[1] 2 1 1 1 2
$density
[1] 0.2857143 0.1428571 0.1428571 0.1428571 0.2857143
$mids
[1] 1 2 3 4 5
$xname
[1] "c(1, 1, 2, 3, 4, 5, 5)"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
这些属性如何影响直方图?到目前为止,我已经想到了以下内容:
$breaks
和$counts
之间的关系。 $breaks
表示绘制数据可能下降的时间间隔,$counts
表示已落入此时间间隔的数据量,例如:
[]表示closed interval(包括端点)
()表示open interval(不包括端点)
BREAKS : COUNTS
[0.5-1.5] : 2 # There are two 1 which falls into this interval
(1.5-2.5] : 1 # There is one 2 which falls into this interval
(2.5-3.5] : 1 # There is one 3 which falls into this interval
(3.5-4.5] : 1 # There is one 4 which falls into this interval
(4.5-5.5] : 2 # There are two 5 which falls into this interval
$breaks
和$density
之间的关系基本上与上述相同,但以百分比表示,例如:
BREAKS : DENSITY
[0.5-1.5] : 0.2857143 # This interval covers cca 28% of plot
(1.5-2.5] : 0.1428571 # This interval covers cca 14% of plot
(2.5-3.5] : 0.1428571 # This interval covers cca 14% of plot
(3.5-4.5] : 0.1428571 # This interval covers cca 14% of plot
(4.5-5.5] : 0.2857143 # This interval covers cca 28% of plot
当然,当你总结所有这些价值时,你会得到1:
> sum(h1$density)
[1] 1
以下代表x轴名称:
$xname
[1] "c(1, 1, 2, 3, 4, 5, 5)"
但剩下的工作做了什么,特别是$mids
?
$mids
[1] 1 2 3 4 5
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
同样help(hist)
会返回很多其他内容,不应该在上面的输出中列出,如果不是为什么?正如following文章
默认情况下,bin计数包括小于或等于bin的值 正确的突破点,严格大于垃圾箱的左侧休息时间 点,最左边的bin,包括它的左断点 点。
所以关注:
h1=hist(c(1,1,2,3,4,5,5,1.5), breaks=0.5:5.5)
将返回直方图,其中1.5将落入0.5-1.5区间。一个"解决方法"是将间隔大小设置得更小,例如。
h1=hist(c(1,1,2,3,4,5,5,1.5), breaks=seq(0.5,5.5,0.1))
但这对我来说似乎不切实际,它还为$counts
和$density
添加了0串,是否有更好的自动方式?
除此之外它还有一个副作用,我无法解释自己:为什么最后一个例子在摘要10中返回而不是1?
> sum(h1$density)
[1] 10
> h1$density[h1$density>0]
[1] 2.50 1.25 1.25 1.25 1.25 2.50
答案 0 :(得分:2)
问题1 $ mids和$ equidist是什么意思: 从帮助文件:
mids:n个细胞中点。
equidist:logical,表示断点之间的距离是否相同。
Q2:是的,有
h1=hist(c(1,1,2,3,4,5,5,1.5), breaks=0.5:5.5)
1.5将属于0.5-1.5类别。如果您希望它属于1.5-2.5类别,您应该使用:
h1=hist(c(1,1,2,3,4,5,5,1.5), breaks=0.49:5.49)
或者更整洁:
h1=hist(c(1,1,2,3,4,5,5,1.5), breaks=0.5:5.5, right=FALSE)
我不确定你想在这里自动化什么,但希望以上回答你的问题。如果没有,请让我更清楚你的问题。
Q3 关于密度为10而不是1,这是因为密度不是频率。从帮助文件:
密度: 值f ^(x [i]),作为估计的密度值。如果全部(diff(break)== 1),则它们是相对频率count / n并且通常满足sum [i; f ^(x [i])(b [i + 1] -b [i])] = 1,其中b [i] = break [i]。
因此,如果您的休息时间不等于1,则密度不会达到1。