Skip to content
Snippets Groups Projects
Select Git revision
  • d0fd1b84a559fa2b3b6d06820dbf59c7a08c89ae
  • master default protected
  • leo
  • dex
  • pendulum
  • apfelstruder
  • littlerascal
7 results

vmsg.js

Blame
  • smallstat.js 1.85 KiB
    // from https://gist.github.com/Daniel-Hug/7273430
    
    var smallstat = {
    	max: function(array) {
    		return Math.max.apply(null, array);
    	},
    
    	min: function(array) {
    		return Math.min.apply(null, array);
    	},
    
    	range: function(array) {
    		return smallstat.max(array) - smallstat.min(array);
    	},
    
    	midrange: function(array) {
    		return smallstat.range(array) / 2;
    	},
    
    	sum: function(array) {
    		var num = 0;
    		for (var i = 0, l = array.length; i < l; i++) num += array[i];
    		return num;
    	},
    
    	mean: function(array) {
    		return smallstat.sum(array) / array.length;
    	},
    
    	median: function(array) {
    		array.sort(function(a, b) {
    			return a - b;
    		});
    		var mid = array.length / 2;
    		return mid % 1 ? array[mid - 0.5] : (array[mid - 1] + array[mid]) / 2;
    	},
    
    	modes: function(array) {
    		if (!array.length) return [];
    		var modeMap = {},
    			maxCount = 0,
    			modes = [];
    
    		array.forEach(function(val) {
    			if (!modeMap[val]) modeMap[val] = 1;
    			else modeMap[val]++;
    
    			if (modeMap[val] > maxCount) {
    				modes = [val];
    				maxCount = modeMap[val];
    			}
    			else if (modeMap[val] === maxCount) {
    				modes.push(val);
    				maxCount = modeMap[val];
    			}
    		});
    		return modes;
    	},
    
    	variance: function(array) {
    		var mean = smallstat.mean(array);
    		return smallstat.mean(array.map(function(num) {
    			return Math.pow(num - mean, 2);
    		}));
    	},
    
    	standardDeviation: function(array) {
    		return Math.sqrt(smallstat.variance(array));
    	},
    
    	meanAbsoluteDeviation: function(array) {
    		var mean = smallstat.mean(array);
    		return smallstat.mean(array.map(function(num) {
    			return Math.abs(num - mean);
    		}));
    	},
    
    	zScores: function(array) {
    		var mean = smallstat.mean(array);
    		var standardDeviation = smallstat.standardDeviation(array);
    		return array.map(function(num) {
    			return (num - mean) / standardDeviation;
    		});
    	}
    };
    
    // Function aliases:
    smallstat.average = smallstat.mean;
    
    export default smallstat