scipy.stats.

ecdf#

scipy.stats.ecdf(sample)[原始碼]#

樣本的經驗累積分布函數。

經驗累積分布函數 (ECDF) 是樣本底層分布的 CDF 的階梯函數估計。此函數會傳回代表經驗分布函數及其補集(經驗生存函數)的物件。

參數:
sample一維類陣列或 scipy.stats.CensoredData

除了類陣列之外,也支援包含未截尾和右截尾觀測值的 scipy.stats.CensoredData 實例。目前,其他 scipy.stats.CensoredData 實例將導致 NotImplementedError

傳回值:
resECDFResult

具有以下屬性的物件。

cdfEmpiricalDistributionFunction

代表經驗累積分布函數的物件。

sfEmpiricalDistributionFunction

代表經驗生存函數的物件。

cdfsf 屬性本身具有以下屬性。

quantilesndarray

在樣本中定義經驗 CDF/SF 的唯一值。

probabilitiesndarray

quantiles 對應的機率的點估計。

以及以下方法

evaluate(x)

在引數處評估 CDF/SF。

plot(ax)

在提供的軸上繪製 CDF/SF。

confidence_interval(confidence_level=0.95)

計算 quantiles 中值的 CDF/SF 周圍的信賴區間。

註解

當樣本的每個觀測值都是精確測量時,ECDF 會在每個觀測值 [1] 處階躍增加 1/len(sample)

當觀測值是下限、上限或上下限時,資料被稱為「截尾」,且 sample 可以作為 scipy.stats.CensoredData 的實例提供。

對於右截尾資料,ECDF 由 Kaplan-Meier 估計器 [2] 給出;目前不支援其他形式的截尾。

信賴區間根據 Greenwood 公式或更新近的「指數 Greenwood」公式計算,如 [4] 中所述。

參考文獻

[1] (1,2,3)

Conover, William Jay. Practical nonparametric statistics. Vol. 350. John Wiley & Sons, 1999.

[2]

Kaplan, Edward L., and Paul Meier. “Nonparametric estimation from incomplete observations.” Journal of the American statistical association 53.282 (1958): 457-481.

[3]

Goel, Manish Kumar, Pardeep Khanna, and Jugal Kishore. “Understanding survival analysis: Kaplan-Meier estimate.” International journal of Ayurveda research 1.4 (2010): 274.

[4]

Sawyer, Stanley. “The Greenwood and Exponential Greenwood Confidence Intervals in Survival Analysis.” 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()
../../_images/scipy-stats-ecdf-1_00_00.png

右截尾資料

如同 [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.sf.plot(ax)
>>> ax.set_xlabel('Fanbelt Survival Time (thousands of miles)')
>>> ax.set_ylabel('Empirical SF')
>>> plt.show()
../../_images/scipy-stats-ecdf-1_01_00.png