in assets/android-metrics.js [61:87]
function calculateDelta(values) {
const n = values.length;
// Create x values (0 to n-1) representing the time sequence of data points
const xValues = Array.from({ length: n }, (_, i) => i);
// Calculate the averages of x and y (the subset values)
const xAvg = xValues.reduce((sum, x) => sum + x, 0) / n;
const yAvg = values.reduce((sum, y) => sum + y, 0) / n;
// Calculate the slope (m) of the line of best fit using the least squares method
const numerator = xValues.reduce((sum, x, i) => sum + (x - xAvg) * (values[i] - yAvg), 0);
const denominator = xValues.reduce((sum, x) => sum + Math.pow(x - xAvg, 2), 0);
const slope = numerator / denominator;
// Calculate the y-intercept (b) of the line of best fit
const intercept = yAvg - slope * xAvg;
// Calculate the predicted y-values (trend line) for the first and last x-values
const firstY = intercept; // y-value at x = 0 (first data point)
const lastY = slope * (n - 1) + intercept; // y-value at x = n - 1 (last data point)
// Calculate the percentage improvement between the first and last points on the trend line
const improvement = ((lastY - firstY) / firstY) * 100;
return improvement.toFixed(2);
}