[接下来,我给出所编写的代码,我创建了具有绝对均值偏差公式的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
第二,虽然此特定向量的中位数和均值相同,但是如果要匹配这两个函数的默认行为,则应使用向量的中位数而不是均值作为中心。
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功能