绝对中位差Median Absolute Deviation

来源:互联网 发布:php优化方案 编辑:程序博客网 时间:2024/06/11 23:27

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

绝对中位差Median Absolute Deviation

参考维基百科中的MAD定义

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

对于单变量数据集X1,X2,...,Xn,MAD定义为数据点到中位数的绝对偏差的中位数:

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当作标准差σ估计的一种一致估计量,使用

σ^=kMAD

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

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

k=1/(Φ1(3/4))1.4826

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

12=P(|Xμ|MAD)=P(|Xμσ|MADσ)=P(|Z|MADσ).

所以,必须有:

Φ(MAD/σ)Φ(MAD/σ)=1/2

Φ(MAD/σ)=1Φ(MAD/σ)

得到MAD/σ=Φ1(3/4)=0.67449,从而比例因子k=1/Φ1(3/4)=1.4826

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

MAD=σ2erf1(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/qnorm(3/4))可以确保对于遵循N(μ,σ2)分布的Xi和大的n 值,存在以下一致性:

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 ; TRUEx <- 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对于异常值的鲁棒性。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 瑜伽后弯后腰疼怎么办? 吃了大蒜肝痛怎么办 练瑜伽前躯不行怎么办 月子里碰冷水了怎么办 月子手碰凉水了怎么办 月子里碰了冷水怎么办 顺产后下面会痛怎么办 产后肚子瘦不下来怎么办 出月子后臀部很疼怎么办 做月子时臀部疼怎么办 月子臀部大腿疼困怎么办 产后抱孩子腰疼怎么办 剖腹产后5年小肚子很大怎么办 压力大工作忙瘦了怎么办? 哺乳乳房一大一小怎么办 哺乳期乳房一大一小怎么办 上班之后奶少了怎么办 出了月子还流恶露怎么办? 剖腹产2年刀疤痒怎么办 刨宫产6天伤口痒怎么办 脸的皮肤油油的怎么办 狗狗子宫蓄脓怎么办 刮宫后子宫壁薄怎么办 产妇有痔疮怎么办很疼 二胎着床在剖腹产切口怎么办 刨腹产3月后怀孕怎么办 破腹产两年了肚子还是很大怎么办 抛妇产后肚子大怎么办 破腹产后想大便怎么办 破腹产后肚子硬怎么办 在月子里同房了怎么办 胃变大凸出来了怎么办 坐完月子脊背疼怎么办 月子过后脊背疼该怎么办 怀孕的时候牙疼怎么办 练瑜伽后弯腰疼怎么办 练完瑜伽腰椎疼怎么办 瑜伽开髋动作受伤怎么办 才学瑜伽教培上课紧张怎么办 瑜伽馆不给退费怎么办 脚运动后酸痛该怎么办