Skip to content

Instantly share code, notes, and snippets.

@jandk
Created November 21, 2013 10:16
Show Gist options
  • Save jandk/7579198 to your computer and use it in GitHub Desktop.
Save jandk/7579198 to your computer and use it in GitHub Desktop.
static class LinearRegression
{
double[] independent;
double[] independentDiff;
double independentDiffSquaredSum;
double independentMean;
double[] calculate(double[] values)
{
if (values.length != independent.length)
return new double[] { Double.NaN, Double.NaN };
double mean = mean(values);
double sum = 0;
for (int i = 0; i < values.length; i++)
{
final double square = (values[i] - mean) * independentDiff[i];
sum += square;
}
final double m = sum / independentDiffSquaredSum;
final double q = mean - (m * independentMean);
return new double[] { m, q };
}
double[][] calculate(double[][] values)
{
double[][] results = new double[values.length][];
for (int i = 0; i < values.length; i++)
results[i] = calculate(values[i]);
return results;
}
double mean(double[] values)
{
double sum = 0;
for (int i = 0; i < values.length; i++)
sum += values[i];
return sum / values.length;
}
void setIndependent(double[] values)
{
independent = values.clone();
independentMean = mean(independent);
independentDiff = new double[independent.length];
for (int i = 0; i < independent.length; i++)
independentDiff[i] = independent[i] - independentMean;
independentDiffSquaredSum = 0;
for (int i = 0; i < independentDiff.length; i++)
independentDiffSquaredSum += independentDiff[i] * independentDiff[i];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment