1.0.2 • Published 6 years ago

exponential-regression v1.0.2

Weekly downloads
40
License
ISC
Repository
-
Last release
6 years ago

Exponential regression

This library provides a fast and simple non-iterative way to make exponential regressions.

It also supports a non-zero constant term, that is every function of the form:

t => a + b * exp(c * t)
// (a, b, c) ϵ ℝ³

It accepts various form of input for the points, that is:

  • solve([x0, x1, ..], [y0, y1, ..])
  • sovle([[t0, y0], [t1, y1], ..])
  • solve(origin, period, [y0, y1, ..])

The fastest being the first one.

Small example:

// import
const ExpReg = require('exponential-regression').ExpReg;

// create dataset (5 values)
const a = 1, b = 2, c = -0.5;
const exp = t => a + b * Math.exp(c * t);
const t = [0, 1, 2, 3, 4];
const y = t.map(exp);

// make regression
const solved = ExpReg.solve(t, y);

// output result
console.log(solved);
/*
 * { a: 0.9827848677867319,
 *   b: 2.014213829585767,
 *   c: -0.4898373248074215 }
 */

Install

The easiest way to install this is using npm

npm i --save exponential-regression

How to use

Here are the available methods to get the approximation of (a, b, c):

type RegressionResult {a: number; b: number; c: number;}

RegExp.solve(xk: number[], yk: number[]): RegressionResult
RegExp.solve(xyk: number[][]): RegressionResult
RegExp.solve(origin: number, period: number, yk: number[]): RegressionResult

Test

Automatic tests

Tests are made with mocha. To run them, use

npm run test

Automatic tests ensure the relative error is less than a certain percentage for every test sample. Test samples are in test/samples.ts.

Manual tests

You can store the csv file corresponding to the test samples using

npm run test-manual $STORE_PATH

$STORE_PATH is the path where you would like to store the csv file.

Benchmark

Benchmark between different input forms have been done using these values

const A: number = 0.3;
const B: number = 0.6;
const C: number = - 1.7;
const XMIN: number = 0;
const XMAX: number = 20;
const N: number = 1000000; // number of points
function                                                    ms
solve(xk: number[], yk: number[]) [optimized]               21 ms
solve(o: number, t: number, yk: number[]) [optimized]       55 ms
solve(points: number[][]) [optimized]                       30 ms

To run the benchmark, use

npm run bench

Credits

Credits to Jean Jacquelin for his paper REGRESSION & FULL EQUATIONS