scipy.stats.median_absolute_deviation¶
-
scipy.stats.median_absolute_deviation(x, axis=0, center=<function median>, scale=1.4826, nan_policy='propagate')[source]¶ Compute the median absolute deviation of the data along the given axis.
The median absolute deviation (MAD, [1]) computes the median over the absolute deviations from the median. It is a measure of dispersion similar to the standard deviation, but is more robust to outliers [2].
The MAD of an empty array is
np.nan.New in version 1.3.0.
- Parameters
- xarray_like
Input array or object that can be converted to an array.
- axisint or None, optional
Axis along which the range is computed. Default is 0. If None, compute the MAD over the entire array.
- centercallable, optional
A function that will return the central value. The default is to use np.median. Any user defined function used will need to have the function signature
func(arr, axis).- scaleint, optional
The scaling factor applied to the MAD. The default scale (1.4826) ensures consistency with the standard deviation for normally distributed data.
- nan_policy{‘propagate’, ‘raise’, ‘omit’}, optional
Defines how to handle when input contains nan. ‘propagate’ returns nan, ‘raise’ throws an error, ‘omit’ performs the calculations ignoring nan values. Default is ‘propagate’.
- Returns
- madscalar or ndarray
If
axis=None, a scalar is returned. If the input contains integers or floats of smaller precision thannp.float64, then the output data-type isnp.float64. Otherwise, the output data-type is the same as that of the input.
See also
numpy.std,numpy.var,numpy.median,scipy.stats.iqr,scipy.stats.tmean,scipy.stats.tstd,scipy.stats.tvarNotes
The center argument only affects the calculation of the central value around which the MAD is calculated. That is, passing in
center=np.meanwill calculate the MAD around the mean - it will not calculate the mean absolute deviation.References
- 1(1,2)
“Median absolute deviation” https://en.wikipedia.org/wiki/Median_absolute_deviation
- 2(1,2)
“Robust measures of scale” https://en.wikipedia.org/wiki/Robust_measures_of_scale
Examples
When comparing the behavior of
median_absolute_deviationwithnp.std, the latter is affected when we change a single value of an array to have an outlier value while the MAD hardly changes:>>> from scipy import stats >>> x = stats.norm.rvs(size=100, scale=1, random_state=123456) >>> x.std() 0.9973906394005013 >>> stats.median_absolute_deviation(x) 1.2280762773108278 >>> x[0] = 345.6 >>> x.std() 34.42304872314415 >>> stats.median_absolute_deviation(x) 1.2340335571164334
Axis handling example:
>>> x = np.array([[10, 7, 4], [3, 2, 1]]) >>> x array([[10, 7, 4], [ 3, 2, 1]]) >>> stats.median_absolute_deviation(x) array([5.1891, 3.7065, 2.2239]) >>> stats.median_absolute_deviation(x, axis=None) 2.9652
