我有一串数字:
tmp<- c(round(seq(0, 12000, ((12000 - 0) / round(1500 * .05)))),
round(seq(12000, 18900, ((18900 - 12000) / round(1500 * .1)))),
round(seq(18900, 23300, ((23300 - 18900) / round(1500 * .1)))),
round(seq(23300, 28100, ((28100 - 23300) / round(1500 * .1)))),
round(seq(28100, 33500, ((33500 - 28100) / round(1500 * .1)))),
round(seq(33500, 40000, ((40000 - 33500) / round(1500 * .1)))),
round(seq(40000, 47700, ((47700 - 40000) / round(1500 * .1)))),
round(seq(47700, 56500, ((56500 - 47700) / round(1500 * .1)))),
round(seq(56500, 68300, ((68300 - 56500) / round(1500 * .1)))),
round(seq(68300, 94200, ((94200 - 68300) / round(1500 * .1)))),
round(seq(94200, 200000, ((200000 - 94200) / round(1500 * .05)))))
现在我可以使用geom_density来获得分布的形状。基于密度形状,我如何得到tmp的两个特定值之间的tmp数量的近似计数?
例如,我可以根据实际序列计算tmp中10050到10100之间的值的数量。但我想基于平滑直方图(密度)来计算值的数量,这并不像实际的序列那样线性。我不知道我的翻译是否正确。下面的代码将根据密度估计而不是实际分布来计算'tmp'中的行数。估计是一个概率密度估计,所以你必须乘以它:
-
通过估计的每个bin的宽度,得到每个估计点周围的概率值
-
通过总行数来获得给定范围内的行数的估计值(在本例中,不包括10000到20000)。
'density'是'geom_density'调用的函数,用于获取要绘制的点。
> k <- density(tmp); sum(k$y[which(k$x>10000 & k$x<20000)])*(k$x[2]-k$x[1])*length(tmp)
[1] 199.3722
> length(which(tmp>10000 & tmp<20000))
[1] 202