R中的密度直方图

时间:2019-09-22 20:53:17

标签: r histogram

我是R和概率统计的新手。我对直方图有疑问...

page.on('console', msg => {
  for (let i = 0; i < msg.args().length; ++i)
    console.log(`${i}: ${msg.args()[i]}`);
});
page.evaluate(() => console.log('hello', 5, {foo: 'bar'}));

它显示的直方图如下图:

enter image description here

如果y轴是密度,则总数应为%100,我错了吗?
但是在直方图中,我可以看到它大于%100。

3 个答案:

答案 0 :(得分:0)

曲线下的区域应该为1。由于您的框看起来宽度为1/2,所以高度的总和应为2。要使此意义更大,请使用{{ 1}}参数breaks

hist

也许更好

hist(rbinom(10000, 10, 0.1), freq=FALSE, breaks = 5)

Histogram

答案 1 :(得分:0)

您可以积分根据样品估算的密度函数。答案大约是1,所以没有矛盾。

set.seed(444)

s <- rbinom(10000, 10, 0.1)
dens_s <- table(s)/sum(table(s))
sum(as.numeric(names(dens_s))*dens_s)

答案 2 :(得分:0)

函数hist返回一个列表对象,其中包含回答问题所需的所有信息。

我将设置RNG种子以使示例可重现。

set.seed(1234)
h <- hist(rbinom(10000, 10, 0.1), freq=FALSE)

str(h)
#List of 6
# $ breaks  : num [1:11] 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 ...
# $ counts  : int [1:10] 3448 3930 0 1910 0 588 0 112 0 12
# $ density : num [1:10] 0.69 0.786 0 0.382 0 ...
# $ mids    : num [1:10] 0.25 0.75 1.25 1.75 2.25 2.75 3.25 3.75 4.25 4.75
# $ xname   : chr "rbinom(10000, 10, 0.1)"
# $ equidist: logi TRUE
# - attr(*, "class")= chr "histogram"

相关列表成员为breaksdensity

  1. breaks是一个长度为11的向量,因此有10个bin。
  2. density是一个长度为10的向量,每个向量对应于一个bin。

现在通过将垃圾箱长度乘以各自的密度来计算每个条形的面积。

diff(h$breaks)    # bins lengths
# [1] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
h$density*diff(h$breaks)
# [1] 0.3448 0.3930 0.0000 0.1910 0.0000 0.0588 0.0000 0.0112 0.0000 0.0012

总面积:

sum(h$density*diff(h$breaks))
#[1] 1