臨床試驗:生存分析 (1) - Kaplan-Meier估計

臨床試驗-腫瘤:從生存數(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本書籍:

  1. Statistical Methods for Survival Data Analysis (ELISA T. LEE),
  2. 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ù)來刻畫:

  1. 生存函數(shù) (Survival Function)
  2. 概率密度函數(shù) (Probability Density Function)
  3. 風(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ù)雜的圖形,就需要借助SGPLOTGTL語句進行實現(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茶談)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容