logrank#
- scipy.stats.logrank(x, y, alternative='two-sided')[原始碼]#
透過對數秩檢定比較兩個樣本的存活分佈。
- 參數:
- x, yarray_like 或 CensoredData
根據經驗存活函數比較的樣本。
- alternative{‘two-sided’, ‘less’, ‘greater’}, optional
定義對立假設。
虛無假設是兩組(例如 X 和 Y)的存活分佈相同。
以下對立假設 [4] 可用(預設為 ‘two-sided’)
‘two-sided’:兩組的存活分佈不相同。
‘less’:組別 X 的存活率較高:在某些時間點,組別 X 的失敗率函數小於組別 Y 的失敗率函數。
‘greater’:組別 Y 的存活率較高:在某些時間點,組別 X 的失敗率函數大於組別 Y 的失敗率函數。
- 返回:
- resLogRankResult
包含屬性的物件
- statisticfloat ndarray
計算出的統計量(定義如下)。其量值是大多數其他對數秩檢定實作返回的量值的平方根。
- pvaluefloat ndarray
檢定的計算 p 值。
另請參閱
註解
對數秩檢定 [1] 將觀察到的事件數與虛無假設下的預期事件數進行比較,虛無假設是兩個樣本來自相同的分佈。統計量為
\[Z_i = \frac{\sum_{j=1}^J(O_{i,j}-E_{i,j})}{\sqrt{\sum_{j=1}^J V_{i,j}}} \rightarrow \mathcal{N}(0,1)\]其中
\[E_{i,j} = O_j \frac{N_{i,j}}{N_j}, \qquad V_{i,j} = E_{i,j} \left(\frac{N_j-O_j}{N_j}\right) \left(\frac{N_j-N_{i,j}}{N_j-1}\right),\]\(i\) 表示組別(即,它可以假設值 \(x\) 或 \(y\),或者可以省略以指代組合樣本),\(j\) 表示時間(事件發生的時間),\(N\) 是事件發生前處於風險中的受試者人數,而 \(O\) 是該時間點觀察到的事件數。
由
logrank
返回的statistic
\(Z_x\) 是許多其他實作返回的統計量的(帶符號)平方根。在虛無假設下,\(Z_x**2\) 根據自由度為 1 的卡方分佈漸近分佈。因此,\(Z_x\) 根據標準常態分佈漸近分佈。使用 \(Z_x\) 的優點是保留了符號資訊(即,觀察到的事件數是否傾向於小於或大於虛無假設下的預期數量),從而允許scipy.stats.logrank
提供單側對立假設。參考文獻
[1]Mantel N. “生存資料的評估及其考量中出現的兩個新秩次統計量。” Cancer Chemotherapy Reports, 50(3):163-170, PMID: 5910392, 1966
[2]Bland, Altman, “對數秩檢定”, BMJ, 328:1073, DOI:10.1136/bmj.328.7447.1073, 2004
[3]“對數秩檢定”, 維基百科, https://en.wikipedia.org/wiki/Logrank_test
[4]Brown, Mark. “關於對數秩檢定變異數的選擇。” Biometrika 71.1 (1984): 65-74.
[5]Klein, John P., 和 Melvin L. Moeschberger。 生存分析:截尾和截斷資料的技術。 卷。 1230. 紐約:Springer,2003。
範例
參考文獻 [2] 比較了兩種不同類型復發性惡性神經膠質瘤患者的存活時間。 下面的樣本記錄了每位患者參與研究的時間(週數)。
scipy.stats.CensoredData
類別被使用,因為資料是右截尾的:未截尾的觀察值對應於觀察到的死亡,而截尾的觀察值對應於患者因其他原因離開研究。>>> from scipy import stats >>> x = stats.CensoredData( ... uncensored=[6, 13, 21, 30, 37, 38, 49, 50, ... 63, 79, 86, 98, 202, 219], ... right=[31, 47, 80, 82, 82, 149] ... ) >>> y = stats.CensoredData( ... uncensored=[10, 10, 12, 13, 14, 15, 16, 17, 18, 20, 24, 24, ... 25, 28,30, 33, 35, 37, 40, 40, 46, 48, 76, 81, ... 82, 91, 112, 181], ... right=[34, 40, 70] ... )
我們可以如下計算和視覺化兩組的經驗存活函數。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> ax = plt.subplot() >>> ecdf_x = stats.ecdf(x) >>> ecdf_x.sf.plot(ax, label='Astrocytoma') >>> ecdf_y = stats.ecdf(y) >>> ecdf_y.sf.plot(ax, label='Glioblastoma') >>> ax.set_xlabel('Time to death (weeks)') >>> ax.set_ylabel('Empirical SF') >>> plt.legend() >>> plt.show()
經驗存活函數的視覺檢查表明,兩組之間的存活時間趨勢不同。 為了正式評估差異是否在 1% 水準上顯著,我們使用對數秩檢定。
>>> res = stats.logrank(x=x, y=y) >>> res.statistic -2.73799 >>> res.pvalue 0.00618
p 值小於 1%,因此我們可以認為資料是反對虛無假設的證據,而支持兩組存活函數之間存在差異的對立假設。