我的代码计算标准偏差有什么问题?

时间:2015-01-23 22:39:35

标签: node.js math standard-deviation

我尝试使用STDEVPA()函数计算一组数字的标准偏差,但是我没有得到正确的结果。我遵循这个公式:

enter image description here

这是我的[Node]代码:

var _ = require('underscore');

var prices = [
    1.37312,
    1.35973,
    1.35493,
    1.34877,
    1.34853,
    1.35677,
    1.36079,
    1.36917,
    1.36769,
    1.3648,
    1.37473,
    1.37988,
    1.37527,
    1.38053,
    1.37752,
    1.38652,
    1.39685,
    1.39856,
    1.39684,
    1.39027
];

var standardDeviation = 0;

var average = _(prices).reduce(function(total, price) {
    return total + price;
}) / prices.length;

var squaredDeviations = _(prices).reduce(function(total, price) {
    var deviation = price - average;
    var deviationSquared = deviation * deviation;

    return total + deviationSquared;
});

var standardDeviation = Math.sqrt(squaredDeviations / prices.length);

console.log(standardDeviation);

当我运行时,我得到0.26246286981807065,而我应该得到0.0152。

请注意,我发布在StackOverflow而不是数学网站上,因为在我看来,这更适合编程而不是数学。如果我在那里发帖,他们会告诉我在这里发帖,因为这与编程有关。

1 个答案:

答案 0 :(得分:3)

如果您在console.log(total)的计算中squaredDeviations,则会看到您开始使用值1.37312,即列表中的第一件事。你需要明确地告诉它从0开始,这是第三个可选的reduce参数。只需替换:

var squaredDeviations = _(prices).reduce(function(total, price) {
    var deviation = price - average;
    var deviationSquared = deviation * deviation;

    return total + deviationSquared;
});

var squaredDeviations = _(prices).reduce(function(total, price) {
    var deviation = price - average;
    var deviationSquared = deviation * deviation;

    return total + deviationSquared;
}, 0);

有关详细信息,请参阅underscore documentation。特别要注意的是,在计算均值时不会传递这个附加参数,因为在所述情况下,iteratee函数不会应用于第一个元素。