为什么用函数scipy.stats.median_absolute_deviation计算的MAD与我执行的函数不同?

问题描述 投票:1回答:1

[接下来,我给出所编写的代码,我创建了具有绝对均值偏差公式的DMA函数,其他两个输出计算了stats软件包的DMA且健壮,因为我们看到两个结果都不同,我不明白为什么函数的估计与我手动创建的函数有如此大的差异]

  import numpy as np
  import scipy.stats as stats
  from statsmodels import robust    



def MAD (vector):
      MAD  = np.sum(np.abs(vector-np.mean(vector)))/len(vector)
      return(MAD )

    print("MAD ",DMA([1.5,0,4,2.5]))
    print("MAD function from stats", stats.median_absolute_deviation([1.5,0,4,2.5],axis=0))
    print("MAD function from robust", robust.mad([1.5,0,4,2.5]))

结果:

MAD 1.25
MAD function from stats 1.8532499999999998
MAD function from robust 1.8532527731320025
python statistics statsmodels robust
1个回答
0
投票
首先,两个函数均应用归一化常数以使MAD成为标准偏差的一致估计量。如果我们通过将此系数设置为1.0来关闭此调整,则结果是相同的。

第二,虽然此特定向量的中位数和均值相同,但是如果要匹配这两个函数的默认行为,则应使用向量的中位数而不是均值作为中心。

import numpy as np import scipy.stats as stats from statsmodels import robust def MAD(vector): MAD = np.mean(np.abs(vector-np.median(vector))) return MAD print("MAD",MAD([1.5,0,4,2.5])) print("MAD function from stats", stats.median_absolute_deviation([1.5,0,4,2.5],axis=0,scale=1.0)) print("MAD function from robust", robust.mad([1.5,0,4,2.5],c=1.0))

  
MAD 1.25

来自统计1.25的MAD功能

来自健壮1.25的MAD功能

© www.soinside.com 2019 - 2024. All rights reserved.