public static class Program
public static void Main()
var xValues = new double[]
var yValues = new double[]
900,800,1000,1050,900,998,895,1100
double rSquared, intercept, slope;
LinearRegression(xValues, yValues, out rSquared, out intercept, out slope);
Console.WriteLine($"R-squared = {rSquared}");
Console.WriteLine($"Intercept = {intercept}");
Console.WriteLine($"Slope = {slope}");
var predictedValue = (slope * 9) + intercept;
Console.WriteLine($"Prediction for 2017: {predictedValue}");
public static void LinearRegression(
if (xVals.Length != yVals.Length)
throw new Exception("Input values should be with the same length.");
double sumCodeviates = 0;
for (var i = 0; i < xVals.Length; i++)
var count = xVals.Length;
var ssX = sumOfXSq - ((sumOfX * sumOfX) / count);
var ssY = sumOfYSq - ((sumOfY * sumOfY) / count);
var rNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);
var rDenom = (count * sumOfXSq - (sumOfX * sumOfX)) * (count * sumOfYSq - (sumOfY * sumOfY));
var sCo = sumCodeviates - ((sumOfX * sumOfY) / count);
var meanX = sumOfX / count;
var meanY = sumOfY / count;
var dblR = rNumerator / Math.Sqrt(rDenom);
yIntercept = meanY - ((sCo / ssX) * meanX);