scipy.stats.median_absolute_deviation

scipy.stats.median_absolute_deviation(*args, **kwds)

median_absolute_deviation 已弃用,请使用 median_abs_deviation 取而代之的是!

若要保留现有默认行为,请使用 scipy.stats.median_abs_deviation(..., scale=1/1.4826) 。对于使用正态分布进行缩放,值1.4826在数值上不精确。要获得精确的数值,请使用 scipy.stats.median_abs_deviation(..., scale='normal')

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

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

空数组的MAD是 np.nan

1.3.0 新版功能.

参数
xarray_like

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

axis整型或无型,可选

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

center可调用,可选

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

scale整型,可选

应用于MAD的比例因子。默认刻度(1.4826)可确保与正态分布数据的标准偏差保持一致。

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 绝对偏差。

参考文献

1

“绝对偏差中位数”,https://en.wikipedia.org/wiki/Median_absolute_deviation

2

“规模的稳健衡量”,https://en.wikipedia.org/wiki/Robust_measures_of_scale

示例

在比较 median_absolute_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_absolute_deviation(x)
1.2280762773108278
>>> x[0] = 345.6
>>> x.std()
34.42304872314415
>>> stats.median_absolute_deviation(x)
1.2340335571164334

轴处理示例:

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