ecdf#
- scipy.stats.ecdf(sample)[source]#
样本的经验累积分布函数。
经验累积分布函数 (ECDF) 是对样本的潜在分布的 CDF 的阶梯函数估计。此函数返回表示经验分布函数及其补集(即经验生存函数)的对象。
- 参数:
- sample1D array_like 或
scipy.stats.CensoredData
除了类似数组,还支持包含未审查的观察和右审查的观察的
scipy.stats.CensoredData
的实例。目前,scipy.stats.CensoredData
的其他实例会导致NotImplementedError
。
- sample1D array_like 或
- 返回:
- res
ECDFResult
具有以下属性的对象。
- cdf
EmpiricalDistributionFunction
一个表示经验累积分布函数的对象。
- sf
EmpiricalDistributionFunction
一个表示经验生存函数的对象。
cdf 和 sf 属性本身具有以下属性。
- quantilesndarray
定义经验 CDF/SF 样本中的唯一值。
- probabilitiesndarray
与 quantiles 相对应的概率的点估计。
和以下方法
- evaluate(x)
计算自变量处的 CDF/SF。
- plot(ax)
在提供的坐标轴上绘制 CDF/SF。
- confidence_interval(confidence_level=0.95)
计算在 quantiles 值处的 CDF/SF 的置信区间。
- cdf
- res
注解
当样本的每个观测值都是精确测量值时,ECDF 在每个观测值处以
1/len(sample)
步长递增。[1]当观测值是下限、上限或同时是上下限时,数据被称为“审查”,并且 sample 可能以
scipy.stats.CensoredData
的实例提供。对于右审查数据,ECDF 由 Kaplan-Meier 估计量给出[2];目前不支持其他形式的审查。
置信区间根据 Greenwood 公式或更新的“指数 Greenwood”公式计算,如 [4] 中所述。
参考文献
[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()
右端审查数据
就像 [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()