影响直方图的变量用R

时间:2015-06-21 12:52:46

标签: r histogram

在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

1 个答案:

答案 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。