1 什么是经验分布 EDF

经验分布函数(Empirical Distribution Function)是统计学中一个与样本的经验测度有关的分布函数。该累积分布函数是在所有个数据点上都跳跃的阶跃函数。对于被测随机变量的某个可能取值而言,EDF 在这个取值处的值为所有观测样本中小于或者等于该取值的比例。

经验分布函数是对用于生成样本的累积分布函数的估计。根据 Glivenko-Cantelli 定理可以证明,经验分布函数以概率 1 收敛至这一累积分布函数。

为独立同分布的的实随机变量,它们共同的累积分布函数为。于是,经验分布函数可以定义为

其中 为事件 的指示函数。 是伯努利随机变量。因而 则是期望为 ,方差为 的二项随机变量。这意味着 的无偏估计。

蓝线为经验分布函数,黑色长条表示相应的样本,灰线则是用于生成样本的累积分布函数。

2 Python 实现

从上面的定义来看,其实自己实现一个 EDF 函数也并不困难。这里有一个例子:Calculate ECDF in Pythonstatsmodels这个库里面提供了现成的 ECDF 函数

这里函数名字是 ECDF,其中 C 表示累积分布。

1
2
3
4
5
6
7
>>> import numpy as np
>>> from statsmodels.distributions.empirical_distribution import ECDF
>>>
>>> ecdf = ECDF([3, 3, 1, 4])
>>>
>>> ecdf([3, 55, 0.5, 1.5])
array([ 0.75, 1. , 0. , 0.25])