风险数为<;时如何截断Kaplan-Meier曲线;10

风险数为<;时如何截断Kaplan-Meier曲线;10,r,survival-analysis,R,Survival Analysis,为了在同行评议的科学杂志()上发表文章,我们想准备Kaplan-Meier图。《华尔街日报》对这些绘图有以下具体指南: “如果您的数据包括使用Kaplan-Meier法或累积关联法分析生成的曲线,则以下是这些曲线的表示要求: 指出有风险的患者人数 包括审查标志 当风险患者少于10名时,曲线将被截断;以及 置信区间的估计值应包含在图本身或文本中。” 在这里,我将说明我的老兵数据集问题(很好!)。 我们可以使用survminer软件包轻松处理1、2和4: 库(生存) 图书馆(survminer)

为了在同行评议的科学杂志()上发表文章,我们想准备Kaplan-Meier图。《华尔街日报》对这些绘图有以下具体指南:

“如果您的数据包括使用Kaplan-Meier法或累积关联法分析生成的曲线,则以下是这些曲线的表示要求:

  • 指出有风险的患者人数
  • 包括审查标志
  • 当风险患者少于10名时,曲线将被截断;以及
  • 置信区间的估计值应包含在图本身或文本中。”
  • 在这里,我将说明我的老兵数据集问题(很好!)。 我们可以使用survminer软件包轻松处理1、2和4:

    库(生存)
    图书馆(survminer)
    #>警告:包“survminer”是在R版本3.4.3下生成的
    #>加载所需包:ggplot2
    #>加载所需包:ggpubr
    #>警告:包“ggpubr”是在R版本3.4.3下生成的
    #>装载所需包装:magrittr
    fit.obj
    #>细胞类型=鳞状细胞
    #>时间风险事件存活标准误差下限95%CI上限95%CI
    #>     1     35       2    0.943  0.0392       0.8690        1.000
    #>     8     33       1    0.914  0.0473       0.8261        1.000
    #>    10     32       1    0.886  0.0538       0.7863        0.998
    #>    11     31       1    0.857  0.0591       0.7487        0.981
    #>    15     30       1    0.829  0.0637       0.7127        0.963
    #>    25     29       1    0.800  0.0676       0.6779        0.944
    #>    30     27       1    0.770  0.0713       0.6426        0.924
    #>    33     26       1    0.741  0.0745       0.6083        0.902
    #>    42     25       1    0.711  0.0772       0.5749        0.880
    #>    44     24       1    0.681  0.0794       0.5423        0.856
    #>    72     23       1    0.652  0.0813       0.5105        0.832
    #>    82     22       1    0.622  0.0828       0.4793        0.808
    #>   110     19       1    0.589  0.0847       0.4448        0.781
    #>   111     18       1    0.557  0.0861       0.4112        0.754
    #>   112     17       1    0.524  0.0870       0.3784        0.726
    #>   118     16       1    0.491  0.0875       0.3464        0.697
    #>   126     15       1    0.458  0.0876       0.3152        0.667
    #>   144     14       1    0.426  0.0873       0.2849        0.636
    #>   201     13       1    0.393  0.0865       0.2553        0.605
    #>   228     12       1    0.360  0.0852       0.2265        0.573
    #>   242     10       1    0.324  0.0840       0.1951        0.539
    #>   283      9       1    0.288  0.0820       0.1650        0.503
    #>   314      8       1    0.252  0.0793       0.1362        0.467
    #>   357      7       1    0.216  0.0757       0.1088        0.429
    #>   389      6       1    0.180  0.0711       0.0831        0.391
    #>   411      5       1    0.144  0.0654       0.0592        0.351
    #>   467      4       1    0.108  0.0581       0.0377        0.310
    #>   587      3       1    0.072  0.0487       0.0192        0.271
    #>   991      2       1    0.036  0.0352       0.0053        0.245
    #>999 110.000南纳纳纳
    #> 
    #>celltype=小单元
    #>时间风险事件存活标准误差下限95%CI上限95%CI
    #>     2     48       1   0.9792  0.0206      0.93958        1.000
    #>     4     47       1   0.9583  0.0288      0.90344        1.000
    #>     7     46       2   0.9167  0.0399      0.84172        0.998
    #>     8     44       1   0.8958  0.0441      0.81345        0.987
    #>    10     43       1   0.8750  0.0477      0.78627        0.974
    #>    13     42       2   0.8333  0.0538      0.73430        0.946
    #>    16     40       1   0.8125  0.0563      0.70926        0.931
    #>    18     39       2   0.7708  0.0607      0.66065        0.899
    #>    20     37       2   0.7292  0.0641      0.61369        0.866
    #>    21     35       2   0.6875  0.0669      0.56812        0.832
    #>    22     33       1   0.6667  0.0680      0.54580        0.814
    #>    24     32       1   0.6458  0.0690      0.52377        0.796
    #>    25     31       2   0.6042  0.0706      0.48052        0.760
    #>    27     29       1   0.5833  0.0712      0.45928        0.741
    #>    29     28       1   0.5625  0.0716      0.43830        0.722
    #>    30     27       1   0.5417  0.0719      0.41756        0.703
    #>    31     26       1   0.5208  0.0721      0.39706        0.683
    #>    51     25       2   0.4792  0.0721      0.35678        0.644
    #>    52     23       1   0.4583  0.0719      0.33699        0.623
    #>    54     22       2   0.4167  0.0712      0.29814        0.582
    #>    56     20       1   0.3958  0.0706      0.27908        0.561
    #>    59     19       1   0.3750  0.0699      0.26027        0.540
    #>    61     18       1   0.3542  0.0690      0.24171        0.519
    #>    63     17       1   0.3333  0.0680      0.22342        0.497
    #>    80     16       1   0.3125  0.0669      0.20541        0.475
    #>    87     15       1   0.2917  0.0656      0.18768        0.453
    #>    95     14       1   0.2708  0.0641      0.17026        0.431
    #>    99     12       2   0.2257  0.0609      0.13302        0.383
    #>   117      9       1   0.2006  0.0591      0.11267        0.357
    #>   122      8       1   0.1755  0.0567      0.09316        0.331
    #>   139      6       1   0.1463  0.0543      0.07066        0.303
    #>   151      5       1   0.1170  0.0507      0.05005        0.274
    #>   153      4       1   0.0878  0.0457      0.03163        0.244
    #>   287      3       1   0.0585  0.0387      0.01600        0.214
    #>   384      2       1   0.0293  0.0283      0.00438        0.195
    #>392110.0000南纳纳纳
    #> 
    #>细胞类型=腺
    #>时间风险事件存活标准误差下限95%CI上限95%CI
    #>     3     27       1   0.9630  0.0363      0.89430        1.000
    #>     7
    
    ss <- subset(surv_summary(fit.obj), n.risk>=10)
    ggsurvplot(ss,
          conf.int = T)
    
    ggrisktable(fit.obj, tables.theme = theme_cleantable())
    
    library(survival)
    library(survminer)
    
    # ungrouped KM estimate to determine cutoff
    fit1_ss <- surv_summary(survfit(Surv(time, status) ~ 1, data=veteran))
    
    # time cutoff with fewer than 10 at risk
    cutoff  <- min(fit1_ss$time[fit1_ss$n.risk < 10])
    
    # KM fit and subset to cutoff
    fit.obj <- survfit(Surv(time, status) ~ celltype, data = veteran)
    fit_ss  <- subset(surv_summary(fit.obj), time < cutoff)
    
    # KM survival plot and risk table as separate plots
    p1 <- ggsurvplot(fit_ss, conf.int=TRUE)
    # note options xlim and break.time.by
    p2 <- ggsurvtable_mod(fit.obj,
                          survtable="risk.table",
                          tables.theme=theme_cleantable(),
                          xlim=c(0, cutoff),
                          break.time.by=100)
    
    # turn ggplot objects into grobs and arrange them (needs tweaking)
    g1  <- ggplotGrob(p1)
    g2  <- ggplotGrob(p2)
    lom <- rbind(c(NA, rep(1, 14)),
                 c(NA, rep(1, 14)),
                 c(rep(2, 15)))
    
    gridExtra::grid.arrange(grobs=list(g1, g2), layout_matrix=lom)
    
    library(survival)
    library(survminer)
    
    # truncate each line when fewer than 10 at risk
    atrisk <- 10
    
    # KM fit
    fit.obj <- survfit(Surv(time, status) ~ celltype, data = veteran)
    
    # subset each stratum separately
    maxcutofftime = 0 # for plotting
    strata <- rep(names(fit.obj$strata), fit.obj$strata)
    for (i in names(fit.obj$strata)){
        cutofftime <- min(fit.obj$time[fit.obj$n.risk < atrisk & strata == i])
        maxcutofftime = max(maxcutofftime, cutofftime)
        cutoffs <- which(fit.obj$n.risk < atrisk & strata == i)
        fit.obj$lower[cutoffs] <- NA
        fit.obj$upper[cutoffs] <- NA
        fit.obj$surv[cutoffs] <- NA
    }
    
    
    # plot
    ggsurvplot(fit.obj, data = veteran, risk.table = TRUE, conf.int = T, pval = F, 
               tables.theme = theme_cleantable(), xlim = c(0,maxcutofftime), break.x.by = 90)