Algorithm 从数据子集计算平均值和方差的在线算法

Algorithm 从数据子集计算平均值和方差的在线算法,algorithm,statistics,mean,variance,online-algorithm,Algorithm,Statistics,Mean,Variance,Online Algorithm,我将此作为在线计算可变长度数据数组的方差和平均值的参考: 数据是由16位无符号值组成的集合,这些值可以有任意数量的样本(实际上,最小值约为20个样本,最大值约为2e32个样本) 由于数据集可能太大而无法存储,我已经使用上述C语言的在线算法实现了这一点,并验证了它的计算是否正确 问题开始于应用程序的以下要求:除了计算整个集合的方差和均值,我还需要计算一个单独的结果(均值和方差)对于由中间50%的值组成的总体,即忽略前25%和后25%的样本。样本数事先未知,因此我必须在线计算附加集 我知道我可以通过

我将此作为在线计算可变长度数据数组的方差和平均值的参考:

数据是由16位无符号值组成的集合,这些值可以有任意数量的样本(实际上,最小值约为20个样本,最大值约为2e32个样本)

由于数据集可能太大而无法存储,我已经使用上述C语言的在线算法实现了这一点,并验证了它的计算是否正确

问题开始于应用程序的以下要求:除了计算整个集合的方差和均值,我还需要计算一个单独的结果(均值和方差)对于由中间50%的值组成的总体,即忽略前25%和后25%的样本。样本数事先未知,因此我必须在线计算附加集

我知道我可以通过单独计算来加减一个子集,并使用这里描述的操作符+实现:(减去偏度和峰度细节,对此我没有用处)。减法可以由此导出


问题是:我如何维护这些子集?或者我应该尝试另一种技术吗?

如果空间是一个问题,并且您愿意接受近似值,我将从以下论文中的算法开始:


您可以使用该算法计算到目前为止观察到的第25个和第75个百分位的运行估计值。然后,您可以将介于这两个百分位之间的观察值输入John D Cook文章中介绍的Welford算法,以计算运行平均值和方差。

一个问题是,即使知道25%和75%是相当困难/复杂的。好吧,没有简单的分位数估计在线算法有很好的保证。一个近似值就足够了,但我不知道如何输入(你解释的最后部分)@AlexandrePereirannes:你去掉所有小于第25百分位和大于第75百分位的数据,然后计算其他数据的运行平均值和标准偏差。我需要的是计算所有采集样本的第二和第三季度,即如果我采集了1000个样本,我需要计算所有sa的平均值和标准差样本数介于250和750之间。我无法存储足够的样本(假设1000个样本最终可能是1e32)对于第二次计算,我理解你的建议是,我最终会计算大多数样本的中间50%,即使是在整个集合的开始和结束时,这些都是我想忽略的。我不确定我是否清楚,也不知道我是否理解你所说的。@AlexandrePereirannes:正如我所说的,这s是一个近似值。如果您需要确切的答案,则需要存储整个集合。为此,您可以利用数据只能包含65536个不同值的事实,只需计算您看到的每个值的数量,即la计数排序().我想一个近似值就足够了,我只是不明白你的想法:你是不是建议我在我感兴趣的领域中取相等数量的百分位数,然后计算(估计的)平均值和标准偏差?如果是这样的话,谢谢他们,因为我想这就足够了,至少只要我能控制错误,正如你指出的论文所建议的那样。