绝对中位差Median Absolute Deviation

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绝对中位差Median Absolute Deviation相关的知识,希望对你有一定的参考价值。

文章目录

绝对中位差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(Ximedian(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 σ^=kMAD

其中 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 erf1(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对于异常值的鲁棒性。

以上是关于绝对中位差Median Absolute Deviation的主要内容,如果未能解决你的问题,请参考以下文章

Python 详解计算 Median Absolute Deviation(绝对中位偏差)| 还可用于异常值检测

Python 详解计算 Median Absolute Deviation(绝对中位偏差)| 还可用于异常值检测

MAD+异常检测

R语言mad函数median函数mean函数计算中位数绝对偏差中位数均值实战

python使用statsmodels包中的robust.mad函数计算数组(Array)的中位数绝对偏差(MADMedian Absolute Deviation)

POJ 3579 Median(二分答案+Two pointers)