MAD 结果在 pandas、scipy 和 numpy 中有所不同

Mic*_*ner 9 python numpy scipy pandas

我想计算MAD(中值绝对偏差),其定义为

MAD = median(|x_i - mean(x)|)
Run Code Online (Sandbox Code Playgroud)

获取数字列表x

x = list(range(0, 10)) + [1000]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

怎么了?

Myk*_*tko 22

中位绝对偏差定义为:

median(|x_i - median(x)|
Run Code Online (Sandbox Code Playgroud)

Pandas 中的方法mad返回平均绝对偏差。您可以使用以下方法计算 MAD:

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1000]

stats.median_absolute_deviation(x, scale=1)
# 3.0

np.median(np.absolute(x - np.median(x)))
# 3.0

x = pd.Series(x)
(x - x.median()).abs().median()
# 3.0
Run Code Online (Sandbox Code Playgroud)