scipy.stats.

median_abs_deviation#

scipy.stats.median_abs_deviation(x, axis=0, center=<function median>, scale=1.0, nan_policy='propagate')[source]#

根据给定轴计算数据的绝对中位数偏差。

中位绝对偏差(MAD,[1])计算中位数在绝对偏差中。这是一个类似于标准差但对异常值更稳健的离散度测量方法 [2]

空数组的 MAD 为 np.nan

1.5.0 版中新增。

参数:
xarray_like

输入数组或可转换为数组的对象。

axisint 或 None,可选

计算范围的轴。默认值为 0。如果为 None,则计算整个数组的 MAD。

center可调用对象,可选

将返回中心值的一个函数。默认使用 np.median。使用的任何用户定义函数都需要具有 func(arr, axis) 这样的函数签名。

scale标量或字符串,可选

将缩放的数值除于最终结果。默认值为 1.0。字符串“normal”也受支持,结果中scale 是标准正态分布分位数函数在 0.75 时的逆,其约为 0.67449。允许使用类似于数组的 scale,只要它可以正确广播到输出,使out / scale成为有效操作。输出维度取决于输入数组xaxis参数。

nan_policy{‘propagate’, ‘raise’, ‘omit’}, optional

定义在输入包含 nan 时如何处理。可用的选项如下 (默认为‘propagate’)

  • ‘propagate’:返回 nan

  • ‘raise’:抛出错误

  • ‘omit’:忽略 nan 值执行计算

返回:
mad标量或 ndarray

如果axis=None,则返回标量。如果输入包含精度低于np.float64的整数或浮点数,则输出数据类型为np.float64。否则,输出数据类型与输入相同。

备注

center参数仅影响围绕其计算 MAD 的中心值。也就是说,传递center=np.mean将计算围绕均值的 MAD - 它不会计算平均绝对偏差。

输入数组可以包含inf,但是如果center 返回inf,对应数据的 MAD 将为nan

参考

示例

比较行为时median_abs_deviationnp.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