Skip to content

Instantly share code, notes, and snippets.

@oliverjumpertz
Created January 5, 2021 19:49
Show Gist options
  • Save oliverjumpertz/e97ba51a942e27531c832563c6bef95c to your computer and use it in GitHub Desktop.
Save oliverjumpertz/e97ba51a942e27531c832563c6bef95c to your computer and use it in GitHub Desktop.
Simple linear regression implemented in JavaScript
const inputArray = [
{
squareMeters: 200,
priceInDollars: 190000
},
{
squareMeters: 100,
priceInDollars: 90000
},
{
squareMeters: 115,
priceInDollars: 120000
},
{
squareMeters: 150,
priceInDollars: 140000
},
{
squareMeters: 140,
priceInDollars: 125000
}
];
function linearRegression(inputArray, xLabel, yLabel) {
const x = inputArray.map((element) => element[xLabel]);
const y = inputArray.map((element) => element[yLabel]);
const sumX = x.reduce((prev, curr) => prev + curr, 0);
const avgX = sumX / x.length;
const xDifferencesToAverage = x.map((value) => avgX - value);
const xDifferencesToAverageSquared = xDifferencesToAverage.map(
(value) => value ** 2
);
const SSxx = xDifferencesToAverageSquared.reduce(
(prev, curr) => prev + curr,
0
);
const sumY = y.reduce((prev, curr) => prev + curr, 0);
const avgY = sumY / y.length;
const yDifferencesToAverage = y.map((value) => avgY - value);
const xAndYDifferencesMultiplied = xDifferencesToAverage.map(
(curr, index) => curr * yDifferencesToAverage[index]
);
const SSxy = xAndYDifferencesMultiplied.reduce(
(prev, curr) => prev + curr,
0
);
const slope = SSxy / SSxx;
const intercept = avgY - slope * avgX;
return (x) => intercept + slope * x;
}
const housePrice = linearRegression(inputArray, "squareMeters", "priceInDollars");
console.log(housePrice(100));
// => 94666.38513513515
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment