scipy.stats.

ecdf#

scipy.stats.ecdf(sample)[source]#

样本的经验累积分布函数。

经验累积分布函数 (ECDF) 是对样本的潜在分布的 CDF 的阶梯函数估计。此函数返回表示经验分布函数及其补集(即经验生存函数)的对象。

参数:
sample1D array_like 或 scipy.stats.CensoredData

除了类似数组,还支持包含未审查的观察和右审查的观察的 scipy.stats.CensoredData 的实例。目前,scipy.stats.CensoredData 的其他实例会导致 NotImplementedError

返回:
resECDFResult

具有以下属性的对象。

cdfEmpiricalDistributionFunction

一个表示经验累积分布函数的对象。

sfEmpiricalDistributionFunction

一个表示经验生存函数的对象。

cdfsf 属性本身具有以下属性。

quantilesndarray

定义经验 CDF/SF 样本中的唯一值。

probabilitiesndarray

quantiles 相对应的概率的点估计。

和以下方法

evaluate(x)

计算自变量处的 CDF/SF。

plot(ax)

在提供的坐标轴上绘制 CDF/SF。

confidence_interval(confidence_level=0.95)

计算在 quantiles 值处的 CDF/SF 的置信区间。

注解

当样本的每个观测值都是精确测量值时,ECDF 在每个观测值处以 1/len(sample) 步长递增。[1]

当观测值是下限、上限或同时是上下限时,数据被称为“审查”,并且 sample 可能以 scipy.stats.CensoredData 的实例提供。

对于右审查数据,ECDF 由 Kaplan-Meier 估计量给出[2];目前不支持其他形式的审查。

置信区间根据 Greenwood 公式或更新的“指数 Greenwood”公式计算,如 [4] 中所述。

参考文献

[1] (1,2,3)

康诺弗,威廉·杰伊。实用非参数统计。第 350 卷。约翰·威利父子出版公司,1999 年。

[2]

卡普兰,爱德华·L. 和保罗·梅耶。“来自不完全观测的非参数估计。”美国统计协会杂志 53.282 (1958): 457-481。

[3]

高尔,马尼什·库玛尔,帕迪普·卡纳和尤加尔·基肖尔。“了解生存分析:Kaplan-Meier 估计。”国际阿育吠陀研究杂志 1.4 (2010): 274。

[4]

索耶,斯坦利。“生存分析中的 Greenwood 和 Exponential Greenwood 置信区间。”https://www.math.wustl.edu/~sawyer/handouts/greenwood.pdf

示例

未经审查的数据

就像 [1] 第 79 页中的示例一样,从一所高中的那些男孩中随机选择了五个男孩。他们一英里跑的时间记录如下。

>>> sample = [6.23, 5.58, 7.06, 6.42, 5.20]  # one-mile run times (minutes)

经验分布函数(它是从男孩采样的人群的一英里跑时间的分布函数的近似值)计算如下。

>>> from scipy import stats
>>> res = stats.ecdf(sample)
>>> res.cdf.quantiles
array([5.2 , 5.58, 6.23, 6.42, 7.06])
>>> res.cdf.probabilities
array([0.2, 0.4, 0.6, 0.8, 1. ])

将结果绘制为阶跃函数

>>> import matplotlib.pyplot as plt
>>> ax = plt.subplot()
>>> res.cdf.plot(ax)
>>> ax.set_xlabel('One-Mile Run Time (minutes)')
>>> ax.set_ylabel('Empirical CDF')
>>> plt.show()
../../_images/scipy-stats-ecdf-1_00_00.png

右端审查数据

就像 [1] 第 91 页中的示例一样,对十条汽车风扇皮带的使用寿命进行了测试。五个测试已完成,因为正在测试的风扇皮带断了,但其余的测试由于其他原因而完成(例如,研究经费耗尽,但风扇皮带仍然可以正常工作)。使用风扇皮带行驶的里程记录如下。

>>> broken = [77, 47, 81, 56, 80]  # in thousands of miles driven
>>> unbroken = [62, 60, 43, 71, 37]

在测试结束时仍能正常工作的风扇皮带的确切使用寿命未知,但它们已知超过了 unbroken 中记录的值。因此,这些观察值被称为“右端审查”,并且使用 scipy.stats.CensoredData 表示数据。

>>> sample = stats.CensoredData(uncensored=broken, right=unbroken)

经验生存函数的计算如下。

>>> res = stats.ecdf(sample)
>>> res.sf.quantiles
array([37., 43., 47., 56., 60., 62., 71., 77., 80., 81.])
>>> res.sf.probabilities
array([1.   , 1.   , 0.875, 0.75 , 0.75 , 0.75 , 0.75 , 0.5  , 0.25 , 0.   ])

将结果绘制为阶跃函数

>>> ax = plt.subplot()
>>> res.cdf.plot(ax)
>>> ax.set_xlabel('Fanbelt Survival Time (thousands of miles)')
>>> ax.set_ylabel('Empirical SF')
>>> plt.show()
../../_images/scipy-stats-ecdf-1_01_00.png