首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么用函数scipy.stats.median_absolute_deviation计算的MAD与我所做的函数不同?

为什么用函数scipy.stats.median_absolute_deviation计算的MAD与我所做的函数不同?
EN

Stack Overflow用户
提问于 2020-06-14 03:42:19
回答 1查看 450关注 0票数 1

接下来,我介绍了所做的代码,我创建了DMA函数,它具有绝对平均偏差的公式,另外两个打印程序计算了统计软件包的DMA,并且健壮,因为我们看到这两个结果是不同的,我不明白为什么函数的估计与我手工创建的函数有如此大的不同。

代码语言:javascript
复制
  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]))

结果:

代码语言:javascript
复制
MAD 1.25
MAD function from stats 1.8532499999999998
MAD function from robust 1.8532527731320025
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-14 04:17:16

首先,这两个函数应用一个归一化常数,使MAD成为标准差的一致估计。如果我们通过将此因子设置为1.0来关闭此调整,则结果是相同的。

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

代码语言:javascript
复制
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函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62368099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档