ecdf#
- scipy.stats.ecdf(sample)[原始碼]#
樣本的經驗累積分布函數。
經驗累積分布函數 (ECDF) 是樣本底層分布的 CDF 的階梯函數估計。此函數會傳回代表經驗分布函數及其補集(經驗生存函數)的物件。
- 參數:
- sample一維類陣列或
scipy.stats.CensoredData
除了類陣列之外,也支援包含未截尾和右截尾觀測值的
scipy.stats.CensoredData
實例。目前,其他scipy.stats.CensoredData
實例將導致NotImplementedError
。
- sample一維類陣列或
- 傳回值:
- 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] 處階躍增加
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()
右截尾資料
如同 [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()