【发布时间】:2020-05-22 08:41:17
【问题描述】:
我想计算由
定义的MAD (median absolute deviation)MAD = median(|x_i - mean(x)|)
获取号码列表x
x = list(range(0, 10)) + [1000]
但是,使用numpy、pandas 和手工实现的结果存在显着差异:
from scipy import stats
import pandas as pd
import numpy as np
print(stats.median_absolute_deviation(x, scale=1)) # prints 3.0
print(pd.Series(x).mad()) # prints 164.54
print(np.median(np.absolute(x - np.mean(x)))) # prints 91.0
怎么了?
【问题讨论】:
-
pd.Series().mad() 为您提供平均绝对偏差,而不是您期望的中值绝对偏差。
-
哦该死的。 :) 其他人呢?
-
scipy.stats 的实现是正确的。您的手工实现需要根据 Mykola 的回答进行更改。
-
最后一个应该是
np.median(np.absolute(x - np.median(x)))。而且第一个公式也是错误的。