7

我正在尝试计算数字样本(“S”)的平均平均偏差。使用“mad()”函数和一次一步计算平均偏差时得到的结果是不同的。为什么?

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

使用“mad()”函数,我得到:

> mad(s)
[1] 13.3434

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

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

为什么这些结果不同?

输入公式时是否出错?(这不足为奇——我刚刚开始学习 R)。我的公式有什么问题?

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

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

(谢谢您的帮助!)

4

3 回答 3

10

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

哪个 R 正在计算的问题可以通过以下简单的权宜之计来解决?mad

 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)));更简单的写法。它至少具有完全明确的优点。

于 2015-06-28T02:32:17.307 回答
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
于 2015-06-28T02:41:16.100 回答
0

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

mad(s,constant=1)
于 2017-09-17T20:28:23.890 回答