为什么mad(x)的结果与预期结果不同?

时间:2015-06-28 02:25:47

标签: r absolute mean variation

我正在尝试计算数字样本(" S")的平均平均偏差。我在使用" mad()"时得到的结果功能和当进行平均平均偏差计算时,一次一步是不同的。为什么呢?

 s<- c(100,110,114,121,130,130,160)

使用&#34; mad()&#34;功能,我得到:

> mad(s)
[1] 13.3434

当分解公式并一次一步地执行相同的操作时,我得到:

> sum(abs(s-mean(s)))/length(s)
[1] 14.08163

为什么这些结果有所不同?

输入配方时我输错了吗? (这并不奇怪 - 我刚开始学习R)。我的配方有什么问题?

或者是R用来计算与以下不同的平均平均偏差的公式(在Wikipedia上给出)

MAD =     ((每个值减去样本平均值的绝对值)的总和))      除以(样本中的值的数量)?

(谢谢你的帮助!)

3 个答案:

答案 0 :(得分:9)

不幸的是,“MAD”是一个具有多重含义的术语;平均值的绝对偏差(有时称为MD或平均偏差),与中位数的中位数绝对偏差,与中位数的平均绝对偏差(在拉普拉斯计算尺度时出现)等。维基百科 - 虽然经常有用 - - 不是使用仲裁者;它在使用术语时有时会有点特殊(这不是对维基百科的特别批评;它本质上是固有的)。 [就个人而言,在没有进一步线索的情况下,我通常将MAD解释为与中位数的中位数绝对偏差,并且如果没有完全写入,则期望与均值的平均绝对偏差被写为“均值偏差”/“MD”或“平均绝对偏差“。]

通过?mad

的简单权宜之计解决了哪个R正在计算的问题
 mad {stats}    R Documentation

 Median Absolute Deviation

 Description

 Compute the median absolute deviation, i.e., the (lo-/hi-) median of the 
 absolute deviations from the median, and (by default) adjust by a factor 
 for asymptotically normal consistency.

正如一般建议,当第一次使用某个功能时,不要假设你知道它在做什么。例如,在我第一次阅读MAD的帮助之前,我不会预期它会默认乘以该常量。 (我认为这是一个坏主意,因为这意味着默认情况下它并不实际计算任何称为MAD,而是对未受污染的部分为高斯的人口的强σ估计 - 但这是它是如何工作的。)

大多数功能都会按照您的想法执行,但有些功能可能会让您大吃一惊。检查帮助中的定义,查看输入和输出的定义方式,并尝试示例。

顺便提一下,如果你想要与均值的中位数(绝对)偏差,你可以通过mad(x,mean(x),1)得到它。但如果你想要卑鄙偏离平均值,我不知道是否有比mean(abs(x-mean(x)))更简单的写法;它至少具有完全明确的优势。

答案 1 :(得分:2)

正如@Glen_b建议的那样,mad不仅仅是应用公式,还包括与正常性保持一致的“修正”。

查看示例:

#with mad
mad(s)
mad(s,center= mean(s))

# using formulas
sum(abs(s-median(s)))/length(s)
sum(abs(s-mean(s)))/length(s)

> mad(s)
[1] 13.3434
> mad(s,center= mean(s))
[1] 14.1906
> 
> sum(abs(s-median(s)))/length(s)  
[1] 13.71429
> sum(abs(s-mean(s)))/length(s)
[1] 14.08163

答案 2 :(得分:0)

另外,如果您尝试计算中位数的中位数绝对偏差,请键入

mad(s,constant=1)