在R中有效地计算百分位数

时间:2013-12-31 19:41:21

标签: r distribution percentage rank cdf

我正在开发一个R包,要求我报告每个返回值的百分位数。但是,我所拥有的分布很大(约1000万个值)。

我目前正在这样做的方法是生成一个ecdf函数,将该函数保存到文件中并在需要时在包中读取它。这是有问题的,因为我保存的文件最终变得很大(~120mb)并且需要很长时间才能重新加载:

f = ecdf(rnorm(10000000))
save(f, file='tmp.Rsav')

无论如何通过近似R中的百分等级来提高效率吗?

由于

1 个答案:

答案 0 :(得分:2)

在下采样的发行版上做一个ecdf:

> items <- 100000
> downsample <- 100 # downsample by a factor of 100
> data <- rnorm(items)
> data.down <- sort(data)[(1:(items / downsample)) * downsample] # pick every 100th
> round(ecdf(data.down)(-5:5), 2)
 [1] 0.00 0.00 0.00 0.02 0.16 0.50 0.84 0.98 1.00 1.00 1.00
> round(ecdf(data)(-5:5), 2)
 [1] 0.00 0.00 0.00 0.02 0.16 0.50 0.84 0.98 1.00 1.00 1.00

请注意,您可能希望稍微考虑下采样,因为此处的示例将返回略有偏见的答案,但一般策略应该有效。