*/
private static XYDataset regress(XYSeriesCollection data) {
// Determine bounds
double xMin = Double.MAX_VALUE, xMax = 0;
for (int i = 0; i < data.getSeriesCount(); i++) {
XYSeries ser = data.getSeries(i);
for (int j = 0; j < ser.getItemCount(); j++) {
double x = ser.getX(j).doubleValue();
if (x < xMin) {
xMin = x;
}
if (x > xMax) {
xMax = x;
}
}
}
// Create 2-point series for each of the original series
XYSeriesCollection coll = new XYSeriesCollection();
for (int i = 0; i < data.getSeriesCount(); i++) {
XYSeries ser = data.getSeries(i);
int n = ser.getItemCount();
double sx = 0, sy = 0, sxx = 0, sxy = 0, syy = 0;
for (int j = 0; j < n; j++) {
double x = ser.getX(j).doubleValue();
double y = ser.getY(j).doubleValue();
sx += x;
sy += y;
sxx += x * x;
sxy += x * y;
syy += y * y;
}
double b = (n * sxy - sx * sy) / (n * sxx - sx * sx);
double a = sy / n - b * sx / n;
XYSeries regr = new XYSeries(ser.getKey());
regr.add(xMin, a + b * xMin);
regr.add(xMax, a + b * xMax);
coll.addSeries(regr);
}
return coll;
}