WeightedStandardDeviation(在ExtremeOptimization库中)实际*做什么*?

时间:2017-03-31 21:13:55

标签: c# .net algorithm extreme-optimization

Extreme Optimization .NET数学和统计库提供了一个名为WeightedStandardDeviation的函数,the documentation states

  

返回变量的平均值,其中观察值由指定的向量加权。

这显然(错误地)从the documentation for the related WeightedMean method复制并粘贴。没有提供有关实际算法的其他详细信息。

我找不到任何证据表明加权标准差存在标准定义。 This Math.SE answer表示实际上存在多个候选定义。

作为一个具体的例子,当我真正尝试使用该方法时,我看到了一个非常奇怪的答案。

给出以下值和权重:

values = [28, 29, 30, 31, 32, 33, ]
weights = [0.00588121386769639, 0.107841991196409, 0.374376106764772, 0.388925647336988, 0.116838473897444, 0.00613656693669066, ]

我明白了:

WeightedStandardDeviation(values, weights) == 58926371.6549313

这显然是荒谬的;加权标准差的定义不应超过样本值所包含的总范围。

上面的Math.SE答案引用this paper,它为加权标准差提供了几个候选定义。使用第一个定义,我计算了约0.1285的加权SD。

我还尝试将每个权重乘以2 ^ 16并舍入到最接近的整数,并将它们视为正常(未加权)标准差计算的“计数”。我通过这种方式获得了大约0.878的值。

因此,WeightedStandardDeviation方法似乎正在做一些与这两者完全不同的事情,而且,一些完全奇怪且明显不正确的事情。有谁知道实际的算法和/或所谓的是什么?

1 个答案:

答案 0 :(得分:0)

我向ExtremeOptimization支持团队询问了这个问题,并得到了答复。

算法

该算法来自this paper,它提供了#34;加权方差的定义"在第5节中。WeightedStandardDeviation函数返回此加权方差的平方根。

错误

我上面提到的关于巨大输出值的行为(也可能是NaN)是由于一个错误;从我收到的电子邮件:

  

我们发现double的计算包含一个拼写错误:中心的平方和除以(W-1)而不是W.这会在您的示例中产生极大(或无限)的值。

将在 2017年4月24日发布的更新中修复