Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

incrnanmcv

Compute a moving coefficient of variation (CV) incrementally, ignoring NaN values.

For a window of size W, the corrected sample standard deviation is defined as

$$s = \sqrt{\frac{1}{W-1} \sum_{i=0}^{W-1} ( x_i - \bar{x} )^2}$$

and the arithmetic mean is defined as

$$\bar{x} = \frac{1}{W} \sum_{i=0}^{W-1} x_i$$

The coefficient of variation (also known as relative standard deviation, RSD) is defined as

$$c_v = \frac{s}{\bar{x}}$$

Usage

var incrnanmcv = require( '@stdlib/stats/incr/nanmcv' );

incrnanmcv( window[, mean] )

Returns an accumulator function which incrementally computes a moving coefficient of variation.

var accumulator = incrnanmcv( 3 );

The function supports the following parameters:

If the mean is already known, provide a mean argument.

var accumulator = incrnanmcv( 3, 5.0 );

accumulator( [x] )

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

var accumulator = incrnanmcv( 3 );

var cv = accumulator();
// returns null

// Fill the window...
cv = accumulator( 2.0 ); // [2.0]
// returns 0.0

cv = accumulator( NaN ); // [2.0]
// returns 0.0

cv = accumulator( 3.0 ); // [2.0, 3.0]
// returns ~0.28

cv = accumulator( 1.0 ); // [2.0, 3.0, 1.0]
// returns ~0.50

// Window begins sliding...
cv = accumulator( NaN ); // [2.0, 3.0, 1.0]
// returns ~0.50

cv = accumulator( 7.0 ); // [3.0, 1.0, 7.0]
// returns ~0.83

cv = accumulator( 5.0 ); // [1.0, 7.0, 5.0]
// returns ~0.71

cv = accumulator( NaN ); // [1.0, 7.0, 5.0]
// returns ~0.71

cv = accumulator();
// returns ~0.71

Notes

  • Input values are not type checked. If non-numeric inputs are possible, you are advised to type check and handle accordingly before passing the value to the accumulator function.
  • As W values are needed to fill the window buffer, the first W-1 returned values are calculated from smaller sample sizes. Until the window is full, each returned value is calculated from all provided values.
  • The coefficient of variation is typically computed on nonnegative values. The measure may lack meaning for data which can assume both positive and negative values.
  • For small and moderately sized samples, the accumulated value tends to be too low and is thus a biased estimator. Provided the generating distribution is known (e.g., a normal distribution), you may want to adjust the accumulated value or use an alternative implementation providing an unbiased estimator.

Examples

var randu = require( '@stdlib/random/base/randu' );
var incrnanmcv = require( '@stdlib/stats/incr/nanmcv' );

// Initialize an accumulator with window size 5:
var accumulator = incrnanmcv( 5 );

// For each simulated datum, update the moving coefficient of variation...
var i;
for ( i = 0; i < 100; i++ ) {
    accumulator( ( randu() < 0.2 ) ? NaN : randu()*100.0 );
}
console.log( accumulator() );