UNPKG

linear-least-squares

Version:

Finds the best curve to fit a set of points through minimizing the sum of the squares of the offset of each point from the curve.

1 lines 3.03 kB
!function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.LinearLeastSquares=s():t.LinearLeastSquares=s()}("undefined"!=typeof self?self:this,function(){return r={},o.m=e=[function(t,s){var e=(r.prototype.process_points=function(){this._sum=[0,0],this._sum_of_squares=[0,0],this._mean=[0,0];for(var t=0,s=this._points;t<s.length;t++){var e=s[t];this._sum[0]=this._sum[0]+e[0],this._sum[1]=this._sum[1]+e[1],this._sum_of_squares[0]=this._sum_of_squares[0]+Math.pow(e[0],2),this._sum_of_squares[1]=this._sum_of_squares[1]+e[0]*e[1]}this._mean[0]=this._sum[0]/this._size,this._mean[1]=this._sum[1]/this._size},r.prototype.slope=function(){return(this._size*this._sum_of_squares[1]-this._sum[0]*this._sum[1])/(this._size*this._sum_of_squares[0]-Math.pow(this._sum[0],2))},r.prototype.y_intercept=function(){return this._mean[1]-this.slope()*this._mean[0]},r.prototype.predicted_point=function(t,s,e){return[s,s*t+e]},r.prototype.evaluate_fit=function(t,s){this._total_sum_of_squares=0,this._sum_of_squares_of_residuals=0;for(var e=this._root_mean_squares_error=0,r=this._points;e<r.length;e++){var o=r[e],i=this.predicted_point(t,o[0],s)[1],_=o[1]-this._mean[1],u=o[1]-i;this._sum_of_squares_of_residuals=this._sum_of_squares_of_residuals+Math.pow(u,2),this._total_sum_of_squares=this._total_sum_of_squares+Math.pow(_,2)}this._root_mean_squares_error=Math.sqrt(this._sum_of_squares_of_residuals/this._size),this._r_squared=1-this._sum_of_squares_of_residuals/this._total_sum_of_squares},r.prototype.compute_fit=function(){this.process_points();var t=this.slope(),s=this.y_intercept();return this.evaluate_fit(t,s),{m:t,b:s,rmse:this._root_mean_squares_error,r_squared:this._r_squared}},r.prototype.predicted_points=function(t,s){for(var e=[],r=Math.max.apply(Math,this._points.map(function(t){return t[0]})),o=0,i=Array.from(Array(r).keys());o<i.length;o++){var _=i[o];e.push([_,_*t+s])}return e},r);function r(t){this._points=t,this._size=this._points.length,this._sum=[0,0],this._sum_of_squares=[0,0],this._mean=[0,0]}t.exports=e}],o.c=r,o.d=function(t,s,e){o.o(t,s)||Object.defineProperty(t,s,{enumerable:!0,get:e})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(s,t){if(1&t&&(s=o(s)),8&t)return s;if(4&t&&"object"==typeof s&&s&&s.__esModule)return s;var e=Object.create(null);if(o.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:s}),2&t&&"string"!=typeof s)for(var r in s)o.d(e,r,function(t){return s[t]}.bind(null,r));return e},o.n=function(t){var s=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(s,"a",s),s},o.o=function(t,s){return Object.prototype.hasOwnProperty.call(t,s)},o.p="",o(o.s=0);function o(t){if(r[t])return r[t].exports;var s=r[t]={i:t,l:!1,exports:{}};return e[t].call(s.exports,s,s.exports,o),s.l=!0,s.exports}var e,r});