美文网首页R语言学习
R语言可视化(三十七):生存曲线图绘制

R语言可视化(三十七):生存曲线图绘制

作者: Davey1220 | 来源:发表于2020-12-05 11:21 被阅读0次

    37. 生存曲线图绘制

    清除当前环境中的变量

    rm(list=ls())
    

    设置工作目录

    setwd("C:/Users/Dell/Desktop/R_Plots/37survival/")
    

    使用survival包进行生存分析

    # 安装并加载所需的R包
    #install.packages("survival") # 安装survival包
    library(survival) # 加载包
    
    #查看内置数据集
    head(aml)
    ##   time status          x
    ## 1    9      1 Maintained
    ## 2   13      1 Maintained
    ## 3   13      0 Maintained
    ## 4   18      1 Maintained
    ## 5   23      1 Maintained
    ## 6   28      0 Maintained
    #time # 生存时间,天数;
    #status # 生存状态,0为截尾(删失值),1为死亡;
    #x # 分组变量,Maintained和Nonmaintained
    
    # 构建生存对象
    Surv(aml$time, aml$status)
    ##  [1]   9   13   13+  18   23   28+  31   34   45+  48  161+   5    5    8 
    ## [15]   8   12   16+  23   27   30   33   43   45
    
    # 使用survfit()函数来拟合Kaplan-Meier生存曲线
    fit <- survfit(Surv(time, status) ~ x, data = aml)
    
    # 查看生存曲线拟合结果
    fit
    ## Call: survfit(formula = Surv(time, status) ~ x, data = aml)
    ## 
    ##                  n events median 0.95LCL 0.95UCL
    ## x=Maintained    11      7     31      18      NA
    ## x=Nonmaintained 12     11     23       8      NA
    
    summary(fit)
    ## Call: survfit(formula = Surv(time, status) ~ x, data = aml)
    ## 
    ##                 x=Maintained 
    ##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
    ##     9     11       1    0.909  0.0867       0.7541        1.000
    ##    13     10       1    0.818  0.1163       0.6192        1.000
    ##    18      8       1    0.716  0.1397       0.4884        1.000
    ##    23      7       1    0.614  0.1526       0.3769        0.999
    ##    31      5       1    0.491  0.1642       0.2549        0.946
    ##    34      4       1    0.368  0.1627       0.1549        0.875
    ##    48      2       1    0.184  0.1535       0.0359        0.944
    ## 
    ##                 x=Nonmaintained 
    ##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
    ##     5     12       2   0.8333  0.1076       0.6470        1.000
    ##     8     10       2   0.6667  0.1361       0.4468        0.995
    ##    12      8       1   0.5833  0.1423       0.3616        0.941
    ##    23      6       1   0.4861  0.1481       0.2675        0.883
    ##    27      5       1   0.3889  0.1470       0.1854        0.816
    ##    30      4       1   0.2917  0.1387       0.1148        0.741
    ##    33      3       1   0.1944  0.1219       0.0569        0.664
    ##    43      2       1   0.0972  0.0919       0.0153        0.620
    ##    45      1       1   0.0000     NaN           NA           NA
    
    # 绘制基础KM生存曲线
    plot(fit,xlab="Time(Days)",ylab="Survival probability",
         col=c("blue","red"),lty=2:3,lwd=2) 
    # 添加图例
    legend("topright",c("Maintained","Nonmaintained"),
           col=c("blue","red"),lty=2:3,lwd=2,cex=1)
    
    image.png

    使用survminer包绘制生存曲线

    # 安装并加载所需的R包
    #install.packages("survminer") # 安装survminer包
    library(survminer) # 加载包
    ## Warning: package 'survminer' was built under R version 3.6.3
    ## Loading required package: ggplot2
    ## Warning: package 'ggplot2' was built under R version 3.6.3
    ## Loading required package: ggpubr
    ## Loading required package: magrittr
    
    # 查看内置数据集
    head(lung)
    ##   inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
    ## 1    3  306      2  74   1       1       90       100     1175      NA
    ## 2    3  455      2  68   1       0       90        90     1225      15
    ## 3    3 1010      1  56   1       0       90        90       NA      15
    ## 4    5  210      2  57   1       1       90        60     1150      11
    ## 5    1  883      2  60   1       0      100        90       NA       0
    ## 6   12 1022      1  74   1       1       50        80      513       0
    #time # 生存时间,天数;
    #status # 生存状态,1为截尾数据,2为死亡数据;
    #age # 年龄;
    #sex # 分组数据,性别:1为男性,2为女性;
    
    # 使用survfit()函数拟合KM生存曲线
    fit <- survfit(Surv(time, status) ~ sex, data = lung)
    
    # 使用ggsurvplot()函数绘制基础KM生存曲线
    ggsurvplot(fit, data = lung)
    
    image.png
    # Change font size, style and color
    ggsurvplot(fit, data = lung,  
               main = "Survival curve", # 添加标题
               font.main = c(16, "bold", "darkblue"), # 设置标题字体大小、格式和颜色
               font.x = c(14, "bold.italic", "red"), # 设置x轴字体大小、格式和颜色
               font.y = c(14, "bold.italic", "darkred"), # 设置y轴字体大小、格式和颜色
               font.tickslab = c(12, "plain", "darkgreen")) # 设置坐标轴刻度字体大小、格式和颜色
    
    image.png
    # Customized survival curves
    ggsurvplot(fit, data = lung,
               surv.median.line = "hv", # 添加中位数生存时间线
               
               # Change legends: title & labels
               legend.title = "Sex", # 设置图例标题
               legend.labs = c("Male", "Female"), # 指定图例分组标签
               
               # Add p-value and tervals
               pval = TRUE, # 设置添加P值
               pval.method = TRUE, #设置添加P值计算方法
               conf.int = TRUE, # 设置添加置信区间
               
               # Add risk table
               risk.table = TRUE, # 设置添加风险因子表
               tables.height = 0.2, # 设置风险表的高度
               tables.theme = theme_cleantable(), # 设置风险表的主题
               
               # Color palettes. Use custom color: c("#E7B800", "#2E9FDF"),
               # or brewer color (e.g.: "Dark2"), or ggsci color (e.g.: "jco")
               palette = c("#E7B800", "#2E9FDF"), # 设置颜色画板
               ggtheme = theme_bw() # Change ggplot2 theme
    )
    
    image.png
    # 绘制分面生存曲线
    # 查看示例数据
    head(colon)
    ##   id study      rx sex age obstruct perfor adhere nodes status differ
    ## 1  1     1 Lev+5FU   1  43        0      0      0     5      1      2
    ## 2  1     1 Lev+5FU   1  43        0      0      0     5      1      2
    ## 3  2     1 Lev+5FU   1  63        0      0      0     1      0      2
    ## 4  2     1 Lev+5FU   1  63        0      0      0     1      0      2
    ## 5  3     1     Obs   0  71        0      0      1     7      1      2
    ## 6  3     1     Obs   0  71        0      0      1     7      1      2
    ##   extent surg node4 time etype
    ## 1      3    0     1 1521     2
    ## 2      3    0     1  968     1
    ## 3      3    0     0 3087     2
    ## 4      3    0     0 3087     1
    ## 5      2    0     1  963     2
    ## 6      2    0     1  542     1
    
    # 拟合KM生存曲线
    fit <- survfit( Surv(time, status) ~ sex, data = colon)
    
    # 使用ggsurvplot_facet()函数绘制分面生存曲线
    ggsurvplot_facet(fit, colon, 
                     facet.by = "rx", # 设置分面变量
                     palette = "jco", # 设置颜色画板
                     pval = TRUE) # 添加pvalue值
    
    image.png
    # Facet by two grouping variables: rx and adhere
    ggsurvplot_facet(fit, colon, 
                     facet.by = c("rx", "adhere"),
                     palette = "npg", 
                     pval = TRUE,
                     surv.median.line = "hv",  # 增加中位生存时间
                     conf.int = TRUE) # 增加置信区间)
    
    image.png
    # 拟合多个分组变量
    fit2 <- survfit( Surv(time, status) ~ sex + rx, data = colon )
    fit2
    
    ggsurvplot_facet(fit2, colon, 
                     facet.by = "adhere",
                     palette = "lancet", 
                     pval = TRUE,
                     pval.method = TRUE,
                     surv.median.line = "hv")
    
    image.png
    sessionInfo()
    ## R version 3.6.0 (2019-04-26)
    ## Platform: x86_64-w64-mingw32/x64 (64-bit)
    ## Running under: Windows 10 x64 (build 18363)
    ## 
    ## Matrix products: default
    ## 
    ## locale:
    ## [1] LC_COLLATE=Chinese (Simplified)_China.936 
    ## [2] LC_CTYPE=Chinese (Simplified)_China.936   
    ## [3] LC_MONETARY=Chinese (Simplified)_China.936
    ## [4] LC_NUMERIC=C                              
    ## [5] LC_TIME=Chinese (Simplified)_China.936    
    ## 
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base     
    ## 
    ## other attached packages:
    ## [1] survminer_0.4.8   ggpubr_0.2.1      magrittr_1.5      ggplot2_3.3.2    
    ## [5] survival_2.44-1.1
    ## 
    ## loaded via a namespace (and not attached):
    ##  [1] Rcpp_1.0.5        pillar_1.4.2      compiler_3.6.0   
    ##  [4] tools_3.6.0       digest_0.6.20     nlme_3.1-139     
    ##  [7] evaluate_0.14     tibble_2.1.3      lifecycle_0.2.0  
    ## [10] gtable_0.3.0      lattice_0.20-38   pkgconfig_2.0.2  
    ## [13] rlang_0.4.7       Matrix_1.2-17     ggsci_2.9        
    ## [16] yaml_2.2.0        xfun_0.8          gridExtra_2.3    
    ## [19] withr_2.1.2       stringr_1.4.0     dplyr_1.0.2      
    ## [22] knitr_1.23        survMisc_0.5.5    generics_0.0.2   
    ## [25] vctrs_0.3.2       grid_3.6.0        tidyselect_1.1.0 
    ## [28] data.table_1.12.2 glue_1.4.2        KMsurv_0.1-5     
    ## [31] R6_2.4.0          km.ci_0.5-2       rmarkdown_1.13   
    ## [34] tidyr_1.1.2       purrr_0.3.2       ellipsis_0.2.0.1 
    ## [37] backports_1.1.4   scales_1.0.0      htmltools_0.3.6  
    ## [40] splines_3.6.0     xtable_1.8-4      colorspace_1.4-1 
    ## [43] ggsignif_0.5.0    labeling_0.3      stringi_1.4.3    
    ## [46] munsell_0.5.0     broom_0.5.2       crayon_1.3.4     
    ## [49] zoo_1.8-6
    

    相关文章

      网友评论

        本文标题:R语言可视化(三十七):生存曲线图绘制

        本文链接:https://www.haomeiwen.com/subject/bqfgwktx.html