diff --git a/Math/Stochastic/Average.js b/Math/Stochastic/Average.js new file mode 100644 index 0000000..1b58342 --- /dev/null +++ b/Math/Stochastic/Average.js @@ -0,0 +1,31 @@ +/** + * Average class. + * + * @author OMS Development Team + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 * @since 1.0.0 + */ +(function (jsOMS, undefined) +{ + "use strict"; + /** @namespace jsOMS.Math.Stochastic.Average */ + jsOMS.Autoloader.defineNamespace('jsOMS.Math.Stochastic.Average'); + + jsOMS.Math.Stochastic.Average.arithmeticMean = function (values, offset = 0) + { + Array.sort(values); + let length = values.length; + + if (offset > 0) { + values = Array.splice(offset, length - offset); + } + + if (length === 0) { + throw 'Division zero'; + } + + return values.reduce((a, b) => a + b, 0) / count; + }; +}(window.jsOMS = window.jsOMS || {})); \ No newline at end of file diff --git a/Math/Stochastic/Forecast/LinearRegression.js b/Math/Stochastic/Forecast/LinearRegression.js new file mode 100644 index 0000000..15d5db2 --- /dev/null +++ b/Math/Stochastic/Forecast/LinearRegression.js @@ -0,0 +1,35 @@ +/** + * Linear regression class. + * + * @author OMS Development Team + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 * @since 1.0.0 + */ +(function (jsOMS, undefined) +{ + "use strict"; + /** @namespace jsOMS.Math.Stochastic.Forecast.LinearRegression */ + jsOMS.Autoloader.defineNamespace('jsOMS.Math.Stochastic.Forecast.LinearRegression'); + + jsOMS.Math.Stochastic.Forecast.LinearRegression.getLinearRegresseion = function (x, y) + { + let count = x.length, + meanX = jsOMS.Math.Stochastic.Average.arithmeticMean(x), + meanY = jsOMS.Math.Stochastic.Average.arithmeticMean(y), + sum1 = 0, + sum2 = 0, + b0, b1; + + for (let i = 0; i < count; i++) { + sum1 += (y[i] - meanY) * (x[i] - meanX); + sum2 += (x[i] - meanX) ** 2; + } + + b1 = sum1 / sum2; + b0 = meanY - b1 * meanX; + + return {b0: b0, b1: b1}; + }; +}(window.jsOMS = window.jsOMS || {})); \ No newline at end of file