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