當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。