绝对中位差Median Absolute Deviation

作者: 不剪发的Tony老师
毕业于北京航空航天大学,十多年数据库管理与开发经验,目前在一家全球性的金融公司从事数据库架构设计。CSDN学院签约讲师以及GitChat专栏作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net


文章目录

    绝对中位差Median Absolute Deviation
        示例
        用途
        MAD与标准差的关系
        总体MAD
        R语言MAD函数

绝对中位差Median Absolute Deviation

参考维基百科中的MAD定义

在统计学中,绝对中位数MAD是对单变量数值型数据的样本偏差的一种鲁棒性测量。同时也可以表示由样本的MAD估计得出的总体参数。

对于单变量数据集 X 1 , X 2 , . . . , X n X_1, X_2, ..., X_n X1​,X2​,...,Xn​,MAD定义为数据点到中位数的绝对偏差的中位数:

M A D = m e d i a n ( ∣ X i − m e d i a n ( X ) ∣ ) MAD = median(|X_i-median(X)|) MAD=median(∣Xi​−median(X)∣)

也就是说,先计算出数据与它们的中位数之间的残差(偏差),MAD就是这些偏差的绝对值的中位数。
示例

考虑数据集(1, 1, 2, 2, 4, 6, 9),它的中位数为2。数据点到2的绝对偏差为(1, 1, 0, 0, 2, 4, 7),该偏差列表的中位数为1(因为排序后的绝对偏差为(0, 0, 1, 1, 2, 4, 7))。所以该数据的绝对中位差为1。
用途

绝对中位差是一种统计离差的测量。而且,MAD是一种鲁棒统计量,比标准差更能适应数据集中的异常值。对于标准差,使用的是数据到均值的距离平方,所以大的偏差权重更大,异常值对结果也会产生重要影响。对于MAD,少量的异常值不会影响最终的结果。

由于MAD是一个比样本方差或者标准差更鲁棒的度量,它对于不存在均值或者方差的分布效果更好,比如柯西分布。
MAD与标准差的关系

为了能将MAD当作标准差 σ \sigma σ估计的一种一致估计量,使用

σ ^ = k ⋅ M A D \hat\sigma = k \cdot MAD σ^=k⋅MAD

其中 k 为比例因子常量,值取决于分布类型。

对于正态分布数据,k的值为:

k = 1 / ( Φ − 1 ( 3 / 4 ) ) ≈ 1.4826 k = 1/(\Phi^{-1}(3/4)) \approx 1.4826 k=1/(Φ−1(3/4))≈1.4826

也就是标准正态分布 Z = X / σ Z = X/\sigma Z=X/σ的分位函数的倒数(也称为逆累积分布函数)。数值3/4是为了 ± M A D \pm MAD ±MAD包含标准正态累积分布函数的50%(从1/4到3/4的范围值),也就是:

1 2 = P ( ∣ X − μ ∣ ≤ M A D ) = P ( ∣ X − μ σ ∣ ≤ M A D σ ) = P ( ∣ Z ∣ ≤ M A D σ ) . {1 \over 2} = P(|X-\mu| \le MAD) = P(|{X-\mu \over \sigma}| \le {MAD \over \sigma}) = P(|Z| \le {MAD \over \sigma}). 21​=P(∣X−μ∣≤MAD)=P(∣σX−μ​∣≤σMAD​)=P(∣Z∣≤σMAD​).

所以,必须有:

Φ ( M A D / σ ) − Φ ( − M A D / σ ) = 1 / 2 \Phi(MAD/\sigma) - \Phi(-MAD/\sigma) = 1/2 Φ(MAD/σ)−Φ(−MAD/σ)=1/2



Φ ( − M A D / σ ) = 1 − Φ ( M A D / σ ) \Phi(-MAD/\sigma) = 1 - \Phi(MAD/\sigma) Φ(−MAD/σ)=1−Φ(MAD/σ)

得到 M A D / σ = Φ − 1 ( 3 / 4 ) = 0.67449 MAD/\sigma = \Phi^{-1}(3/4) = 0.67449 MAD/σ=Φ−1(3/4)=0.67449,从而比例因子 k = 1 / Φ − 1 ( 3 / 4 ) = 1.4826 k = 1/\Phi^{-1}(3/4) = 1.4826 k=1/Φ−1(3/4)=1.4826。

另一种计算方法是MAD等于半正态分布的中位数:

M A D = σ 2 e r f − 1 ( 1 / 2 ) MAD = \sigma \sqrt 2 erf^{-1}(1/2) MAD=σ2

​erf−1(1/2)

这种形式可以用于概然误差的计算。
总体MAD

总体的MAD与样本MAD的定义类似,但是它是基于完全分布而不是样本执行的计算。对于均值为零的对称分布,总体MAD是分布的75%分位点。

均值有可能是无限值,或者不存在的值;然而总体MAD永远都是一个有限值。例如,标准柯西分布的方差不存在,但是它的MAD等于1。

已知最早提出MAD概念的是约翰·卡尔·弗里德里希·高斯。
R语言MAD函数

在R语言中,计算MAD的函数是stats包中的mad(),不同的是它默认乘上了一个比例因子1.4826,为了达到渐进正态一致性。

mad(x, center = median(x), constant = 1.4826, na.rm = FALSE, low = FALSE, high = FALSE)

其中,

    x 数值向量。

    center 可选,中心点:默认为中位数。

    constant 比例因子。

    na.rm 如果为TRUE,在计算之前将x中的NA删除。

    low 如果为TRUE,计算‘lo-median’,也就是说,对于个数为偶数的样本,在最后计算中位数时不使用两个中间值的均值,而是采用其中较小的值。

    high 如果为TRUE,计算‘hi-median’,也就是对于偶数样本,采用两个中间值的较大者作为中位数。

在R语言中,该值的计算方式为constant * cMedian(abs(x - center)),其中center的默认值为median(x),cMedian为“低”中位数或“高”中位数,参见上面的参数low和high。

默认值constant = 1.4826(近似等于 1 / Φ − 1 ( 3 / 4 ) = 1 / q n o r m ( 3 / 4 ) 1/ \Phi^{-1}(3/4) = 1/qnorm(3/4) 1/Φ−1(3/4)=1/qnorm(3/4))可以确保对于遵循 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)分布的 X i X_i Xi​和大的n 值,存在以下一致性:

E [ m a d ( X 1 , . . . , X n ) ] = σ E[mad(X_1, ... , X_n)] = \sigma E[mad(X1​,...,Xn​)]=σ

如果na.rm为TRUE,在执行计算之前,将会删除x中的NA值;否则,只要x中存在任何NA值,mad函数将会返回NA。

示例

mad(c(1:9))
print(mad(c(1:9),     constant = 1)) ==
      mad(c(1:8, 100), constant = 1)       # = 2 ; TRUE
x <- c(1,2,3,5,7,8)
sort(abs(x - median(x)))
c(mad(x, constant = 1),
  mad(x, constant = 1, low = TRUE),
  mad(x, constant = 1, high = TRUE))


以上代码输出如下:

> mad(c(1:9))
[1] 2.9652
> print(mad(c(1:9), constant = 1)) ==
+       mad(c(1:8, 100), constant = 1) # = 2 ; TRUE
[1] 2
[1] TRUE
> x <- c(1,2,3,5,7,8)
> sort(abs(x - median(x)))
[1] 1 1 2 3 3 4
> c(mad(x, constant = 1),
+   mad(x, constant = 1, low = TRUE),
+   mad(x, constant = 1, high = TRUE))
[1] 2.5 2.0 3.0


通过代码第2行的输出可以看出MAD对于异常值的鲁棒性。