我正在尝试计算数字样本(" 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 = ((每个值减去样本平均值的绝对值)的总和)) 除以(样本中的值的数量)?
(谢谢你的帮助!)
答案 0 :(得分:9)
通过?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)))
更简单的写法;它至少具有完全明确的优势。
答案 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)