臨床試驗-腫瘤:從生存數(shù)據(jù)談ADTTE的構(gòu)建,介紹了生存數(shù)據(jù)的定義與刪失,以及ADTTE的構(gòu)建。這篇文章介紹,內(nèi)容包括生存函數(shù)與生存函數(shù)的Kaplan-Meier估計,第5節(jié)有相關(guān)SAS程序分享。
生存數(shù)據(jù)的分析包括,生存過程的描述、生存過程的比較以及影響因素的分析,這篇文章屬于生存過程的描述。相應(yīng)的統(tǒng)計分析方法分為參數(shù)方法和非參數(shù)方法。參數(shù)方法需要對生存分布、微積分有一定的了解,學(xué)習(xí)門檻會比較高。在臨床研究和流行病學(xué)的刊物上,大多數(shù)研究工作都是使用非參數(shù)方法。
文章主要參考以下2本書籍:
- Statistical Methods for Survival Data Analysis (ELISA T. LEE),
- Clinical Statistics: Introducing Clinical Trials, Survival Analysis, and Longitudinal Data Analysis (Olga Korosteleva)。
歡迎關(guān)注,SAS茶談,后臺回復(fù):SA,獲取相關(guān)資料。
1. 生存數(shù)據(jù)的簡單介紹
生存數(shù)據(jù)可以廣義地定義為到給定事件發(fā)生的時間 (the time to the occurrence of a given event),也叫做生存時間 (survival time),這類數(shù)據(jù)也被稱為Time-to-event。
在研究中,所關(guān)注的目標(biāo)事件可能不會發(fā)生,這種情況下,對應(yīng)的數(shù)據(jù)觀測稱之為刪失觀測或截尾觀測。生存數(shù)據(jù)由兩個變量構(gòu)成:一個是表示時間長短的數(shù)值型變量,另一個是表示事件狀態(tài)的分類變量(事件發(fā)生、事件刪失)。
通常,研究會為刪失觀測確定一個刪失時間來表示時間長短。如果簡單地把刪失時間納入分析,那結(jié)果就會偏保守(實際生存時間長于觀察到的時間)。針對這種情況,統(tǒng)計學(xué)家發(fā)明了特定的統(tǒng)計方法來進行分析,即生存分析。
2. 生存時間的函數(shù)
用 T 表示生存時間,T 的分布可以用三個互相等價的函數(shù)來刻畫:
- 生存函數(shù) (Survival Function)
- 概率密度函數(shù) (Probability Density Function)
- 風(fēng)險函數(shù) (Hazard Function)
2.1 生存函數(shù) (Survival Function)
生存函數(shù)用 S(t) 表示,定義為個體存活時間長于 t 的概率,其為 t 的函數(shù)。

生存函數(shù) S(t) 是 t 的不增函數(shù),在時間為0時,生存的概率為1;在時間趨向于無窮時,生存概率為0。

舉一個簡單例子,假設(shè)一項腫瘤研究入組100人,第1年有10人死亡,第2年有20人死亡。在沒有刪失的情況下,S(1) = (100 - 10) / 100 = 0.9,即生存時間長于1年的概率為0.9;S(2) = (100 -10 - 20) = 0.7,即生存時間長于2年的概率為0.7。
2.2 生存曲線 (survival curve)
生存函數(shù) S(t) 又叫做累積生存率 (cumulative survival rate),其圖形稱為生存曲線 (survival curve),用于描述生存過程。
陡峭的生存曲線,表示低的生存率或較短的生存時間;平緩的生存曲線,表示高的生存率或較長的生存時間。
生存函數(shù)或生存曲線可以用來確定生存時間的中位數(shù)以及其他分位數(shù) (50%, 25%, 75%),也可以用來比較兩個或多個生存分布。

2.3 中位生存時間 (median survival time)
中位生存時間,又稱半數(shù)生存時間,表示50%個體存活且有50%個體死亡的時間,即當(dāng) S(t) = 0.5 時所對應(yīng)的 t 值。在上圖 (a) (b) 中,中位生存時間約等于 5 和 36。
通常,均值是用來描述一個分布的中心趨勢。生存時間的分布常為偏態(tài)分布,少數(shù)特別長或特別短的生存時間會對均值產(chǎn)生過大影響,所以用中位數(shù)來描述生存時間的中心趨勢會更合適一些。
2.4 生存函數(shù)的估計
總體的生存函數(shù)是未知的,我們需要基于樣本數(shù)據(jù)對總體生存函數(shù)進行估計。
研究中,如果不存在刪失數(shù)據(jù),生存函數(shù)可使用存活時間長于 t 的患者數(shù)所占比例來估計:

