Statistics 添加新数据点时更新数据集的分位数

Statistics 添加新数据点时更新数据集的分位数,statistics,wolfram-mathematica,Statistics,Wolfram Mathematica,假设我有一个数字列表,我已经计算了q-(使用)。 现在出现了一个新的数据点,我想更新我的q分位数,而不必存储以前数据点的整个列表。 你推荐什么 在最坏的情况下,如果不存储所有以前的数据点,可能就无法完全实现。 在这种情况下,你能想出一些足够好的方法吗?如果你能假设正态性,我的一个想法是使用逆CDF而不是q分位数。 继续跟踪样本方差,然后可以计算InverseCDF[正态分布[sampleMean,sampleVariance],q],它应该是值,使得值的分数q更小,这就是q分位数 (我知道贝里萨

假设我有一个数字列表,我已经计算了q-(使用)。 现在出现了一个新的数据点,我想更新我的q分位数,而不必存储以前数据点的整个列表。 你推荐什么

在最坏的情况下,如果不存储所有以前的数据点,可能就无法完全实现。
在这种情况下,你能想出一些足够好的方法吗?

如果你能假设正态性,我的一个想法是使用逆CDF而不是q分位数。 继续跟踪样本方差,然后可以计算InverseCDF[正态分布[sampleMean,sampleVariance],q],它应该是值,使得值的分数q更小,这就是q分位数

(我知道贝里萨里乌斯也是这么想的。
这是他指向的链接:)

除非您知道基础数据来自某个分布,否则不保留原始数据就不可能更新任意分位数。正如其他人所建议的,您可以假设数据具有某种分布,并以这种方式存储分位数,但这是一种相当严格的方法


或者,你有没有想过在Mathematica之外的地方编写这个程序?例如,您可以为数据点创建一个类,该类包含(1)双精度值和(2)数据输入时的时间戳。在这些数据点类的SortedList(基于值进行比较)中,您可以通过简单地引用数据点的索引快速获得分位数。想得到历史分位数吗?只需在排序列表中筛选时间戳。

提醒我。我想知道是否可以在这里做类似的事情。你能解释一下为什么不想存储数据点吗?在我的例子中,我实际上想要一个列表,列出添加每个新数据点时的分位数。天真的实现可能是O(n^2),并且它似乎应该在O(n)中是可行的。但是,即使我的案例是深奥的,出于通常的原因,你可能需要一个在线算法(尽管在这种情况下,我想这只是归结为存储限制,这并不是你问题的答案!)!