public static void Main(string[] args)
double[] xVal = new double[]{0, 1, 2};
double[] yVal = new double[]{20, 22, 24};
LinearRegression(xVal, yVal, 0, xVal.Length, out rsquared, out yintercept, out slope);
Console.WriteLine("offset: " + yintercept);
Console.WriteLine("gain: " + slope);
Console.WriteLine(yintercept + (slope * 15));
public static void LinearRegression(double[] xVals, double[] yVals, int inclusiveStart, int exclusiveEnd, out double rsquared, out double yintercept, out double slope)
double sumCodeviates = 0;
double count = exclusiveEnd - inclusiveStart;
for (int ctr = inclusiveStart; ctr < exclusiveEnd; ctr++)
ssX = sumOfXSq - ((sumOfX * sumOfX) / count);
ssY = sumOfYSq - ((sumOfY * sumOfY) / count);
double RNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);
double RDenom = (count * sumOfXSq - (sumOfX * sumOfX)) * (count * sumOfYSq - (sumOfY * sumOfY));
sCo = sumCodeviates - ((sumOfX * sumOfY) / count);
double meanX = sumOfX / count;
double meanY = sumOfY / count;
double dblR = RNumerator / Math.Sqrt(RDenom);
yintercept = meanY - ((sCo / ssX) * meanX);