舉例來說,生存數(shù)據(jù)4, 6, 6, 10, 15, 20。當(dāng) t = 4 時,生存函數(shù)估計為 5 / 6 = 0.833, 存活時間長于 4 的概率為0.833;當(dāng) t = 6 時,生存函數(shù)估計為 3 / 6 = 0.5,存活時間長于 6 的概率為0.5。
當(dāng)有刪失數(shù)據(jù)時,就無法用上式進行估計,因為存活時間長于 t 的患者數(shù)有時是不能確定的。
舉例來說,生存數(shù)據(jù)4, 6, 6+, 10+, 15, 20,"+"表示刪失。當(dāng) t = 5時,我們可以獲取生存函數(shù)的估計 5 / 6 = 0.833;但是我們不能得到 t = 11 時的估計,因為刪失值10+的存在使得存活時間長于11的患者數(shù)是不確定的。
所以,當(dāng)刪失值存在時,需要用其他方法來進行生存函數(shù)的估計。估計生存函數(shù)最常用的非參數(shù)方法,是Kaplan和Meier于1958年提出的乘積-極限法 (product-limit, PL)。
3. Kaplan-Meier估計
一句話概括,生存函數(shù)的Kaplan-Meier估計為,各時段生存率的乘積。
何為生存率?該時段處于風(fēng)險下 (at risk) 的受試者中,存活受試者所占的比例。何為處于風(fēng)險下 (at risk) ?上一時段存活且沒有刪失的進入當(dāng)前時段的受試者。如果某一時段含有刪失值,刪失值會計入該時段的存活數(shù),但是不會計入到下一時段處于風(fēng)險下的人數(shù)以及存活數(shù)中。
假設(shè)有 k 個不同的生存時間觀測,按增序排列,t1 < t2 < … < tk。在 ti 時段 ( ti-1< t ≤ ti ),處于風(fēng)險下的受試者數(shù)記為 ni (不包括上一時段的刪失受試者),死亡人數(shù)記為 di,則活過ti時段的人數(shù)為 ni - di,ti時段的生存率為 (ni - di) / ni。生存函數(shù)的KM估計,如下表示:

從條件概率角度看,KM估計可以這樣理解,生存時間長于 k 的概率 = 第1年受試者的生存率第1年存活受試者在第2年的生存率
······
第k-1年存活受試者在第k年的生存率。
那么兩相鄰時刻的生存函數(shù)有如下關(guān)系:

定義與公式比較抽象,下面以數(shù)據(jù)進行演示,生存數(shù)據(jù)4, 6, 6+, 10+, 15, 20,"+"表示刪失。
當(dāng) t = 0 時,處于風(fēng)險下的受試者數(shù)為6,死亡人數(shù)為0,刪失人數(shù)為0,生存率為(6 - 0) / 6 = 1,生存函數(shù)估計為1,即存活時間長于0的概率為1;
當(dāng) t = 4 時(0 - 4時段),當(dāng)前時段處于風(fēng)險下的受試者數(shù)為6,死亡人數(shù)為1,刪失人數(shù)為0,生存率為(6 - 1) / 6 = 0.833,生存函數(shù)估計為1
0.833 = 0.833,即存活時間長于4 的概率為0.833;
當(dāng) t = 6 時(4 - 6時段),前一時段有1人死亡,0人刪失,當(dāng)前時段處于風(fēng)險下的受試者數(shù)為5,死亡人數(shù)為1,刪失人數(shù)為1,生存率為(5 - 1) / 5 = 0.8,生存函數(shù)估計為0.833
0.8 = 0.666,即存活時間長于6的概率為0.666;
當(dāng) t = 10 時(6 - 10時段),前一時段有1人死亡,1人刪失,當(dāng)前時段處于風(fēng)險下的受試者數(shù)為3,死亡人數(shù)為0,刪失人數(shù)為1,生存率為(3 - 0) / 3 = 1,生存函數(shù)估計為0.833
0.8
1 = 0.666,即存活時間長于10的概率為0.666;
當(dāng) t = 15 時(10 - 15時段),前一時段有0人死亡,1人刪失,當(dāng)前時段處于風(fēng)險下的受試者數(shù)為2,死亡人數(shù)為1,刪失人數(shù)為0,生存率為(2 - 1) / 2 = 0.5,生存函數(shù)估計為0.833
0.8
1
0.5 = 0.333,即存活時間長于15 的概率為0.333;
當(dāng) t = 20時(15 - 20時段),前一時段有1人死亡,0人刪失,當(dāng)前時段處于風(fēng)險下的受試者數(shù)為1,死亡人數(shù)為1,刪失人數(shù)為0,生存率為(1 - 1) / 1 = 0,生存函數(shù)估計為0.833
0.8
1
0.5
0 = 0,即存活時間長于20的概率為0;
以上生存數(shù)據(jù)對應(yīng)的生存曲線圖如下:

