查看原文
其他

R语言在生存分析中的应用

2017-09-18 江利冰 临床科研与meta分析

生存分析的定义无需多言,在肿瘤领域应用更为普遍。今天我们主要是展示一下,R语言如何进行生存分析


这篇我们会用到两个包,请先安装包。

install.packages(c("survival", "survminer"))


然后加载这两个包

library("survival")
library("survminer")


数据,我们使用R自带的lung数据

data("lung")
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为结局事件。sex为性别,meal.cal为每顿卡路里的摄入,wt.loss为体重下降,其他为评分。


fit <- survfit(Surv(time, status) ~ sex, data = lung)
print(fit)


Call: survfit(formula = Surv(time, status) ~ sex, data = lung)        n events median 0.95LCL 0.95UCL sex=1 138    112    270     212     310 sex=2  90     53    426     348     550

各组的中位生存时间以及95%的置信区间

如果你还想获得更加详细的信息,输入以下代码:

summary(fit)


还能利用自己创建函数,获取相应的信息:

d <- data.frame(time = fit$time,
                  n.risk = fit$n.risk,
                  n.event = fit$n.event,
                  n.censor = fit$n.censor,
                  surv = fit$surv,
                  upper = fit$upper,
                  lower = fit$lower
                  )
head(d)



 time n.risk n.event n.censor      surv     upper     lower 1   11    138       3        0 0.9782609 1.0000000 0.9542301 2   12    135       1        0 0.9710145 0.9994124 0.9434235 3   13    134       2        0 0.9565217 0.9911586 0.9230952 4   15    132       1        0 0.9492754 0.9866017 0.9133612 5   26    131       1        0 0.9420290 0.9818365 0.9038355 6   30    130       1        0 0.9347826 0.9768989 0.8944820

ggsurvplot(fit,
          pval = TRUE, conf.int = TRUE,
          risk.table = TRUE, # Add risk table
          risk.table.col = "strata", # Change risk table color by groups
          linetype = "strata", # Change line type by groups
          surv.median.line = "hv", # Specify median survival
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"))





还可以随心所欲的获得某段时间的生存分析


ggsurvplot(fit,
         
conf.int = TRUE,
         
risk.table.col = "strata", # Change risk table color by groups
         
ggtheme = theme_bw(), # Change ggplot2 theme
         
palette = c("#E7B800", "#2E9FDF"),
         
xlim = c(0, 600))



反过来看也是棒棒的

ggsurvplot(fit,
         
conf.int = TRUE,
         
risk.table.col = "strata", # Change risk table color by groups
         
ggtheme = theme_bw(), # Change ggplot2 theme
         
palette = c("#E7B800", "#2E9FDF"),
         
fun = "event")


累积风险:


下面我们讲讲,logrank:

surv_diff <- survdiff(Surv(time, status) ~ sex, data = lung)
surv_diff


Call: survdiff(formula = Surv(time, status) ~ sex, data = lung)        N Observed Expected (O-E)^2/E (O-E)^2/V sex=1 138      112     91.6      4.55      10.3 sex=2  90       53     73.4      5.68      10.3 Chisq= 10.3  on 1 degrees of freedom, p= 0.00131

复杂点的来一个

require("survival")
fit2 <- survfit( Surv(time, status) ~ sex + rx + adhere,
               
data = colon )

ggsurv <- ggsurvplot(fit2, fun = "event", conf.int = TRUE,
                     ggtheme = theme_bw())
  
ggsurv$plot +theme_bw() +
  theme (legend.position = "right")+
  facet_grid(rx ~ adhere)


图文阅读是不是很乏味,赶快参加我们的初级临床科研培训班,绝对让你不枉此行。

详情点击下文链接

就是我,快点击:初级临床科研设计与方法培训班第二轮通知



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存