scipy.stats.median_abs_deviation

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

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

中位数绝对偏差(MAD, [1]) 根据与中位数的绝对偏差计算中位数。它是一种与标准偏差类似的离散度度量,但对异常值的鲁棒性更强 [2].

空数组的MAD是 np.nan

1.5.0 新版功能.

参数
xarray_like

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

axis整型或无型,可选

沿其计算范围的轴。默认值为0。如果没有,则计算整个阵列的MAD。

center可调用,可选

将返回中心值的函数。默认情况下使用np.Medium。使用的任何用户定义函数都需要具有函数签名 func(arr, axis)

scale标量或字符串,可选

比例尺的数值将从最终结果中除以。默认值为1.0。字符串“Normal”也被接受,结果是 scale 是标准正态分位数函数在0.75时的倒数,约为0.67449。也可以使用类似数组的比例,只要它正确广播到输出即可 out / scale 是有效的操作。输出维度取决于输入阵列, x ,以及 axis 论点。

nan_policy{‘Propagate’,‘RAISE’,‘OMIT’},可选

定义输入包含NaN时的处理方式。以下选项可用(默认值为‘Propagate’):

  • ‘Propagate’:返回NaN

  • “raise”:引发错误

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

退货
mad标量或ndarray

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

注意事项

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

输入数组可以包含 inf ,但如果 center 退货 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几乎没有变化时,后者会受到影响:

>>> 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