劉老師總結的統計教程合集,可以節省你不少時間
一般生存分析文章的統計部分通常會這麼寫:採用Kaplan-Meier法計算生存率和中位生存期,採用log-rank檢驗生存率差異,Cox回歸法進行多因素分析。檢驗水準α= 0.05。
我們首先看看什麼是生存分析?
因為無法在短時間內評價慢性病患者的預後,所以通常情況下不會簡單地採用治癒率、病死率等指標,而是對患者進行隨訪,分析一定的時間之後患者生存或死亡的情況,這種將事件的結果和出現這一結果所經歷的時間結合起來分析的方法,稱為生存分析 (Survival Analysis)。
其實,生存分析應用非常廣泛,可以分析在不同試驗條件下,研究對象「生存時間」的分布情況,進而了解試驗條件對生存時間的影響。這裡的「生存時間」不專指人或動物的生命持續時間,而是泛指某個事件發生前所經歷的時間。如一個工人從下崗後到實現再就業的時間;一臺汽車從開始使用到發生第一次故障的時間;一個病人從確診患病到死亡的時間等。
Kaplan-Meier法簡稱K-M法,又稱乘積極限法(Product-limit Estimate)是生存分析方法中最常用的一種,主要用於估計患者生存率和繪製生存曲線。Kaplan-Meier曲線,以生存時間為橫軸,生存率S (tk)為縱軸,繪製而成的連續型的階梯形曲線,用以說明生存時間與生存率之間的關係。生存曲線,一般是平滑而水平延伸的,當某個時間點一旦有患者發生終點事件(如死亡),曲線就會垂直下降,下降幅度是該時間點上患者發生終點事件例數和上一個時間節點後隨訪的患者樣本量的比。
當兩組或多組生存曲線進行比較時,常用的假設檢驗方法是對數秩檢驗(log-rank test ) :又稱時序檢驗,屬於非參數檢驗,用於比較兩組或多組生存曲線或生存時間是否相同,檢驗統計量為卡方。
下面我們一起來看一下如何用R語言繪製Kaplan-Meier曲線和實現log-rank檢驗。
一、 安裝和加載R包
繪製Kaplan-Meier生存曲線需要安裝R包:survminer和survival。
install.packages("survminer")
install.packages("survival")
library(survminer)
library(survival)
二、導入內置數據集
我們使用survival包的lung數據集進行演示。
data(lung) # 加載lung數據集
View(lung) # 查看數據集
str(lung)
三、擬合生存曲線
3.1 創建生存對象
在survival包中先使用Surv()函數創建生存對象,生存對象是將事件時間和結局信息合併在一起的數據結構。
attach(lung) # 綁定數據集
Surv(time,status) # 創建生存對象
在上面輸出的生存對象中,帶"+"號的表示右刪失數據。
3.2 擬合曲線
R中使用survfit()函數來擬合生存曲線。
fit <- survfit(Surv(time,status) ~ sex, data = lung)
fit # 查看擬合曲線信息
還可以使用summary()函數輸出更多詳細信息。
summary(fit)
四、繪製Kaplan-Meier生存曲線
ggsurvplot(fit, data = lung)
ggsurvplot(fit, data = lung,
surv.median.line = "hv") # 增加中位生存時間
ggsurvplot(fit, data = lung,
surv.median.line = "hv", # 增加中位生存時間
conf.int = TRUE) # 增加置信區間
ggsurvplot(fit, data = lung,
conf.int = TRUE, # 增加置信區間
fun = "cumhaz") # 繪製累計風險曲線
ggsurvplot(fit, data = lung,
conf.int = TRUE, # 增加置信區間
risk.table = TRUE) #不同時間點風險人數表
ggsurvplot(fit, # 創建的擬合對象
data = lung, # 指定變量數據來源
conf.int = TRUE, # 顯示置信區間
pval = TRUE, # 添加P值
surv.median.line = "hv", # 添加中位生存時間線
add.all = TRUE) # 添加總患者生存曲線
六、採用log-rank 檢驗生存率差異
survdiff(Surv(time,status) ~ sex)
結果顯示:P=0.001,提示不同性別組生存率差異有統計學意義。
七、技能拓展
比較三組及三組以上生存時間和生存率的差異
7.1首先,查看分組變量ph.ecog,共四組,但有一組個數為1,故刪除該觀測,生成新的lung數據集。
table(ph.ecog)
lung<-lung[ph.ecog<3,]
7.2繪製曲線
fit <- survfit(Surv(time,status) ~ ph.ecog, # 創建生存對象
data = lung) # 數據集來源
ggsurvplot(fit, # 創建的擬合對象
data = lung, # 指定變量數據來源
conf.int = TRUE, # 顯示置信區間
pval = TRUE, # 添加P值
surv.median.line = "hv") # 添加中位生存時間線
7.3整體比較
survdiff(Surv(time,status) ~ ph.ecog,lung)
7.4兩兩比較
pairwise_survdiff(Surv(time,status) ~ ph.ecog,lung,p.adjust.method = "BH")
參考資料(可作為拓展閱讀材料):
1. http://blog.sciencenet.cn/home.php?mod=space&uid=2609994&do=blog&id=976898
2. http://www.bio-info-trainee.com/1313.html
3. https://www.jianshu.com/p/3527d7bd6a49
4. https://www.cnblogs.com/wwxbi/p/6136348.html
5. https://zhuanlan.zhihu.com/p/49482538
6. https://blog.csdn.net/zfcjhdq/article/details/83502854
7. https://www.sohu.com/a/230205991_313188
8. https://www.jianshu.com/p/1e8b5286f007
9. R語言統計與繪圖:ggsurvplot()函數繪製Kaplan-Meier生存曲線
10. 王媛媛,畢玉,王在翔,宋棠,郭曉雷,付振濤,吳炳義. 山東省肺癌患者生存分析[J]. 中國衛生統計,2018,01:111-113+116.
統計諮詢