mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-18 14:59:29 +00:00
65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
var flatten = require('../../utils/array').flatten;
|
|
|
|
function factory (type, config, load, typed) {
|
|
var abs = load(require('../arithmetic/abs'));
|
|
var map = load(require('../matrix/map'));
|
|
var median = load(require('../statistics/median'));
|
|
var subtract = load(require('../arithmetic/subtract'));
|
|
|
|
/**
|
|
* Compute the median absolute deviation of a matrix or a list with values.
|
|
* The median absolute deviation is defined as the median of the absolute
|
|
* deviations from the median.
|
|
*
|
|
* Syntax:
|
|
*
|
|
* math.mad(a, b, c, ...)
|
|
* math.mad(A)
|
|
*
|
|
* Examples:
|
|
*
|
|
* math.mad(10, 20, 30); // returns 10
|
|
* math.mad([1, 2, 3]); // returns 1
|
|
* math.mad([[1, 2, 3], [4, 5, 6]]); // returns 1.5
|
|
*
|
|
* See also:
|
|
*
|
|
* median, mean, std, abs
|
|
*
|
|
* @param {Array | Matrix} array
|
|
* A single matrix or multiple scalar values.
|
|
* @return {*} The median absolute deviation.
|
|
*/
|
|
var mad = typed('mad', {
|
|
// mad([a, b, c, d, ...])
|
|
'Array | Matrix': _mad,
|
|
|
|
// mad(a, b, c, d, ...)
|
|
'...': function (args) {
|
|
return _mad(args);
|
|
}
|
|
});
|
|
|
|
mad.toTex = undefined; // use default template
|
|
|
|
return mad;
|
|
|
|
function _mad(array) {
|
|
array = flatten(array.valueOf());
|
|
|
|
if (array.length === 0) {
|
|
throw new Error('Cannot calculate median absolute deviation of an empty array');
|
|
}
|
|
|
|
var med = median(array);
|
|
return median(map(array, function (value) {
|
|
return abs(subtract(value, med));
|
|
}));
|
|
}
|
|
}
|
|
|
|
exports.name = 'mad';
|
|
exports.factory = factory;
|