Where Can I Find Mad (mean Absolute Deviation) In Scipy?
Solution 1:
[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, absolute
def mad(data, axis=None):
return mean(absolute(data - mean(data, axis)), axis)
Solution 2:
For what its worth, I use this for MAD:
defmad(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))
Solution 3:
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.)
Solution 4:
It looks like scipy.stats.models was removed in august 2008 due to insufficient baking. Development has migrated to statsmodels
.
Solution 5:
If you enjoy working in Pandas (like I do), it has a useful function for the mean absolute deviation:
import pandas as pd
df = pd.DataFrame()
df['a'] = [1, 1, 2, 2, 4, 6, 9]
df['a'].mad()
Output: 2.3673469387755106
Post a Comment for "Where Can I Find Mad (mean Absolute Deviation) In Scipy?"