main.js (3163B)
1 /** 2 * @license Apache-2.0 3 * 4 * Copyright (c) 2018 The Stdlib Authors. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 'use strict'; 20 21 // MODULES // 22 23 var incrcount = require( './../../../incr/count' ); 24 var incrmax = require( './../../../incr/max' ); 25 var incrmin = require( './../../../incr/min' ); 26 var incrrange = require( './../../../incr/range' ); 27 var incrmidrange = require( './../../../incr/midrange' ); 28 var incrsum = require( './../../../incr/sum' ); 29 var incrmean = require( './../../../incr/mean' ); 30 var incrvariance = require( './../../../incr/variance' ); 31 var incrstdev = require( './../../../incr/stdev' ); 32 var incrskewness = require( './../../../incr/skewness' ); 33 var incrkurtosis = require( './../../../incr/kurtosis' ); 34 35 36 // MAIN // 37 38 /** 39 * Returns an accumulator function which incrementally computes a statistical summary. 40 * 41 * @returns {Function} accumulator function 42 * 43 * @example 44 * var accumulator = incrsummary(); 45 * 46 * var summary = accumulator(); 47 * // returns {} 48 * 49 * summary = accumulator( 2.0 ); 50 * // returns {...} 51 * 52 * summary = accumulator( -5.0 ); 53 * // returns {...} 54 * 55 * summary = accumulator(); 56 * // returns {...} 57 */ 58 function incrsummary() { 59 var midrange; 60 var variance; 61 var skewness; 62 var kurtosis; 63 var summary; 64 var count; 65 var range; 66 var stdev; 67 var mean; 68 var max; 69 var min; 70 var sum; 71 72 // Incremental count: 73 count = incrcount(); 74 75 // Sum: 76 sum = incrsum(); 77 78 // Sample mean: 79 mean = incrmean(); 80 81 // Unbiased sample variance: 82 variance = incrvariance(); 83 84 // Corrected sample standard deviation: 85 stdev = incrstdev(); 86 87 // Corrected sample skewness: 88 skewness = incrskewness(); 89 90 // Corrected excess sample kurtosis: 91 kurtosis = incrkurtosis(); 92 93 // Maximum value: 94 max = incrmax(); 95 96 // Minimum value: 97 min = incrmin(); 98 99 // Range (i.e., max-min): 100 range = incrrange(); 101 102 // Mid-range: 103 midrange = incrmidrange(); 104 105 // Initial an object for tracking state: 106 summary = {}; 107 108 return accumulator; 109 110 /** 111 * If provided a value, the accumulator function returns an updated summary. If not provided a value, the accumulator function returns the current summary. 112 * 113 * @private 114 * @param {number} [x] - new value 115 * @returns {Object} summary 116 */ 117 function accumulator( x ) { 118 if ( arguments.length === 0 ) { 119 return summary; 120 } 121 summary.count = count( x ); 122 summary.max = max( x ); 123 summary.min = min( x ); 124 summary.range = range( x ); 125 summary.midrange = midrange( x ); 126 summary.sum = sum( x ); 127 summary.mean = mean( x ); 128 summary.variance = variance( x ); 129 summary.stdev = stdev( x ); 130 summary.skewness = skewness( x ); 131 summary.kurtosis = kurtosis( x ); 132 return summary; 133 } 134 } 135 136 137 // EXPORTS // 138 139 module.exports = incrsummary;