4. 生存數(shù)據(jù)實例
一項為期 2 年的臨床試驗,測試新心臟瓣膜的功效。10 名患者的生存時間如下(以月為單位),“+”表示結(jié)果已刪失。

當(dāng) t = 0 時,處于風(fēng)險下的受試者數(shù)為10,死亡人數(shù)為0,刪失人數(shù)為0,生存率為(10- 0) / 10 = 1,KM估計為1,即存活時間長于0的概率為1;
當(dāng) t = 5 時(0 - 5時段),當(dāng)前時段處于風(fēng)險下的受試者數(shù)為10,死亡人數(shù)為1,刪失人數(shù)為0,生存率為(10 - 1) / 10 = 0.9,KM估計為1
0.9 = 0.90,即存活時間長于5的概率為0.90;
當(dāng) t = 8 時(5 - 8時段),當(dāng)前時段處于風(fēng)險下的受試者數(shù)為9,死亡人數(shù)為1,刪失人數(shù)為1,生存率為(9 - 1) / 9 = 0.89,KM估計為1
0.9
0.89 = 0.80,即存活時間長于8的概率為0.80;
當(dāng) t = 10 時(8 - 10時段),當(dāng)前時段處于風(fēng)險下的受試者數(shù)為7,死亡人數(shù)為2,刪失人數(shù)為0,生存率為(7 - 2) / 7 = 0.71,KM估計為1
0.9
0.89
0.71 = 0.57,即存活時間長于10的概率為0.57。
其他各時間點KM估計參考以下表格。

5. Kaplan-Meier估計的SAS程序
通過SAS中Proc Lifetest進行生存分析,KM估計以及對應(yīng)的生存曲線都可以進行簡單輸出。不過,如果想要輸出更復(fù)雜的圖形,就需要借助SGPLOT或GTL語句進行實現(xiàn),這一部分會另寫文章進行介紹。
以上一節(jié)研究數(shù)據(jù)為例,下面分享一些簡單的生存分析SAS語句。
5.1 數(shù)據(jù)輸入
按照ADTTE IG 建議,以數(shù)值1表示數(shù)據(jù)刪失,數(shù)值0表示數(shù)據(jù)未刪失。數(shù)據(jù)輸入程序如下:
**Data input;
data valves;
input duration status @@;
datalines;
24 1 16 1 8 0 19 0 10 0 8 1 5 0 17 0 20 0 10 0
;
run;
5.2 KM估計
過程步Proc Lifetest進行KM估計,需要指定刪失狀態(tài)的變量值。變量值可以是單個數(shù)值,也可以是值的序列。
**KM estimator;
proc lifetest data = valves method = km;
time duration * status(1);
run;
以下為SAS默認輸出結(jié)果,Survival列為KM的估計值,SAS不會輸出刪失記錄以及重復(fù)記錄的KM估計。


5.3 KM Plot
若想要簡單輸出KM估計的生存曲線,即KM Plot, 可使用plots=選項,并打開ods graphics選項。
**KM plot;
ods graphics on;
proc lifetest data = valves method = km plots=( survival );
time duration * status(1);
run;
ods graphics off;
輸出圖形如下:

5.4 處于風(fēng)險下的人數(shù) (At risk)
若想要輸出處于風(fēng)險下的人數(shù),需要使用atrisk選項。
**At risk;
ods graphics on;
proc lifetest data = valves method = km plots=( survival(atrisk) );
time duration * status(1);
run;
ods graphics off;
輸出圖形如下:

5.5 各數(shù)據(jù)時點的處于風(fēng)險下的人數(shù)
SAS默認輸出的時間軸刻度與數(shù)據(jù)中的時點并不一致,可以使用atrisktickonly選項以及設(shè)置ticks序列范圍,使之保持一致。
**Ticks in data;
ods graphics on;
proc lifetest data = valves method = km plots=( survival( atrisk(atrisktickonly) =(0 5 6 10 16 17 19 20 24) ) );
time duration * status(1);
run;
ods graphics off;
輸出圖形如下:

其他處理,參考Proc Lifetest的SAS官方文檔。
6. 總結(jié)
這篇文章介紹了,生存分析中的生存函數(shù),以及對應(yīng)的非參數(shù)估計——Kaplan-Meier估計。KM估計為生存數(shù)據(jù)各時段的生存率的乘積,讀者可以通過文章中具體時點的估計值解說,加深對KM估計的理解。
感謝閱讀, 歡迎關(guān)注:SAS茶談!
若有疑問,歡迎評論交流!
梳理不易,轉(zhuǎn)載請注明出處 (by Jihai / SAS茶談)