2

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

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

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

无论如何,通过近似 R 中的百分位排名,是否有可能以某种方式提高效率?

谢谢

4

1 回答 1

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

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

于 2013-12-31T20:11:36.070 回答