2

返された値ごとにパーセンタイル ランクを報告する必要がある R パッケージを開発しています。ただし、私が持っている分布は巨大です (〜 1,000 万の値)。

私が現在行っている方法は、関数を生成し、ecdfその関数をファイルに保存し、必要に応じてパッケージで読み取ることです。保存したファイルが最終的に巨大 (~120 MB) になり、読み込みに時間がかかりすぎるため、これは問題があります。

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 に答える