本文簡要介紹 python 語言中 scipy.stats.CensoredData
的用法。
用法:
class scipy.stats.CensoredData(uncensored=None, *, left=None, right=None, interval=None)#
此類的實例表示經過審查的數據。
實例可以傳遞給
fit
用於最大似然估計的連續單變量 SciPy 分布的方法。這隻要單變量連續分布的方法CensoredData
是個fit
方法。一個實例CensoredData
不能傳遞給諸如pdf
和cdf
.當精確值未知但具有已知的上限和/或下限時,稱觀察結果已被審查。常規術語是:
left-censored:觀察值低於某個值,但未知低於多少。
right-censored:觀察值高於某個值,但未知高出多少。
interval-censored:觀察值位於兩個值之間的某個區間。
左、右和interval-censored數據可以用
CensoredData
表示。為了方便起見,提供了類方法
left_censored
和right_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)
相關用法
- Python SciPy stats.Covariance用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
- Python SciPy stats.cosine用法及代碼示例
- Python SciPy stats.norminvgauss用法及代碼示例
- Python SciPy stats.directional_stats用法及代碼示例
- Python SciPy stats.invwishart用法及代碼示例
- Python SciPy stats.bartlett用法及代碼示例
- Python SciPy stats.levy_stable用法及代碼示例
- Python SciPy stats.page_trend_test用法及代碼示例
- Python SciPy stats.itemfreq用法及代碼示例
- Python SciPy stats.exponpow用法及代碼示例
- Python SciPy stats.gumbel_l用法及代碼示例
- Python SciPy stats.chisquare用法及代碼示例
- Python SciPy stats.semicircular用法及代碼示例
- Python SciPy stats.gzscore用法及代碼示例
- Python SciPy stats.gompertz用法及代碼示例
- Python SciPy stats.normaltest用法及代碼示例
- Python SciPy stats.dirichlet_multinomial用法及代碼示例
- Python SciPy stats.genlogistic用法及代碼示例
- Python SciPy stats.skellam用法及代碼示例
- Python SciPy stats.wilcoxon用法及代碼示例
- Python SciPy stats.johnsonsu用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.CensoredData。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。