Обновите квантиль для набора данных при добавлении новой точки данных - PullRequest
2 голосов
/ 30 июля 2011

Предположим, у меня есть список чисел, и я вычислил квантиль q- (используя Квантиль ).Теперь приходит новая точка данных, и я хочу обновить свой q-квантиль, не сохранив весь список предыдущих точек данных.Что бы вы порекомендовали?

Возможно, это невозможно сделать точно, в худшем случае, без сохранения всех предыдущих точек данных.В таком случае, можете ли вы придумать что-нибудь, что будет работать достаточно хорошо?

Ответы [ 2 ]

1 голос
/ 30 июля 2011

Если вы не знаете, что ваши базовые данные поступают из некоторого распределения, невозможно обновить произвольные квантили без сохранения исходных данных.Вы можете, как и предполагали другие, предположить, что данные имеют какое-то распределение и хранить квантили таким образом, но это довольно ограничительный подход.

С другой стороны, вы когда-нибудь думали о программировании этого где-то помимо Mathematica?Например, вы можете создать класс для ваших точек данных, который содержит (1) значение Double и (2) некоторую временную метку для времени поступления данных. В SortedList этих классов точек данных (который сравнивается на основе значения) вы можете получитьквантиль очень быстро, просто ссылаясь на индекс точек данных.Хотите получить исторический квантиль?Просто отфильтруйте временные метки в вашем отсортированном списке.

1 голос
/ 30 июля 2011

Одна идея, которая у меня возникла, если вы можете предполагать нормальность, это использовать обратный CDF вместо q-квантиля.Следите за выборочной дисперсией, когда вы идете, и затем вы можете вычислить InverseCDF [NormalDistribution [sampleMean, sampleVariance], q], которое должно быть значением, таким, чтобы доля значений q была меньше, чем является q-квантиль.

(я вижу, что Велисарий думал так же. Вот ссылка, на которую он указал: http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm)

...