当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy stats.ecdf用法及代码示例


本文简要介绍 python 语言中 scipy.stats.ecdf 的用法。

用法:

scipy.stats.ecdf(sample)#

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

经验累积分布函数 (ECDF) 是样本基础分布 CDF 的阶跃函数估计。该函数返回代表经验分布函数及其补充函数(经验生存函数)的对象。

参数

sample 一维数组或 scipy.stats.CensoredData

除了 数组 之外,还支持包含未经审查的 scipy.stats.CensoredData 和 right-censored 观察值的实例。目前, scipy.stats.CensoredData 的其他实例将生成 NotImplementedError

返回

res ECDFResult

具有以下属性的对象。

cdf EmpiricalDistributionFunction

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

顺丰 EmpiricalDistributionFunction

代表经验生存函数的对象。

cdf 和 sf 属性本身具有以下属性。

分位数 ndarray

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

概率 ndarray

与分位数对应的概率的点估计。

以及以下方法:

评估(x):

评估参数处的 CDF/SF。

绘图(轴):

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

confidence_interval(confidence_level=0.95):

计算分位数值处 CDF/SF 周围的置信区间。

注意

当样本的每次观测都是精确测量时,ECDF 在每次观测时都会增加1/len(sample) [1]。

当观测值是下限、上限或同时是上限和下限时,数据被称为“censored”,并且样本可以作为一个实例提供scipy.stats.CensoredData.

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

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

参考

[1] (1,2,3)

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

[2]

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

[3]

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

[4]

索耶、斯坦利. “生存分析中的格林伍德和指数格林伍德置信区间。”https://www.math.wustl.edu/~sawyer/handouts/greenwood.pdf

例子

未经审查的数据

正如第 79 页 [1] 中的示例一样,从一所高中的学生中随机选择了 5 个男孩。他们的one-mile运行时间记录如下。

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

经验分布函数近似于对男孩进行抽样的总体 one-mile 运行时间的分布函数,计算如下。

>>> 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()
scipy-stats-ecdf-1_00_00.png

Right-censored数据

正如第 91 页 [1] 中的示例一样,测试了 10 个汽车风扇皮带的寿命。五项测试因所测试的风扇皮带断裂而结束,但其余测试因其他原因而结束(例如,该研究耗尽了资金,但风扇皮带仍然有效)。使用风扇皮带行驶的里程记录如下。

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

测试结束时仍能发挥作用的风扇皮带的准确生存时间尚不清楚,但已知它们超过了 unbroken 中记录的值。因此,这些观测值被称为 “right-censored”,并且数据使用 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()
scipy-stats-ecdf-1_01_00.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.ecdf。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。