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


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


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

用法:

class  scipy.stats.CensoredData(uncensored=None, *, left=None, right=None, interval=None)#

此类的实例表示经过审查的数据。

实例可以传递给fit用于最大似然估计的连续单变量 SciPy 分布的方法。这只要单变量连续分布的方法CensoredData是个fit方法。一个实例CensoredData不能传递给诸如pdfcdf.

当精确值未知但具有已知的上限和/或下限时,称观察结果已被审查。常规术语是:

  • left-censored:观察值低于某个值,但未知低于多少。

  • right-censored:观察值高于某个值,但未知高出多少。

  • interval-censored:观察值位于两个值之间的某个区间。

左、右和interval-censored数据可以用CensoredData表示。

为了方便起见,提供了类方法 left_censoredright_censored 来从单个一维测量数组创建 CensoredData 实例,并使用相应的布尔数组来指示哪些测量被审查。类方法 interval_censored 接受两个一维数组,用于保存间隔的下限和上限。

参数

uncensored 类数组,一维

未经审查的观察。

left 类数组,一维

Left-censored 观察结果。

right 类数组,一维

Right-censored 观察结果。

interval 类似数组,2D,形状为 (m, 2)

Interval-censored 观察结果。每行interval[k, :] 表示第 k 个interval-censored 观察的间隔。

注意

在输入数组中间隔,区间的下界可以是-inf,并且上限可以是inf,但至少有一个必须是有限的。当下界为-inf,该行代表左删失观察,并且当上限为inf,该行代表 right-censored 观察。如果间隔的长度为 0(即interval[k, 0] == interval[k, 1],观察被视为未经审查。因此,我们可以表示所有类型的审查和未经审查的数据interval,但一般使用起来比较方便未经审查的,剩下正确的对于未经审查的观测值,分别为 left-censored 和 right-censored。

例子

在最一般的情况下,审查数据集可能包含 left-censored、right-censored、interval-censored 和未经审查的值。例如,在这里我们创建一个包含五个观察值的数据集。两个是未经审查的(值 1 和 1.5),一个是 left-censored 观察值 0,一个是 right-censored 观察值 10,一个是区间 [2, 3] 中的 interval-censored。

>>> import numpy as np
>>> from scipy.stats import CensoredData
>>> data = CensoredData(uncensored=[1, 1.5], left=[0], right=[10],
...                     interval=[[2, 3]])
>>> print(data)
CensoredData(5 values: 2 not censored, 1 left-censored,
1 right-censored, 1 interval-censored)

等效地,

>>> data = CensoredData(interval=[[1, 1],
...                               [1.5, 1.5],
...                               [-np.inf, 0],
...                               [10, np.inf],
...                               [2, 3]])
>>> print(data)
CensoredData(5 values: 2 not censored, 1 left-censored,
1 right-censored, 1 interval-censored)

一种常见的情况是混合使用未经审查的观察结果和经过审查的观察结果,这些观察结果均为right-censored(或全部为left-censored)。例如,考虑一个实验,其中六个设备在不同时间启动并保持运行直到它们出现故障。假设时间以小时为单位,并且实验在 30 小时后停止,即使此时所有设备尚未发生故障。我们最终可能会得到这样的数据:

Device  Start-time  Fail-time  Time-to-failure
   1         0         13           13
   2         2         24           22
   3         5         22           17
   4         8         23           15
   5        10        ***          >20
   6        12        ***          >18

当实验停止时,其中两个设备没有发生故障; time-to-failure 对这两个设备的观察结果是 right-censored。我们可以用以下方式表示这些数据

>>> data = CensoredData(uncensored=[13, 22, 17, 15], right=[20, 18])
>>> print(data)
CensoredData(6 values: 4 not censored, 2 right-censored)

或者,我们可以使用方法 CensoredData.right_censored 创建该数据的表示。 time-to-failure 观测值放入列表 ttf 中。 censored 列表指示 ttf 中的哪些值被审查。

>>> ttf = [13, 22, 17, 15, 20, 18]
>>> censored = [False, False, False, False, True, True]

将这些列表传递给 CensoredData.right_censored 以创建 CensoredData 的实例。

>>> data = CensoredData.right_censored(ttf, censored)
>>> print(data)
CensoredData(6 values: 4 not censored, 2 right-censored)

如果输入数据经过区间删失并且已存储在两个数组中,一个保存区间的低端,另一个保存区间的高端,则可以使用类方法 interval_censored 创建 CensoredData 实例。

此示例创建一个具有四个 interval-censored 值的实例。间隔为 [10, 11]、[0.5, 1]、[2, 3] 和 [12.5, 13.5]。

>>> a = [10, 0.5, 2, 12.5]  # Low ends of the intervals
>>> b = [11, 1.0, 3, 13.5]  # High ends of the intervals
>>> data = CensoredData.interval_censored(low=a, high=b)
>>> print(data)
CensoredData(4 values: 0 not censored, 4 interval-censored)

最后,我们从 weibull_min 分布中创建并审查一些数据,然后将 weibull_min 拟合到该数据。我们假设位置参数已知为 0。

>>> from scipy.stats import weibull_min
>>> rng = np.random.default_rng()

创建随机数据集。

>>> x = weibull_min.rvs(2.5, loc=0, scale=30, size=250, random_state=rng)
>>> x[x > 40] = 40  # Right-censor values greater or equal to 40.

使用 right_censored 方法创建CensoredData 实例。删失值是值为 40 的值。

>>> data = CensoredData.right_censored(x, x == 40)
>>> print(data)
CensoredData(250 values: 215 not censored, 35 right-censored)

35 个值已为right-censored。

weibull_min 拟合至审查数据。我们预计形状和比例分别约为 2.5 和 30。

>>> weibull_min.fit(data, floc=0)
(2.3575922823897315, 0, 30.40650074451254)

相关用法


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