time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

README.md (6835B)


      1 <!--
      2 
      3 @license Apache-2.0
      4 
      5 Copyright (c) 2018 The Stdlib Authors.
      6 
      7 Licensed under the Apache License, Version 2.0 (the "License");
      8 you may not use this file except in compliance with the License.
      9 You may obtain a copy of the License at
     10 
     11    http://www.apache.org/licenses/LICENSE-2.0
     12 
     13 Unless required by applicable law or agreed to in writing, software
     14 distributed under the License is distributed on an "AS IS" BASIS,
     15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 See the License for the specific language governing permissions and
     17 limitations under the License.
     18 
     19 -->
     20 
     21 # incrmvmr
     22 
     23 > Compute a moving [variance-to-mean ratio][variance-to-mean-ratio] (VMR) incrementally.
     24 
     25 <section class="intro">
     26 
     27 For a window of size `W`, the [unbiased sample variance][sample-variance] is defined as
     28 
     29 <!-- <equation class="equation" label="eq:unbiased_sample_variance" align="center" raw="s^2 = \frac{1}{W-1} \sum_{i=0}^{W-1} ( x_i - \bar{x} )^2" alt="Equation for the unbiased sample variance."> -->
     30 
     31 <div class="equation" align="center" data-raw-text="s^2 = \frac{1}{W-1} \sum_{i=0}^{W-1} ( x_i - \bar{x} )^2" data-equation="eq:unbiased_sample_variance">
     32     <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@b331e5634fe726ff0e16e87814ac3f85d8164d31/lib/node_modules/@stdlib/stats/incr/mvmr/docs/img/equation_unbiased_sample_variance.svg" alt="Equation for the unbiased sample variance.">
     33     <br>
     34 </div>
     35 
     36 <!-- </equation> -->
     37 
     38 and the [arithmetic mean][arithmetic-mean] is defined as
     39 
     40 <!-- <equation class="equation" label="eq:arithmetic_mean" align="center" raw="\bar{x} = \frac{1}{W} \sum_{i=0}^{W-1} x_i" alt="Equation for the arithmetic mean."> -->
     41 
     42 <div class="equation" align="center" data-raw-text="\bar{x} = \frac{1}{W} \sum_{i=0}^{W-1} x_i" data-equation="eq:arithmetic_mean">
     43     <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@164b8f1010c4535340eed9ad0b2af32c4a19863c/lib/node_modules/@stdlib/stats/incr/mvmr/docs/img/equation_arithmetic_mean.svg" alt="Equation for the arithmetic mean.">
     44     <br>
     45 </div>
     46 
     47 <!-- </equation> -->
     48 
     49 The [variance-to-mean ratio][variance-to-mean-ratio] (VMR) is thus defined as
     50 
     51 <!-- <equation class="equation" label="eq:variance_to_mean_ratio" align="center" raw="F = \frac{s^2}{\bar{x}}" alt="Equation for the variance-to-mean ratio (VMR)."> -->
     52 
     53 <div class="equation" align="center" data-raw-text="F = \frac{s^2}{\bar{x}}" data-equation="eq:variance_to_mean_ratio">
     54     <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@b331e5634fe726ff0e16e87814ac3f85d8164d31/lib/node_modules/@stdlib/stats/incr/mvmr/docs/img/equation_variance_to_mean_ratio.svg" alt="Equation for the variance-to-mean ratio (VMR).">
     55     <br>
     56 </div>
     57 
     58 <!-- </equation> -->
     59 
     60 </section>
     61 
     62 <!-- /.intro -->
     63 
     64 <section class="usage">
     65 
     66 ## Usage
     67 
     68 ```javascript
     69 var incrmvmr = require( '@stdlib/stats/incr/mvmr' );
     70 ```
     71 
     72 #### incrmvmr( window\[, mean] )
     73 
     74 Returns an accumulator `function` which incrementally computes a moving [variance-to-mean ratio][variance-to-mean-ratio]. The `window` parameter defines the number of values over which to compute the moving [variance-to-mean ratio][variance-to-mean-ratio].
     75 
     76 ```javascript
     77 var accumulator = incrmvmr( 3 );
     78 ```
     79 
     80 If the mean is already known, provide a `mean` argument.
     81 
     82 ```javascript
     83 var accumulator = incrmvmr( 3, 5.0 );
     84 ```
     85 
     86 #### accumulator( \[x] )
     87 
     88 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.
     89 
     90 ```javascript
     91 var accumulator = incrmvmr( 3 );
     92 
     93 var F = accumulator();
     94 // returns null
     95 
     96 // Fill the window...
     97 F = accumulator( 2.0 ); // [2.0]
     98 // returns 0.0
     99 
    100 F = accumulator( 1.0 ); // [2.0, 1.0]
    101 // returns ~0.33
    102 
    103 F = accumulator( 3.0 ); // [2.0, 1.0, 3.0]
    104 // returns 0.5
    105 
    106 // Window begins sliding...
    107 F = accumulator( 7.0 ); // [1.0, 3.0, 7.0]
    108 // returns ~2.55
    109 
    110 F = accumulator( 5.0 ); // [3.0, 7.0, 5.0]
    111 // returns ~0.80
    112 
    113 F = accumulator();
    114 // returns ~0.80
    115 ```
    116 
    117 </section>
    118 
    119 <!-- /.usage -->
    120 
    121 <section class="notes">
    122 
    123 ## Notes
    124 
    125 -   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 **at least** `W-1` 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.
    126 
    127 -   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.
    128 
    129 -   The following table summarizes how to interpret the [variance-to-mean ratio][variance-to-mean-ratio]:
    130 
    131     |        VMR        |   Description   |     Example Distribution     |
    132     | :---------------: | :-------------: | :--------------------------: |
    133     |         0         |  not dispersed  |           constant           |
    134     | 0 &lt; VMR &lt; 1 | under-dispersed |           binomial           |
    135     |         1         |        --       |            Poisson           |
    136     |         >1        |  over-dispersed | geometric, negative-binomial |
    137 
    138     Accordingly, one can use the [variance-to-mean ratio][variance-to-mean-ratio] to assess whether observed data can be modeled as a Poisson process. When observed data is "under-dispersed", observed data may be more regular than as would be the case for a Poisson process. When observed data is "over-dispersed", observed data may contain clusters (i.e., clumped, concentrated data).
    139 
    140 -   The [variance-to-mean ratio][variance-to-mean-ratio] is typically computed on nonnegative values. The measure may lack meaning for data which can assume both positive and negative values.
    141 
    142 -   The [variance-to-mean ratio][variance-to-mean-ratio] is also known as the **index of dispersion**, **dispersion index**, **coefficient of dispersion**, **relative variance**, and the [**Fano factor**][fano-factor].
    143 
    144 </section>
    145 
    146 <!-- /.notes -->
    147 
    148 <section class="examples">
    149 
    150 ## Examples
    151 
    152 <!-- eslint no-undef: "error" -->
    153 
    154 ```javascript
    155 var randu = require( '@stdlib/random/base/randu' );
    156 var incrmvmr = require( '@stdlib/stats/incr/mvmr' );
    157 
    158 var accumulator;
    159 var v;
    160 var i;
    161 
    162 // Initialize an accumulator:
    163 accumulator = incrmvmr( 5 );
    164 
    165 // For each simulated datum, update the moving variance-to-mean ratio...
    166 for ( i = 0; i < 100; i++ ) {
    167     v = randu() * 100.0;
    168     accumulator( v );
    169 }
    170 console.log( accumulator() );
    171 ```
    172 
    173 </section>
    174 
    175 <!-- /.examples -->
    176 
    177 <section class="links">
    178 
    179 [variance-to-mean-ratio]: https://en.wikipedia.org/wiki/Index_of_dispersion
    180 
    181 [arithmetic-mean]: https://en.wikipedia.org/wiki/Arithmetic_mean
    182 
    183 [sample-variance]: https://en.wikipedia.org/wiki/Variance
    184 
    185 [fano-factor]: https://en.wikipedia.org/wiki/Fano_factor
    186 
    187 </section>
    188 
    189 <!-- /.links -->