python - 为什么使用函数 scipy.stats.median_absolute_deviation 计算的 MAD 与我所做的函数不同?
问题描述
接下来我介绍制作的代码,我创建了具有绝对平均偏差公式的 DMA 函数,另外两个 print 计算了 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
解决方案
首先,这两个函数都应用了一个归一化常数,以使 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))
疯狂 1.25
来自 stats 1.25 的 MAD 函数
强大的 1.25 的 MAD 功能
推荐阅读
- c++ - Red-Black Tree rebalancing crashes on tree rotation
- sql - 如何在 Apex Oracle 上创建协作工作环境?
- c++ - 内存引用重新绑定的可移植性
- python - 如何排除负数?
- c++ - Why does member initilizer invoke extra constructor call when moved?
- c# - Entity Framework Core does not respect Identity columns
- c# - 敌人在玩家位置射击
- ios - 使用自动布局调整标签大小
- asp.net - Microsoft.CSharp.RuntimeBinder.Semantics.LangCompiler(错误应用程序名称:w3wp.exe,错误模块名称:KERNEL32.DLL)
- javascript - 如何在同一页面的特定部分显示 Flask 表单结果