fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Median Absolute Deviation

Install and import#

bash
npm install fintech-algorithms
ts
import { medianAbsoluteDeviation } from "fintech-algorithms/foundations/dispersion-shape-and-robust-statistics/median-absolute-deviation";

Signature#

medianAbsoluteDeviation(input)

Takes the median of the absolute distances from the series median, and rescales it by 1.4826 so it lines up with a standard deviation under normality.

Parameters#

NameTypeNotes
input{ values: number[] }The observations to measure, under the key values. Both the centre and the spread are medians, so a handful of extreme observations cannot drag the result.

Returns#

{ medianAbsoluteDeviation: number; median: number; scaledMad: number }

medianAbsoluteDeviation is the raw median of the absolute deviations, median is the centre they were taken from, and scaledMad is that raw figure multiplied by 1.4826.

Errors#

  • When input is null, an array, or not an object — throws TypeError
  • When values is missing, is not an array, or is empty — throws RangeError
  • When any entry of values does not coerce to a finite number — throws RangeError

Complexity: time O(n log n), space O(n).

Worked example#

verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.

Input#

input
{
  "values": [1, 2, 2, 4, 9]
}

Call#

medianAbsoluteDeviation(input)

Returns#

object with 2 fields: medianAbsoluteDeviation, median

{
  "medianAbsoluteDeviation": 1,
  "median": 2
}

Diagrams#

Median Absolute Deviation — article hero
Median Absolute Deviation — calculation ledger
Median Absolute Deviation — concept anatomy
Median Absolute Deviation — failure boundary
Median Absolute Deviation — method map
Median Absolute Deviation — scenario contrast

Calculation flow#

Reasoning flow — D00-F05-A04
flowchart LR
    A["Synthetic input + metadata"] --> B{"Contract valid?"}
    B -->|No| C["Reject or route with reason"]
    B -->|Yes| D["Apply Median Absolute Deviation"]
    D --> E["Formula: MADmedian=median(|xᵢ−median(x)|); scaled MAD=1.4826×MADmedian"]
    E --> F["Verified fixture output"]
    F --> G{"Interpretation within boundary?"}
    G -->|Yes| H["Report value + convention + audit"]
    G -->|No| I["Add companion view or narrower claim"]

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

The rest of the Dispersion, Shape, and Robust Statistics family#