【问题标题】:Why do the results of mad(x) differ from the expected results?为什么 mad(x) 的结果与预期结果不同?
【发布时间】:2015-09-14 17:28:33
【问题描述】:

我正在尝试计算数字样本(“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 上给出)

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

(感谢您的帮助!)

【问题讨论】:

    标签: r absolute mean variation


    【解决方案1】:

    不幸的是,“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偏离均值,不知道有没有比mean(abs(x-mean(x)))更简单的写法;它至少具有完全明确的优势。

    【讨论】:

    • 感谢您的回答!我试图得出与平均值的平均偏差(对于样本/向量 (X
    【解决方案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
    

    【讨论】:

    • 谢谢!我没有意识到 mad() 做了超出基本平均平均偏差公式要求的任何事情。你和 glen_b 已经完全回答了我的问题。
    【解决方案3】:

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

    mad(s,constant=1)
    

    【讨论】:

    • 很抱歉写下来,但在我看来,您的回答更像是评论而不是完整的答案。
    猜你喜欢
    • 2020-04-07
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多