天天看點

group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

生存分析研究的是某個事件發生之前過去的時間,在臨床研究中最常見的應用就是死亡率的估計(預測患者的生存時間),不過生存分析也可以應用于其他領域如機械故障時間等。

在R中,survival包中有很多函數可以對生存資料進行模組化,可以使用survfit()函數來估計删失資料的生存曲線,使用coxph()函數用來拟合Cox比例風險模型。

在survminer包中,可以使用

plot()

函數、

ggsurvplot()

函數用來繪制Kaplan-Meier生存曲線。

今天就來學習在R中使用ggsurvplot()函數繪制Kaplan-Meier生存曲線。

目 錄
  • 1. 安裝和加載R包
  • 2. 導入内置資料集
  • 3. 拟合生存曲線
    • 3.1 建立生存對象
    • 3.2 拟合曲線
  • 4. 繪制基礎曲線
  • 5. 自定義曲線參數
    • 5.1 增加中位生存時間
    • 5.2 增加置信區間
    • 5.3 繪制累計風險曲線
    • 5.4 添加風險表
    • 5.5 添加總患者生存曲線
    • 5.6 自定義調色闆
  • 6. 美化生存曲線
  • 7. survfit()函數
  • 8. ggsurvplot()函數
    • 8.1 主要參數
    • 8.2 圖示題和坐标軸标簽
    • 8.3 圖例标題和位置
    • 8.4 坐标軸範圍、刻度間距
    • 8.5 置信區間
    • 8.6 P值文本大小和位置
    • 8.7 删失點
    • 8.8 生存表
    • 8.9 生存圖高度
    • 8.10 字型樣式
  • End

1. 安裝和加載R包

繪制Kaplan-Meier生存曲線需要用到的R包:

survminer

survival

如果沒有安裝就先安裝。
install.packages("survminer") # 安裝survminer包
install.packages("survival") # 安裝survival包
library(survminer) # 加載包
library(survival) # 加載包
           

2. 導入内置資料集

使用

survival

包的

lung

資料集進行示範。

data(lung) # 加載lung資料集
View(lung) # 檢視資料集
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制
lung資料集:NCCTG晚期肺癌患者的生存率。

inst # 機構代碼;
time # 生存天數;
status # 生存狀态,1為删失,2為死亡;
age # 年齡;
sex # 性别,1為男性,2為女性;
ph.ecog、ph.karno、pat.karno # 為病人和患者評分,這裡用不到;
meal.cal # 進食時消耗的卡路裡;
wt.loss # 最近6個月内的體重下降。
           

3. 拟合生存曲線

3.1 建立生存對象

在survival包中先使用Surv()函數建立生存對象,生存對象是将事件時間和删失資訊合并在一起的資料結構。

attach(lung) # 綁定資料集
Surv(time,status) # 建立生存對象
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

在上面輸出的生存對象中,帶"+"号的表示右删失資料。

3.2 拟合曲線

R中使用survfit()函數來拟合生存曲線。

fit <- survfit(Surv(time,status) ~ sex,  # 建立生存對象 
               data = lung) # 資料集來源
fit # 檢視拟合曲線資訊
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

從上圖可知,lung資料集中男性138例,女性90例;男性和女性發生感興趣結局事件分别有112例和53例。男性和女性的中位生存時間分别為

270天

426天

還可以使用summary()函數輸出更多詳細資訊。

summary(fit)
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

上圖中survival為生存函數在生存時間點處的KM估計值。同時,輸出結果中還給出了估計的标準誤差和95%置信區間。

4. 繪制基礎曲線

ggsurvplot(fit, data = lung)
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

5. 自定義曲線參數

5.1 增加中位生存時間

中位生存時間(median survival time)又稱為生存時間的中位數,表示剛好有

50%

的個體其存活期大于該時間,是生存分析中常用的概括性統計量。

圖解法

是計算中位生存時間的方法。其利用生存曲線圖,從縱軸生存率為50%處畫一條與橫軸平行的線,并與生存曲線相交,然後自交點畫垂線與橫軸相交,此交點對應的時間即為中位生存時間,圖解法比較簡單直覺,但結果比較粗略。

ggsurvplot(fit, data = lung,
           surv.median.line = "hv") # 增加中位生存時間
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

從圖上可以看出,男性的中位生存時間小于女性。

5.2 增加置信區間

ggsurvplot(fit, data = lung,
           surv.median.line = "hv",  # 增加中位生存時間
           conf.int = TRUE) # 增加置信區間
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

5.3 繪制累計風險曲線

ggsurvplot(fit, data = lung, 
           conf.int = TRUE, # 增加置信區間
           fun = "cumhaz") # 繪制累計風險曲線
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

5.4 添加風險表

ggsurvplot(fit, data = lung,
           conf.int = TRUE,  # 增加置信區間
           risk.table = TRUE) # 繪制累計風險曲線
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

5.5 添加總患者生存曲線

