Linear function
by darkguy2008
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/numjs/0.14.2/numjs.js"></script>
See Console Log!
JavaScript
var code = function() {
var x = nj.array([13, 14, 15, 16, 17, 18]).reshape(6, 1);
var yRaw = [0.015, 0.01, 0.005, 0.002, 0.001, 0.0005];
var y = nj.array(nj.log(yRaw));
//var w = 100 + (1 * 4) + 10 // Weight the various data points
var w = [100, 1, 1, 1, 1, 10];
console.log('Transformed data', x.selection.data, y.selection.data);
var array = [];
for (var i = 0; i < 6; i++)
array.push([x.selection.data[i], y.selection.data[i]]);
var regr = weightedLinearRegression(array, w);
var a = regr.equation[0];
var b = regr.equation[1];
var f = (x) => { return a * x + b };
for (var i = 1; i <= 19; i++)
console.log(i, f(i));
}
var weightedLinearRegression = function (data, weights) {
var sums = { xw: 0, x: 0, yw: 0, y: 0, a: 0, b: 0 };
// compute the weighted averages
for (var i = 0; i < data.length; i++) {
sums.xw += data[i][0] * weights[i];
sums.yw += data[i][1] * weights[i];
sums.x += data[i][0];
sums.y += data[i][1];
}
var weightedX = sums.xw / sums.x;
var weightedY = sums.yw / sums.y;
// compute the gradient and intercept
for (var i = 0; i < data.length; i++) {
sums.a += (data[i][1] - weightedY) * (data[i][0] - weightedX) * weights[i];
sums.b += (data[i][0] - weightedX) * (data[i][0] - weightedX) * weights[i];
}
var gradient = sums.a / sums.b;
var intercept = (weightedY - weightedX) * gradient;
var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x + ' + Math.round(intercept * 100) / 100;
var results = [];
//interpolate result
for (var i = 0, len = data.length; i < len; i++) {
var coordinate = [data[i][0], data[i][0] * gradient + intercept];
results.push(coordinate);
}
return { equation: [gradient, intercept], points: results, string: string };
}
code();