繁体   English   中英

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

[英]What is wrong with my code to calculate a standard deviation?

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

在此处输入图片说明

这是我的[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而不是Mathematics网站上发布的,因为我认为这比数学更适合编程。 如果我在这里发布,他们会告诉我在这里发布,因为这与编程有关。

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

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);

有关更多详细信息,请参见下划线文档 特别要注意的是,在不通过该附加参数的情况下计算平均值时,事情就可以解决,因为在这种情况下,iteratee函数将不会应用于第一个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM