fit function
Least-Squares fitting the points (x,y) to a line y : x -> a+b*x, returning its best fitting parameters as (a, b) tuple, where a is the intercept and b the slope.
Implementation
Tuple2<double, double> fit(List<double> x, List<double> y) {
if (x.length != y.length) {
throw ArgumentError(messages.sampleVectorsSameLength);
}
if (x.length <= 1) {
throw ArgumentError(messages.regressionNotEnoughSamples);
}
// First Pass: Mean (Less robust but faster than ArrayStatistics.Mean)
double mx = 0.0;
double my = 0.0;
for (int i = 0; i < x.length; i++) {
mx += x[i];
my += y[i];
}
mx /= x.length;
my /= y.length;
// Second Pass: Covariance/Variance
double covariance = 0.0;
double variance = 0.0;
for (int i = 0; i < x.length; i++) {
double diff = x[i] - mx;
covariance += diff * (y[i] - my);
variance += diff * diff;
}
var b = covariance / variance;
return Tuple2<double, double>(my - b * mx, b);
}