diff --git a/Maths/MeanAbsoluteDeviation.js b/Maths/MeanAbsoluteDeviation.js new file mode 100644 index 000000000..14248dd48 --- /dev/null +++ b/Maths/MeanAbsoluteDeviation.js @@ -0,0 +1,23 @@ +import { mean } from './AverageMean.js' +/** + *@function meanAbsoluteDeviation + *@description Calculates the mean absolute deviation of list of numbers + * @param {Integer} data + * @returns meanAbsoluteDeviation([2,34,5,0,-2]) = 10.480 + * @url https://en.wikipedia.org/wiki/Average_absolute_deviation + */ +function meanAbsoluteDeviation (data) { + if (!Array.isArray(data)) { + throw new TypeError('Invalid Input') + } + let absoluteSum = 0 + const meanValue = mean(data) + for (const dataPoint of data) { + absoluteSum += Math.abs(dataPoint - meanValue) + } + return absoluteSum / data.length +} + +export { + meanAbsoluteDeviation +} diff --git a/Maths/test/MeanAbsoluteDeviation.test.js b/Maths/test/MeanAbsoluteDeviation.test.js new file mode 100644 index 000000000..33fa38d2f --- /dev/null +++ b/Maths/test/MeanAbsoluteDeviation.test.js @@ -0,0 +1,16 @@ +import { meanAbsoluteDeviation } from '../MeanAbsoluteDeviation.js' + +describe('tests for mean absolute deviation', () => { + it('should be a function', () => { + expect(typeof meanAbsoluteDeviation).toEqual('function') + }) + + it('should throw an invalid input error', () => { + expect(() => meanAbsoluteDeviation('fgh')).toThrow() + }) + + it('should return the mean absolute devition of an array of numbers', () => { + const meanAbDev = meanAbsoluteDeviation([2, 34, 5, 0, -2]) + expect(meanAbDev).toBe(10.479999999999999) + }) +})