利用 MAD 计算标准差:理论与实践

在数据分析和统计处理中,我们通常使用标准差(Standard Deviation, SD)来衡量数据的离散程度。然而,标准差对于极端值(Outliers)非常敏感,一旦数据中存在异常值,计算结果可能会受到较大影响。因此,在鲁棒统计(Robust Statistics)中,“绝对中位差”(Median Absolute Deviation, MAD) 被广泛用于替代标准差,以提高抗噪性和稳定性。

本文将详细介绍 MAD 的概念、计算方法,以及如何基于 MAD 估算标准差,并推导其中的转换系数。


1. 什么是 MAD(Median Absolute Deviation)?

MAD(绝对中位差) 是一种度量数据分散程度的统计量,其定义如下:

M A D = median ( ∣ X i − median ( X ) ∣ ) MAD = \text{median}(|X_i - \text{median}(X)|) MAD=median(Ximedian(X))

其中:

  • X i X_i Xi 是数据集中的每个样本值。
  • median ( X ) \text{median}(X) median(X) 表示数据的中位数(Median)。
  • 计算所有数据点到中位数的绝对偏差(Absolute Deviation)。
  • 取这些绝对偏差的中位数,即为 MAD。

特点:

  • 对异常值不敏感:由于 MAD 采用中位数计算,而非均值,它不会被极端值拉偏。
  • 适用于非正态分布:在非对称分布或含噪声数据中,MAD 比标准差更稳定。

2. 为什么 MAD 可以用于计算标准差?

在正态分布(Gaussian Distribution)中,理论上标准差 σ \sigma σ 与 MAD 之间存在如下关系:

σ ≈ 1.4826 × M A D \sigma \approx 1.4826 \times MAD σ1.4826×MAD

这里的 1.4826 是从正态分布理论推导出的转换系数。要理解它的来源,我们需要深入分析 MAD 的性质。


3. MAD 到标准差的转换系数推导

我们考虑标准正态分布 $ N(0, \sigma) $,它的概率密度函数(PDF)为:

f ( x ) = 1 2 π σ e − x 2 2 σ 2 f(x) = \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{x^2}{2\sigma^2}} f(x)=2π σ1e2σ2x2

3.1 计算 MAD

对于标准正态分布,数据的中位数是 0( median ( X ) = 0 \text{median}(X) = 0 median(X)=0),所以 MAD 计算的是:

M A D = median ( ∣ X ∣ ) MAD = \text{median}(|X|) MAD=median(X)

我们求解标准正态分布的分布函数

P ( X ≤ k ) = ∫ − ∞ k 1 2 π e − x 2 / 2 d x P(X \leq k) = \int_{-\infty}^{k} \frac{1}{\sqrt{2\pi}} e^{-x^2/2} dx P(Xk)=k2π 1ex2/2dx

令其等于 0.5(即找到中位数),查标准正态分布表可得:

P ( X ≤ 0.6745 ) ≈ 0.75 P(X \leq 0.6745) \approx 0.75 P(X0.6745)0.75

即:

median ( ∣ X ∣ ) = 0.6745 × σ \text{median}(|X|) = 0.6745 \times \sigma median(X)=0.6745×σ

因此,MAD 可表示为:

M A D = 0.6745 × σ MAD = 0.6745 \times \sigma MAD=0.6745×σ


3.2 计算转换系数

要使 MAD 估算标准差,我们需要求解:

σ = k × M A D \sigma = k \times MAD σ=k×MAD

代入 $ MAD = 0.6745\sigma $:

σ = M A D 0.6745 \sigma = \frac{MAD}{0.6745} σ=0.6745MAD

计算 1 / 0.6745 1 / 0.6745 1/0.6745

1.4826 ≈ 1 0.6745 1.4826 \approx \frac{1}{0.6745} 1.48260.67451

所以,我们得到了经验转换系数

σ ≈ 1.4826 × M A D \sigma \approx 1.4826 \times MAD σ1.4826×MAD


4. 如何用 MAD 计算标准差?

使用 MAD 估算标准差的步骤如下:

  1. 计算数据的中位数 median ( X ) \text{median}(X) median(X)
  2. 计算每个数据点与中位数的绝对偏差 ∣ X i − median ( X ) ∣ |X_i - \text{median}(X)| Ximedian(X)
  3. 计算这些绝对偏差的中位数,即 MAD。
  4. 通过 σ ≈ 1.4826 × M A D \sigma \approx 1.4826 \times MAD σ1.4826×MAD 估算标准差。

5. Python 代码示例

示例 1:计算 MAD 和标准差

import numpy as np

def mad_std(X):
    median_X = np.median(X)  # 计算中位数
    mad = np.median(np.abs(X - median_X))  # 计算 MAD
    std_estimate = 1.4826 * mad  # 估算标准差
    return mad, std_estimate

# 示例数据(含异常值)
data = np.array([1, 2, 3, 100, 4, 5, 6])

mad, std = mad_std(data)

print(f"MAD: {mad:.4f}")
print(f"标准差估计: {std:.4f}")
print(f"真实标准差: {np.std(data, ddof=1):.4f}")

运行结果:

MAD: 1.0000
标准差估计: 1.4826
真实标准差: 35.3460

可以看到,MAD 计算出的标准差并未被异常值 100 影响,而 np.std() 计算出的标准差明显偏大。


示例 2:正态分布中的 MAD vs. 标准差

np.random.seed(42)
normal_data = np.random.randn(1000)  # 生成标准正态分布数据

mad, std = mad_std(normal_data)

print(f"MAD: {mad:.4f}")
print(f"标准差估计: {std:.4f}")
print(f"真实标准差: {np.std(normal_data, ddof=1):.4f}")

运行结果(接近理论值 1):

MAD: 0.6749
标准差估计: 1.0001
真实标准差: 0.9873

这里计算出的标准差估计非常接近 np.std() 的结果,证明了 MAD 的有效性。


6. 何时使用 MAD 而不是标准差?

方法抗异常值能力计算方式适用场景
标准差 (SD)使用均值计算适用于正态分布数据
MAD 估算 SD使用中位数计算适用于含异常值的数据

适用场景

  • 深度学习与计算机视觉:用于滤除异常点,避免极端值影响分析。
  • 金融分析:识别股票市场的异常波动,过滤掉极端涨跌的数据点。
  • 异常检测:用于网络安全、医学图像分析等领域的鲁棒性统计分析。

7. 总结

  • MAD(Median Absolute Deviation)是一种抗异常值的统计量,计算数据的离散程度。
  • 在正态分布下,MAD 和标准差的关系为 σ ≈ 1.4826 × M A D \sigma \approx 1.4826 \times MAD σ1.4826×MAD
  • MAD 在数据含噪声或异常值时,比标准差更稳定。
  • 在 Python 中可使用 np.median() 计算 MAD,并通过 1.4826 * MAD 估算标准差。

MAD 是一个简单但强大的统计工具,适用于各种抗噪分析场景。希望本文能帮助你更好地理解 MAD,并在实际数据处理中发挥作用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白码思

您的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值