top of page
Search
cedarcantab

Least Squares Method



The least squares method is a mathematical technique used to find the best-fitting curve for a given set of data points. It aims to minimize the sum of squared residuals (offsets) between the data points and the curve being fitted.

Here are the key points about the least squares method:

  1. Residuals (Offsets): These are the differences between the observed samples and the estimated values from the fitted curve.

  2. Objective: The goal is to find the best-fitting straight line or curve that minimizes the sum of squared residuals.

  3. Steps for Least Squares Method:

  • Calculate the residuals between the data points and the fitted curve.

  • Adjust the parameters of the fitting curve to minimize the sum of squared residuals.

  • Typically, the vertical offsets (distance from data points to the curve) are minimized.

  • Linear least squares is the most common method for fitting data points to a straight line.

The least squares method is widely used for interpreting scatter plots and is associated with regression analysis. It can be applied to both linear and nonlinear relationships.



Javascript Implementation


In this implementation:

  • values_x and values_y are arrays containing the x and y coordinates of your data points.

  • The function calculates the slope (m) and y-intercept (b) of the best-fit line.

  • It returns a new set of points representing the best-fit line.


function findLineByLeastSquares(values_x, values_y) {
    var x_sum = 0;
    var y_sum = 0;
    var xy_sum = 0;
    var xx_sum = 0;
    var count = 0;

    var values_length = values_x.length;
    if (values_length != values_y.length) {
        throw new Error('The parameters values_x and values_y need to have the same size!');
    }

    // Calculate the necessary sums
    for (var i = 0; i < values_length; i++) {
        x = values_x[i];
        y = values_y[i];
        x_sum += x;
        y_sum += y;
        xy_sum += x * y;
        xx_sum += x * x;
        count++;
    }

    // Calculate the slope (m) and y-intercept (b)
    var m = (count * xy_sum - x_sum * y_sum) / (count * xx_sum - x_sum * x_sum);
    var b = (y_sum / count) - (m * x_sum) / count;

    // Return the best-fit line as an array of points
    var result_values_x = [];
    var result_values_y = [];
    for (var i = 0; i < values_length; i++) {
        result_values_x.push(values_x[i]);
        result_values_y.push(m * values_x[i] + b);
    }

    return [result_values_x, result_values_y];
}

// Example usage:
var data_x = [1, 2, 3, 4, 5];
var data_y = [2, 3, 4, 5, 6];
var [fit_x, fit_y] = findLineByLeastSquares(data_x, data_y);

console.log("Best-fit line points:");
for (var i = 0; i < fit_x.length; i++) {
    console.log(`(${fit_x[i]}, ${fit_y[i]})`);
}


Useful References



5 views0 comments

Recent Posts

See All

p2 naive broadphase

var Broadphase = require('../collision/Broadphase'); module.exports = NaiveBroadphase; /** * Naive broadphase implementation. Does N^2...

sopiro motor constranit

import { Matrix2, Vector2 } from "./math.js"; import { RigidBody } from "./rigidbody.js"; import { Settings } from "./settings.js";...

Comments


記事: Blog2_Post
bottom of page