中位数绝对偏差#
- scipy.stats.median_abs_deviation(x, axis=0, center=<function median>, scale=1.0, nan_policy='propagate')[源代码][源代码]#
计算沿指定轴的数据的中位数绝对偏差。
中位数绝对偏差(MAD, [1])计算的是中位数与中位数绝对偏差的差值。它是一种类似于标准差的离散度量,但对异常值更为稳健 [2]。
空数组的 MAD 是
np.nan
。Added in version 1.5.0.
- 参数:
- xarray_like
可以转换为数组的输入数组或对象。
- 轴int 或 None, 可选
计算范围所沿的轴。默认是 0。如果为 None,则在整个数组上计算 MAD。
- 中心可调用,可选
一个将返回中心值的函数。默认使用 np.median。任何用户定义的函数都需要有函数签名
func(arr, axis)
。- 比例标量或字符串,可选
比例的数值将从最终结果中被除掉。默认值是1.0。字符串“normal”也被接受,并且会导致`scale`成为标准正态分位数函数在0.75处的倒数,大约是0.67449。也允许类似数组的比例,只要它正确地广播到输出,使得``out / scale``是一个有效的操作。输出维度取决于输入数组`x`和`axis`参数。
- nan_policy{‘propagate’, ‘raise’, ‘omit’}, 可选
定义当输入包含 nan 时的处理方式。以下选项可用(默认是 ‘propagate’):
‘propagate’: 返回 nan
‘raise’: 抛出一个错误
‘omit’: 执行计算时忽略 nan 值
- 返回:
- 疯狂标量或ndarray
如果
axis=None
,则返回一个标量。如果输入包含精度低于np.float64
的整数或浮点数,则输出数据类型为np.float64
。否则,输出数据类型与输入数据类型相同。
参见
注释
center 参数仅影响计算中值周围 MAD 的计算。也就是说,传入
center=np.mean
将计算围绕均值的 MAD - 它不会计算 均值 绝对偏差。输入数组可能包含 inf,但如果 center 返回 inf,则该数据的相应 MAD 将为 nan。
参考文献
[1]“中位数绝对偏差”, https://en.wikipedia.org/wiki/Median_absolute_deviation
示例
在比较
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