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
方法似乎正在做一些与这两者完全不同的事情,而且,一些完全奇怪且明显不正确的事情。有谁知道实际的算法是和/或所谓的是什么?
答案 0 :(得分:0)
我向ExtremeOptimization支持团队询问了这个问题,并得到了答复。
该算法来自this paper,它提供了#34;加权方差的定义"在第5节中。WeightedStandardDeviation
函数返回此加权方差的平方根。
我上面提到的关于巨大输出值的行为(也可能是NaN
)是由于一个错误;从我收到的电子邮件:
我们发现double的计算包含一个拼写错误:中心的平方和除以(W-1)而不是W.这会在您的示例中产生极大(或无限)的值。
将在 2017年4月24日发布的更新中修复。