Where can I find mad (mean absolute deviation) in scipy? Where can I find mad (mean absolute deviation) in scipy? python python

Where can I find mad (mean absolute deviation) in scipy?


[EDIT] Since this keeps on getting downvoted: I know that median absolute deviation is a more commonly-used statistic, but the questioner asked for mean absolute deviation, and here's how to do it:

from numpy import mean, absolutedef mad(data, axis=None):    return mean(absolute(data - mean(data, axis)), axis)


For what its worth, I use this for MAD:

def mad(arr):    """ Median Absolute Deviation: a "Robust" version of standard deviation.        Indices variabililty of the sample.        https://en.wikipedia.org/wiki/Median_absolute_deviation     """    arr = np.ma.array(arr).compressed() # should be faster to not use masked arrays.    med = np.median(arr)    return np.median(np.abs(arr - med))


The current version of statsmodels has mad in statsmodels.robust:

>>> import numpy as np>>> from statsmodels import robust>>> a = np.matrix( [...     [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ],...     [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ]...  ], dtype=float )>>> robust.mad(a, axis=1)array([ 2.22390333,  5.18910776])

Note that by default this computes the robust estimate of the standard deviation assuming a normal distribution by scaling the result a scaling factor; from help:

Signature: robust.mad(a,                       c=0.67448975019608171,                       axis=0,                       center=<function median at 0x10ba6e5f0>)

The version in R makes a similar normalization. If you don't want this, obviously just set c=1.

(An earlier comment mentioned this being in statsmodels.robust.scale. The implementation is in statsmodels/robust/scale.py (see github) but the robust package does not export scale, rather it exports the public functions in scale.py explicitly.)