2011-07-29 2 views
2

数値のリストがあり、q- quantileQuantileを使用)を計算したとします。 新しいデータポイントが来て、以前のデータポイントのリスト全体を保存せずにq-quantileを更新したいと思います。 あなたは何をお勧めしますか?新しいデータポイントが追加されたときのデータセットの分位数を更新する

おそらく、最悪の場合、以前のすべてのデータポイントを保存せずに正確に行うことはできません。 その場合、十分にうまくいくと思われることはありますか?

+1

[** this **](http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm)をご報告ください。似たようなことができるかどうか疑問に思う –

+0

データポイントを保存したくない理由を説明できますか? –

+1

私の場合は、実際には、それぞれ新しいデータポイントが追加されたときの分位数のリストがほしいと思う。素朴な実装はおそらくO(n^2)であり、O(n)で実行可能でなければならないようです。しかし、私のケースが難解であっても、これはオンラインアルゴリズムが必要な通常の理由のために有用なもののように見えます[http://en.wikipedia.org/wiki/Online_algorithm]このケースでは、あなたの質問に対する答えはあまりありません。 – dreeves

答えて

1

私が持っていた考え方の1つは、正規性を仮定することができれば、q分位数の代わりに逆CDFを使用することです。 サンプルの分散を追跡し、InverseCDF [NormalDistribution [sampleMean、sampleVariance]、q]を計算することができます。この値は、値の小数点以下が小さくなるようにする必要があります。 。

(私はベリサリウスが同じラインに沿って考えていた参照 ここで彼は指さリンクです:。http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm

1

あなたの基になるデータは、いくつかのディストリビューションから来ていることを知っていなければ、せずに、任意の分位数を更新することはできませんが、元のデータを保持します。他の人が示唆しているように、データにある種の分布があり、このように分位数を格納すると仮定することはできますが、これはむしろ限定的なアプローチです。

また、Mathematica以外のどこかでこれをプログラミングすることを考えましたか?たとえば、(1)Double値と(2)データが入ったときのタイムスタンプを含むデータポイント用のクラスを作成することができます。これらのデータポイントクラスのSortedList(値に基づいて比較)では、単純にデータポイントのインデックスを参照することによって、非常に高速な分位点が得られます。歴史的分位を取得したいですか?並べ替えられたリストのタイムスタンプをフィルタリングするだけです。

関連する問題