加权移动方差

计算科学 算法 数字 统计数据
2021-11-28 08:06:20

我有一个时间序列,类似于指数加权移动平均线,我想以一种有效的、数值稳定的方式计算指数加权移动标准差或方差。这是在 Octave/MATLAB 中,所以矢量化比循环更好。

https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Weighted_incremental_algorithm给出了一种以数值稳定的方式计算加权方差的增量算法,但在 Octave/MATLAB 的上下文中可能有更有效的矢量化批处理解决方案?维基百科警告说,朴素算法在数值上是不稳定的(https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Na%C3%AFve_algorithm)。

1个回答

我相信我们可以使用向量化形式进行计算,假设一个权重w向量和一个值向量x

wSum = sum(w);
meanx = sum(w .* x) / wSum;
varx = ( sum(w .* x .* x) - wSum * meanx * meanx ) / (wSum - 1);