我计算标准偏差的代码有什么问题?
What is wrong with my code to calculate a standard deviation?
我正在尝试计算一组数字的标准偏差,就像 Excel 使用 STDEVPA() 函数一样,但我没有得到正确的结果。我遵循这个公式:
这是我的[节点]代码:
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。
请注意,我 post 在 Whosebug 而不是 Mathematics 站点上编辑,因为在我看来,这更适合编程而不是数学。如果我在那里post,他们会告诉我在这里post,因为这与编程有关。
如果您 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 函数不会应用于第一个元素。
我正在尝试计算一组数字的标准偏差,就像 Excel 使用 STDEVPA() 函数一样,但我没有得到正确的结果。我遵循这个公式:
这是我的[节点]代码:
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。
请注意,我 post 在 Whosebug 而不是 Mathematics 站点上编辑,因为在我看来,这更适合编程而不是数学。如果我在那里post,他们会告诉我在这里post,因为这与编程有关。
如果您 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 函数不会应用于第一个元素。