題記:本文重點講解在生存分析中如何合理設置連續(xù)型自變量的截斷值唐瀑,將連續(xù)型自變量轉換為二分類變量。
1.?背景知識
對于結果變量為二分類資料的數(shù)據(jù)矿筝,連續(xù)型自變量截斷值的確定一般通過ROC分析秽誊,我們通常選用約登指數(shù)(敏感度+特異度-1)最大的點為最佳截斷值(cut-off值)點,這些都是常用的統(tǒng)計學方法纫雁,可以參考筆者與胡志德博士主編《聰明統(tǒng)計學》的相關章節(jié)[1]。但有時我們面對的問題要更復雜倾哺,假定我們的結果已經(jīng)不是單純的二分類資料轧邪,而是包含有時間因素的分類資料(Time to event data),即我們常說的生存資料悼粮。
舉個簡單例子闲勺,假定在某研究中我們定義生存資料的結局是死亡,那作為研究者來說不僅關心研究對象是否死亡扣猫,而且關心研究對象從入組開始到死亡的時間長度。比如某研究中試驗組共入組100人翘地,假定在入組后的第1年申尤、第2年、第3年死亡人數(shù)分別為:0衙耕、0昧穿、90人;對照組同樣入組100人橙喘,假定入組后第1年时鸵、第二年、第3年死亡人數(shù)分別為:90、0饰潜、0初坠。在這樣一個例子中,如果我們只看重死亡的人數(shù)彭雾,那么試驗組與對照組結果沒有差別碟刺,如果我們同時關注死亡與發(fā)生死亡的時間,那顯然試驗組的結局要優(yōu)于對照組薯酝。從結局變量的維度上講半沽,生存資料在二分類的資料的基礎上又增加了時間的維度。
那么對于生存資料中的連續(xù)型自變量是否還可以直接采用常規(guī)ROC分析來確定截斷值呢吴菠?在既往已經(jīng)發(fā)表的文獻中我們有時會看到有些作者確實直接采用常規(guī)ROC分析方法確定生存資料中連續(xù)型自變量的截斷值者填,那么這樣的做法是否妥當?筆者認為做葵,這種做法目前不好判斷正確與否占哟,但至少是不妥當?shù)模驗槲覀冇懈茖W的方法蜂挪。本文中重挑,我們將介紹三種方法來處理此類問題。本文的數(shù)據(jù)來自于筆者自己的研究中使用到的數(shù)據(jù)棠涮,數(shù)據(jù)下載自TheCancer Genome Atlas(TCGA)數(shù)據(jù)庫谬哀,為了方便讀者閱讀,我們也對數(shù)據(jù)進行了簡化處理严肪,讓其看起來更具有代表性史煎,方便大家根據(jù)自己的研究數(shù)據(jù)進行實踐操作。
2.?案例分析
【案例1】筆者在TheCancer Genome Atlas(TCGA)數(shù)據(jù)中下載了1215例乳腺癌患者的臨床資料與相對基因表達信息驳糯。下載網(wǎng)址:https://genome-cancer.ucsc.edu/篇梭,數(shù)據(jù)版本:2015-02-24;DatasetID:TCGA_BRCA_exp_HiSeqV2酝枢。臨床數(shù)據(jù)與基因表達信息按照芯片編號進行嚴格匹配后恬偷,我們從中提取了這1215例患者的生存時間,結局狀態(tài)帘睦、X基因的相對表達水平袍患。我們的研究目的是把X基因通過合適的截斷值二分為X基因低表達和X基因高表達組,然后通過生存分析判斷這兩個組的預后是否有差異竣付。本例中生存時間單位:天诡延,NA表示數(shù)據(jù)缺失;我們定義的結局為死亡古胆,1:死亡肆良,0:截尾;X基因表達水平為經(jīng)過標準化之后的基因含量,是連續(xù)型數(shù)據(jù)惹恃。讀者朋友請注意:此處X基因可以替換為與預后可能有關的任何連續(xù)型自變量夭谤,比如任何分子標志物含量、實驗室檢查指標的數(shù)值座舍、年齡沮翔、體重、血壓等等曲秉。數(shù)據(jù)整理如下表1所示采蚀。
表1.1215例患者X基因表達水平與生存資料
2.1 中位數(shù)法確定截斷值
通過中位數(shù)確定截斷值是最為常用的一種截斷值確定的方法,類似的還有通過均值確定截斷值承二,通過四分位數(shù)間距確定截斷值等榆鼠。這些方法可歸為一類,這種方法操作簡單亥鸠,而且容易被讀者理解和接受妆够。下面我們就通過IBMSPSS 22.0(IBMSPSS, NY, USA)軟件演示下中位數(shù)確定截斷值,如圖1~圖7所示负蚊。
圖1. 定義變量Time: 生存時間神妹;Status: 生存結局;Xgene:X基因的表達水平
圖2. 錄入數(shù)據(jù)
圖3. 計算Xgene的中位數(shù)家妆,依次選擇“Analyze”-“Descriptive Statistics”-“Explore”鸵荠。
圖4. 計算Xgene的中位數(shù),選擇“Xgene”進入“Dependent List”伤极,其他選項默認蛹找,點擊“OK”。
圖5. 計算結果哨坪。Xgene的中位數(shù)=10.7112庸疾,為了方便閱讀,我們?nèi)≈?0.71当编。
圖6. 新建分組變量“group”:小于10.71為基因低表達組届慈,不小于10.71為高表達組。
圖7. 重新整理數(shù)據(jù):錄入每個患者具體分組信息忿偷。后續(xù)按照分組變量進行生存分析等拧篮。注意:此處使用Excel軟件進行分組操作更方便,按照Xgene表達相對水平從低到高排序牵舱,找到中位數(shù)10.71,小于10.71分組為1缺虐,大于10.71分組為2芜壁。
2.2 X-tile軟件法確定截斷值
上述通過中位數(shù)的方法確定截斷值優(yōu)點是操作簡便、讀者易接受,但通過中位數(shù)這類簡單的方法確定的截斷值是否為最佳截斷值呢慧妄?筆者認為顷牌,如果研究者足夠幸運也許中位數(shù)就是最佳的截斷值,這種簡單的方法多少帶有一些“運氣”的成分塞淹。那我們接下來介紹一種更為科學的生存資料中連續(xù)型自變量最佳截斷值的確定方法:通過X-tile軟件確定生存資料中連續(xù)型自變量的最佳截斷值窟蓝。該軟件支持對連續(xù)型自變量進行二分類和三分類,其背后的統(tǒng)計學原理在此我們不做詳細介紹饱普,感興趣的讀者可以閱讀文末參考文獻的全文运挫。如果我們在論文寫作過程中使用了X-Tile這個軟件確定截斷值,引用這篇參考文獻即可[2]套耕。X-tile軟件下載地址:http://medicine.yale.edu/lab/rimm/research/software.aspx谁帕。下面我們就演示其操作過程,我們繼續(xù)采用【案例1】的數(shù)據(jù)冯袍,如圖8~圖13所示匈挖。
圖8. 數(shù)據(jù)準備。將數(shù)據(jù)存儲為文本文件(制表符分隔)康愤。X-tile軟件要求此格式數(shù)據(jù)儡循。
圖9. 啟動X-tile軟件,點擊“Analyze”征冷。
圖10. 導入數(shù)據(jù)文件择膝。依次點擊“File”-“Open”,選擇要打開的數(shù)據(jù)资盅。
圖11. 選擇文本文件(制表符分隔)格式的數(shù)據(jù)打開调榄。
圖12. 如圖設置參數(shù)。依次設置:Censor選入“Status”變量呵扛,SurvivalTime選入“Time”變量每庆,單位選擇“Days”,Marker1選入“Xgene”變量今穿。然后依次點擊“Do”-“Kaplan-Meier”-“Marker1”缤灵。
圖13. 將光標移至上圖左下方X軸上紅色區(qū)域單擊,即可得計算結果蓝晒,本例中最佳截斷值為11.17腮出,按照此截斷值劃分后的Kaplan-Meier曲線如上圖右下方所示。此處需要注意的是芝薇,如果把光標移至上圖左下方三角形紅色與黑色相間區(qū)域胚嘲,則可對此連續(xù)型變量三分,讀者可自行嘗試洛二。確定截斷值后的后續(xù)數(shù)據(jù)分組與整理數(shù)據(jù)操作與2.1相同馋劈,此處不再贅述攻锰。
2.3 SurvivalROC法確定截斷值
以上通過X-Tile軟件確定截斷值的方法操作簡便,結果可靠妓雾,輸出的結果也較豐富娶吞。有些讀者除了需要獲得生存資料中連續(xù)型自變量的最佳截斷值點,可能還需要像普通ROC分析一樣畫出ROC曲線并計算出曲線下的面積械姻,這時我們也可以通過R軟件(version 3.3.3)的survivalROC程序包進行計算(version 1.0.3)[3-4]妒蛇。我們繼續(xù)使用【案例1】的數(shù)據(jù),R軟件操作代碼如下:
library(survivalROC)#載入程序包
data<-read.csv(file.choose())#導入外部數(shù)據(jù)楷拳,首先把整理后的數(shù)據(jù)另存為.csv格式
nobs<- NROW(data) #定義數(shù)據(jù)集的行數(shù)
cutoff<- 3650 #設定為10年生存時間绣夺,讀者可根據(jù)需求設定為3年、5年等唯竹。
#Delete "NA"
data<-data[which(data$Status!="NA"),]
#將結果變量中缺失數(shù)據(jù)刪除乐导,讀者根據(jù)自己數(shù)據(jù)特點決定是否需要此命令。
#Fit survival ROC model with method of "KM"
SROC= survivalROC(Stime = data$Time,
? ? ? ? ? ? ? ? ? ? Status = data$Status,? ?
? ? ? ? ? ? ? ? ? ? marker = data$Xgene,? ?
? ? ? ? ? ? ? ? ? ? predict.time = cutoff, method= "KM" ) #構建生存函數(shù)
cut.op= SROC$cut.values[which.max(SROC$TP-SROC$FP)] #計算最佳截斷值
cut.op#輸出最佳截斷值
#plot survival ROC #繪制survival ROC曲線浸颓,并設置圖形參數(shù)物臂。
plot(SROC$FP,SROC$TP, type="l", xlim=c(0,1), ylim=c(0,1),?
? ? xlab = paste( "FP","\n", "AUC = ",round(SROC$AUC,3)),
? ? ylab = "TP",main = "10-yearsurvival ROC", col="red")
abline(0,1)
legend("bottomright",c("Xgene expression"),col="red",lty=c(1,1))
按照10年生存時間,最后計算的截斷值為11.0686产上,后續(xù)可以按照前述方法整理數(shù)據(jù)進行生存分析等棵磷。同時我們也使用R軟件畫出了survivalROC曲線,計算了曲線下面積(AUC)晋涣,如圖14所示仪媒。
圖14. survivalROC曲線,AUC=0.601谢鹊。
3. 總結與討論
綜上算吩,筆者總結了在生存資料中連續(xù)型自變量截斷值確定的三種方法,筆者推薦第二種截斷值確定的方法佃扼,該方法性價比較高偎巢,結果直觀,對于臨床醫(yī)生來說易學易用兼耀。第一種方法較為簡單压昼,但很難確定中位數(shù)是否為最佳截斷值。第三種方法也是一種較好的方法瘤运,但需要有一定R語言的基礎窍霞,對于臨床醫(yī)生來說可能有一定的難度。細心的讀者可能發(fā)現(xiàn)第二種方法與第三種方法計算的結果并不相同拯坟,事實上這兩種方法背后的統(tǒng)計學原理是不同的但金,計算結果存在差異并不奇怪。即便是第三種方法郁季,我們設定不同的時間節(jié)點傲绣,比如把本例中的10-year survivalROC更換為5-yearsurvivalROC(調(diào)整predict.time= cutoff設置)掠哥,計算的截斷值也不同,讀者可以自行嘗試秃诵。但以上三種方法在論文中使用都是可行的。論文寫作時我們也可以同時采用以上三種方法確定截斷值塞琼,如果三種方法可以得到類似的結論菠净,那說明結論比較穩(wěn)健。
4. 參考文獻
[1]. 周支瑞,胡志德.聰明統(tǒng)計學. 長沙:中南大學出版社, 2016.
[2].?Camp R L, Dolled-Filhart M, Rimm D L. X-tile:a new bio-informatics tool for biomarker assessment and outcome-based cut-pointoptimization [J]. Clin Cancer Res, 2004, 10(21): 7252-9.
[3].?Heagerty, P.J., Lumley, T., Pepe, M. S. (2000) Time-dependent ROC Curves for Censored Survival Data and a Diagnostic Marker Biometrics, 56, 337-344.
[4]. 周支瑞,胡志德.瘋狂統(tǒng)計學. 長沙:中南大學出版社, 2018.