Skip to content

Latest commit

 

History

History

ewvariance

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

increwvariance

Compute an exponentially weighted variance incrementally.

An exponentially weighted variance can be defined recursively as

$$S_n = \begin{cases} 0 & \textrm{if}\ n = 0 \\ (1 - \alpha) (S_{n-1} + \alpha(x_n - \mu_{n-1})^2) & \textrm{if}\ n > 0 \end{cases}$$

where μ is the exponentially weighted mean.

Usage

var increwvariance = require( '@stdlib/stats/incr/ewvariance' );

increwvariance( alpha )

Returns an accumulator function which incrementally computes an exponentially weighted variance, where alpha is a smoothing factor between 0 and 1.

var accumulator = increwvariance( 0.5 );

accumulator( [x] )

If provided an input value x, the accumulator function returns an updated variance. If not provided an input value x, the accumulator function returns the current variance.

var accumulator = increwvariance( 0.5 );

var v = accumulator();
// returns null

v = accumulator( 2.0 );
// returns 0.0

v = accumulator( 1.0 );
// returns 0.25

v = accumulator( 3.0 );
// returns 0.6875

v = accumulator();
// returns 0.6875

Notes

  • Input values are not type checked. If provided NaN or a value which, when used in computations, results in NaN, the accumulated value is NaN for all future invocations. If non-numeric inputs are possible, you are advised to type check and handle accordingly before passing the value to the accumulator function.

Examples

var randu = require( '@stdlib/random/base/randu' );
var increwvariance = require( '@stdlib/stats/incr/ewvariance' );

var accumulator;
var v;
var i;

// Initialize an accumulator:
accumulator = increwvariance( 0.5 );

// For each simulated datum, update the exponentially weighted variance...
for ( i = 0; i < 100; i++ ) {
    v = randu() * 100.0;
    accumulator( v );
}
console.log( accumulator() );

See Also