ggsurvplot(fit, # 建立的拟合對象
           data = lung,  # 指定變量資料來源
           conf.int = TRUE, # 顯示置信區間
           pval = TRUE, # 添加P值
           surv.median.line = "hv",  # 添加中位生存時間線
           add.all = TRUE) # 添加總患者生存曲線
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

5.6 自定義調色闆

ggsurvplot(fit, # 建立的拟合對象
           data = lung,  # 指定變量資料來源
           conf.int = TRUE, # 顯示置信區間
           pval = TRUE, # 添加P值
           surv.median.line = "hv", # 添加中位生存時間線
           palette = "hue")  # 自定義調色闆
可選調色闆有 "grey","npg","aaas","lancet","jco", 
"ucscgb","uchicago","simpsons"和"rickandmorty".
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制
6. 美化生存曲線
ggsurvplot(fit, # 建立的拟合對象
           data = lung,  # 指定變量資料來源
           conf.int = TRUE, # 顯示置信區間
           pval = TRUE, # 添加P值
           surv.median.line = "hv",  # 添加中位生存時間線
           risk.table = TRUE, # 添加風險表
           xlab = "Follow up time(d)", # 指定x軸标簽
           legend = c(0.8,0.75), # 指定圖例位置
           legend.title = "", # 設定圖例标題
           legend.labs = c("Male", "Female"), # 指定圖例分組标簽
           break.x.by = 100)  # 設定x軸刻度間距
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

7. survfit()函數

survfit(formula, data, weights, subset, na.action,  
        stype=1, ctype=1, id, cluster, istate, timefix=TRUE,
        etype, error,  ...)

## 參數解釋
formula # 形如 Surv(time,status) ~ sex 的公式
data # 變量來源的資料集 
weights # 觀察值的權重
subset # 資料集的子集
na.action # 處理缺失值的函數
id # 識别觀察對象個體的變量
etype # 事件的類型
...
           

8. ggsurvplot()函數

8.1 主要參數

ggsurvplot(fit, data = NULL, fun = NULL, color = NULL,
           palette = NULL, linetype = 1, conf.int = FALSE, 
           pval = FALSE, pval.method = FALSE, 
           test.for.trend = FALSE, surv.median.line = "none", 
           risk.table = FALSE, cumevents = FALSE,
           cumcensor = FALSE, tables.height = 0.25, 
           group.by = NULL, facet.by = NULL, add.all = FALSE, 
           combine = FALSE, ggtheme = theme_survminer(), 
           tables.theme = ggtheme, ...)

# 參數解釋
fit # 拟合的生存曲線對象
data # 用來拟合生存曲線的資料集
fun  # 常用三個字元參數;
# "event"繪制累積事件(f(y)=1-y),
# "cumhaz"繪制累積危害函數(f(y)=-log(y));
# "pct"繪制生存機率(百分比)。
color # 設定生存曲線的顔色。
# 如果隻有1條曲線,則直接設定color="blue";
# 如果有多條曲線,預設color="strata",按分組為生存曲線着色;
# 也可以自定義調色闆來設定曲線顔色。

palette # 調色闆,預設"hue"。
# 可選調色闆有"grey","npg","aaas","lancet", 
# "jco", "ucscgb","uchicago","simpsons"和"rickandmorty".
linetype = 1 # 設定曲線線型。可以按"strata"設定線型;
# 或按數字向量c(1, 2)或按字元向量c("solid", "dashed")設定
conf.int # 邏輯詞;預設FASLE;為TRUE則繪制曲線置信區間

pval = FALSE # 邏輯詞;為TRUE則将統計檢驗計算的p值添加到圖上;
# 為數字,則直接指定P值大小,如pval = 0.03;
# 為字元串,則添加字元串到圖上,如pval = "p-value: 0.031"
pval.method  # 邏輯詞,是否添加計算p值的統計方法的文本;
# 隻有當 pval = TRUE時, 才會在圖上添加檢驗方法文本
test.for.trend # 邏輯詞,預設為FALSE;
# 為TRUE則傳回趨勢p值的檢驗,趨勢檢驗旨在檢驗生存曲線的有序差異
surv.median.line # 在中位生存時間點處繪制水準或垂直線的字元向量;
# 可用值有"none"、"hv"、"h"、"v";其中v繪制垂直線,h繪制水準線。
risk.table = FALSE  # 邏輯詞,圖上是否添加風險表;
# "absolute" 顯示處于風險中的絕對數量;
# "percentage" 顯示處于風險中的百分比數量
# "abs_pct" 顯示處于風險中的絕對數量和百分比
cumevents # 邏輯詞,是否添加累計事件表
cumcensor # 邏輯詞,是否添加累計删失表
tables.height = 0.25 # 生存曲線圖下所有生存表的高度,數值0-1之間
group.by  # 包含分組變量名稱的字元向量,向量長度≤2
facet.by # 字元向量,指定繪制分面生存曲線的分組變量(應≤2)的名稱
ggtheme=theme_survminer() # 設定ggplot2主題,如theme_bw()
tables.theme # 作用于生存表的ggplot2主題名稱
# 有theme_survminer、theme_cleantable()
add.all = FALSE # 邏輯詞;是否添加總患者生存曲線到主生存圖中
           
