scipy.stats.

median_abs_deviation#

scipy.stats.median_abs_deviation(x, axis=0, center= median>, scale=1.0, nan_policy='propagate')[источник]#

Вычислить медианное абсолютное отклонение данных вдоль заданной оси.

Медианное абсолютное отклонение (MAD, [1]) вычисляет медиану по абсолютным отклонениям от медианы. Это мера дисперсии, аналогичная стандартному отклонению, но более устойчивая к выбросам [2].

MAD пустого массива равен np.nan.

Добавлено в версии 1.5.0.

Параметры:
xarray_like

Входной массив или объект, который может быть преобразован в массив.

осьint или None, опционально

Ось, вдоль которой вычисляется размах. По умолчанию 0. Если None, вычисляется MAD по всему массиву.

центрвызываемый объект, необязательный

Функция, которая будет возвращать центральное значение. По умолчанию используется np.median. Любая пользовательская функция должна иметь сигнатуру функции func(arr, axis).

scaleскаляр или str, опционально

Численное значение scale будет разделено на конечный результат. По умолчанию 1.0. Также принимается строка “normal”, что приводит к scale является обратной функцией квантиля стандартного нормального распределения при 0.75, что приблизительно равно 0.67449. Допускаются масштабы в виде массивов, если они правильно транслируются на выход, так что out / scale является допустимой операцией. Выходные размерности зависят от входного массива, xдолжны быть включены в старые категории. Значения, которые были в удаленных категориях, будут установлены в NaN ось аргумент.

nan_policy{'propagate', 'raise', 'omit'}, опционально

Определяет, как обрабатывать входные данные, содержащие nan. Доступны следующие варианты (по умолчанию 'propagate'):

  • ‘propagate’: возвращает nan

  • ‘raise’: вызывает ошибку

  • 'omit': выполняет вычисления, игнорируя значения nan

Возвращает:
madскаляр или ndarray

Если axis=None, возвращается скаляр. Если вход содержит целые числа или числа с плавающей точкой меньшей точности, чем np.float64, тогда выходной тип данных np.float64. В противном случае тип выходных данных такой же, как у входных.

Примечания

The центр аргумент влияет только на расчёт центрального значения, вокруг которого вычисляется MAD. То есть, передача center=np.mean будет вычислять MAD относительно среднего - он не будет вычислять mean абсолютное отклонение.

Входной массив может содержать inf, но если центр возвращает inf, соответствующий MAD для этих данных будет nan.

Ссылки

[1]

“Среднее абсолютное отклонение”, https://en.wikipedia.org/wiki/Median_absolute_deviation

[2]

“Робастные меры масштаба”, https://en.wikipedia.org/wiki/Robust_measures_of_scale

Примеры

При сравнении поведения median_abs_deviation с np.std, последний подвержен влиянию, когда мы изменяем одно значение массива, чтобы оно стало выбросом, в то время как MAD почти не меняется:

>>> import numpy as np
>>> from scipy import stats
>>> x = stats.norm.rvs(size=100, scale=1, random_state=123456)
>>> x.std()
0.9973906394005013
>>> stats.median_abs_deviation(x)
0.82832610097857
>>> x[0] = 345.6
>>> x.std()
34.42304872314415
>>> stats.median_abs_deviation(x)
0.8323442311590675

Пример обработки оси:

>>> x = np.array([[10, 7, 4], [3, 2, 1]])
>>> x
array([[10,  7,  4],
       [ 3,  2,  1]])
>>> stats.median_abs_deviation(x)
array([3.5, 2.5, 1.5])
>>> stats.median_abs_deviation(x, axis=None)
2.0

Пример масштабирования нормального распределения:

>>> x = stats.norm.rvs(size=1000000, scale=2, random_state=123456)
>>> stats.median_abs_deviation(x)
1.3487398527041636
>>> stats.median_abs_deviation(x, scale='normal')
1.9996446978061115