26medias / timeseries-analysis

NPM Package - Timeseries analysis, noise removal, stats, ...
237 stars 48 forks source link

Request to make forecasting new values feature work #14

Open muazhari opened 3 years ago

muazhari commented 3 years ago

can someone make the regression_forecast() method works to get n new forecasted values based on the overall sample data?

you can find this block of code below in the source code, but it broke and not fixed until now. and why this block code "buffer[i][1] -= buffer[i-1-j][1]*coeffs[j];" only calculate last coeff.length data points? why not the entire sample data points? this led to linear values.

please someone help me to make it work as soon as possible because I truly need it.


timeseries.prototype.regression_forecast = function(options) {
    options = _.extend({
        method:     'ARMaxEntropy', // ARMaxEntropy | ARLeastSquare
        sample:     50,     // points int he sample
        start:      100,    // Where to start
        n:          5,      // How many points to forecast
        degree:     5
    },options);

    var i;
    var j;
    var l = this.data.length;

    var mean    = this.mean();
    this.offset(-mean);
    var backup  = this.clone();
    var buffer  = this.clone();

    var sample      = buffer.slice(options.start-1-options.sample, options.start);

    // The current data to process is only a sample of the real data.
    this.data       = sample;
    // Get the AR coeffs
    var coeffs      = this[options.method]({degree: options.degree});
    console.log("coeffs",coeffs);

    for (i=options.start;i<options.start+options.n;i++) {
        buffer[i][1]    = 0;
        for (j=0;j<coeffs.length;j++) {
            if (options.method == 'ARMaxEntropy') {
                buffer[i][1] -= buffer[i-1-j][1]*coeffs[j];
            } else {
                buffer[i][1] += buffer[i-1-j][1]*coeffs[j];
            }
        }
        console.log("buffer["+i+"][1]",buffer[i][1]);
    }
    this.data = buffer;
    this.offset(mean);

    return this;
}