group子句傳回結果中會有一行對null值的統計_R語言統計與繪圖:Kaplan-Meier生存曲線繪制

8.2 圖示題和坐标軸标簽

title  # 圖表标題
xlab, ylab # 分别指x軸和y軸标簽
           

8.3 圖例标題和位置

legend # 指定圖例位置的字元向量:"top"(預設),"bottom","left","right","none"等。
# legend="none" 表示移除圖例;
# 圖例位置也可用數字向量c(x,y)指定,x和y的值應在0到1之間。
legend.title  # 圖例标題,如legend.title = "Sex"。
legend.labs # 指定圖例标簽的字元向量, 替換fit中strata的名稱,順序應與strata一緻。
# 如 legend.labs = c("Male","Female")
           

8.4 坐标軸範圍、刻度間距

break.time.by # 設定坐标軸刻度間距
break.x.by # 設定x軸刻度的間距,如break.x.by = 100
break.y.by # 設定y軸刻度的間距,如break.y.by = 0.2
surv.scale # 生存曲線的比例轉換。允許的值為"default"或"percent"。
xlim, ylim # 指定x軸和y軸的範圍,如xlim = c(0,30), ylim = c(0,1)
axes.offset # 邏輯詞,預設為TRUE。為FALSE,則生存曲線圖的坐标軸從原點開始。
           

8.5 置信區間

以下隻有在conf.int = TRUE時才生效
conf.int.fill # 設定置信區間填充的顔色
conf.int.style # 設定置信區間的類型,有"ribbon"(預設),"step"兩種。
conf.int.alpha # 數值,指定置信區間填充顔色的透明度;
# 數值在0-1之間,0為完全透明,1為不透明。
           

8.6 P值文本大小和位置

以下隻有在pval = TRUE時才生效
pval.size # 指定p值文本大小的數字,預設為 5。
pval.coord # 長度為2的數字向量,指定p值位置x、y,如pval.coord=c(x,y)。
pval.method.size # 指定檢驗方法 log.rank 文本的大小
pval.method.coord # 指定檢驗方法 log.rank 文本的坐标
log.rank.weights # 計算log-rank檢驗p值的權重類型的名稱。
           

8.7 删失點

censor # 邏輯詞,預設為TRUE,在圖上繪制删失點。
censor.shape # 數值或字元,用于指定删失點的形狀;預設為"+"(3), 可選"|"(124)。
censor.size # 指定删失點形狀的大小,預設為4.5。
           

8.8 生存表

所有生存表的正常參數。指定以下參數時,可應用于所有生存表(風險表、累積事件表和累積删失表)。

tables.col # 生存曲線圖下所有表的顔色,預設為"black";
# 按strata顯示則tables.col="strata".
fontsize # 指定風險表和累積事件表的字型大小。
font.family # 指定文字字型的字元向量,如font.family="Courier New".
tables.y.text # 邏輯詞,預設顯示生存表的y軸刻度标簽;為FALSE則刻度标簽被隐藏
tables.y.text.col # 邏輯詞,預設FALSE;為TRUE,則表的y刻度标簽将按strata着色。
tables.height # 指定所有生存表的高度,數值在0-1之間,預設為0.25.
           

8.8.1 風險表

risk.table.title #  風險表的标題
risk.table.pos # 指定風險表位置的字元向量;
# 有兩種,"out"在生存圖外(預設),"in"在生存圖内。
risk.table.col 
risk.table.fontsize
risk.table.y.text
risk.table.y.text.col 
risk.table.height 
# 這五個和上面生存表的正常參數意義是一樣的
# 但是隻應用在風險表中。
           

8.8.2 累積事件表

cumevents.title # 累積事件表的标題
cumevents.col
cumevents.y.text
cumevents.y.text
cumevents.height
# 這四個和上面生存表的正常參數意義是一樣的
# 但是隻應用于累積事件表中。
           

8.8.3 累積删失表

cumcensor.title # 累積删失表的标題
cumcensor.col
cumcensor.y.text
cumcensor.y.text.col
cumcensor.height
# 這四個和上面生存表的正常參數意義是一樣的
# 但是隻應用于累積删失表中。
           

8.9 生存圖高度

surv.plot.height # 生存圖的高度,預設為0.75;
# 當risk.table = FALSE時忽略
           

8.10 字型樣式

font.title  # 标題字型
font.subtitle  # 副标題字型
font.caption
font.x、font.y  # x軸、y軸字型
font.tickslab  # 刻度标簽字型
font.legend  # 圖例字型

用長度為3的向量分别指定大小、類型、顔色。如:
# font.main = c(16, "bold", "darkblue")
# font.x = c(14, "italic", "red")
# font.y = c(14, "bold.italic", "darkred")
# font.tickslab = c(12, "plain", "darkgreen")
# font.x = 14 則隻改變字型的大小
# font.x = "bold" 則隻改變字型類型
           

End

http://weixin.qq.com/r/si7g_C3EJXBarWmb93ug (二維碼自動識别)