Ecco una reimplementazione in base my answer at math.SE ei simple linear regression formule dalla pagina di Wikipedia:
function growth (known_y, known_x, new_x, use_const) {
// default values for optional parameters:
if (typeof(known_x) == 'undefined') {
known_x = [];
for (var i = 1; i <= known_y.length; i++) known_x.push(i);
}
if (typeof(new_x) == 'undefined') {
new_x = [];
for (var i = 1; i <= known_y.length; i++) new_x.push(i);
}
if (typeof(use_const) == 'undefined') use_const = true;
// calculate sums over the data:
var n = known_y.length;
var avg_x = 0; var avg_y = 0; var avg_xy = 0; var avg_xx = 0;
for (var i = 0; i < n; i++) {
var x = known_x[i]; var y = Math.log(known_y[i]);
avg_x += x; avg_y += y; avg_xy += x*y; avg_xx += x*x;
}
avg_x /= n; avg_y /= n; avg_xy /= n; avg_xx /= n;
// compute linear regression coefficients:
if (use_const) {
var beta = (avg_xy - avg_x*avg_y)/(avg_xx - avg_x*avg_x);
var alpha = avg_y - beta*avg_x;
} else {
var beta = avg_xy/avg_xx;
var alpha = 0;
}
// console.log("alpha = " + alpha + ", beta = " + beta);
// compute and return result array:
var new_y = [];
for (var i = 0; i < new_x.length; i++) {
new_y.push(Math.exp(alpha + beta * new_x[i]));
}
return new_y;
}
Here's a demo on ideone.com. È possibile confrontare l'output con il foglio di lavoro demo sul Excel GROWTH
documentation page.
Si noti che la stabilità numerica del ciclo di sommatoria nell'algoritmo potrebbe essere migliorata utilizzando tecniche come quelle descritte nella pagina di Wikipedia per calculating the variance, come Kahan summation. Tuttavia, per semplici esempi come questo, il ciclo sommativo naive è abbastanza buono.
fonte
2013-01-04 19:46:52
Si potrebbe chiedere [math.stackexchange.com] (http://math.stackexchange.com) –
Grazie per il suggerimento. Andrà bene! –