为什么用函数 scipy.stats.median_absolute_deviation 计算的 MAD 和我做的函数不一样?

Why the MAD that is calculated with the function scipy.stats.median_absolute_deviation it's different from the function i did?

接下来我介绍制作的代码,我创建了具有绝对平均偏差公式的 DMA 函数,另外两个打印的计算统计包和稳健的 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

首先,两个函数都应用归一化常数,使 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

MAD function from stats 1.25

MAD function from robust 1.25