全文链接:http://tecdat.cn/?p=2858
本文的目的是对如何在R中进行生存分析进行简短而全面的评估。关于该主题的文献很广泛,仅涉及有限数量的(常见)问题。可用的R包数量反映了对该主题的研究范围。(点击文末“阅读原文”获取完整代码数据)。
R包
可以使用各种R包来解决特定问题。以下是本次用于读取,管理,分析和显示数据的软件包。
运行以下行以安装和加载所需的包。
if (!require(pacman)) install.packages("pacman") pacman::p_load(tidyverse, survival )
**
数据
该评价将基于orca
数据集,数据集包含1985年1月1日至2005年12月31日期间芬兰最北部省份诊断为口腔鳞状细胞癌(OSCC)的338名患者的一部分。患者的随访始于癌症诊断之日,并于2008年12月31日死亡,迁移或随访截止日期结束。死亡原因分为两类:(1) )OSCC死亡; (2)其他原因造成的死亡。
数据集包含以下变量:
id
=序号,
sex
=性别,类别1 =“女性”,2 =“男性”,
age
=诊断癌症日期的年龄(年),
stage
=肿瘤的TNM分期(因子):1 =“I”,..., 4 =“IV”,5 =“unkn”
time
=自诊断至死亡或审查的随访时间(以年为单位),
event
=结束随访的事件(因子):1 =正常,2 =口腔癌死亡, 3 =其他原因造成的死亡。
将数据从URL加载到R中。
head(orca)
id sex age stage time event 1 1 Male 65.42274 unkn 5.081 Alive 2 2 Female 83.08783 III 0.419 Oral ca. death 3 3 Male 52.59008 II 7.915 Other death 4 4 Male 77.08630 I 2.480 Other death 5 5 Male 80.33622 IV 2.500 Oral ca. death 6 6 Female 82.58132 IV 0.167 Other death
summary(orca)
id sex age stage time event Min. : 1.00 Female:152 Min. :15.15 I :50 Min. : 0.085 Alive :109 1st Qu.: 85.25 Male :186 1st Qu.:53.24 II :77 1st Qu.: 1.333 Oral ca. death:122 Median :169.50 Median :64.86 III :72 Median : 3.869 Other death :107 Mean :169.50 Mean :63.51 IV :68 Mean : 5.662 3rd Qu.:253.75 3rd Qu.:74.29 unkn:71 3rd Qu.: 8.417 Max. :338.00 Max. :92.24 Max. :23.258
生存数据分析
生存分析侧重于事件数据的时间。在我们的例子中,是诊断后的死亡时间。
为了定义失效时间随机变量,我们需要:
1。时间起源(诊断OSCC),
2。时间尺度(诊断后的年数,年龄),
3。事件的定义。我们将首先考虑总死亡率 。
图1:转换的框图。
Alive Oral ca. death Other death 109 122 107
FALSE TRUE 109 229
以图形方式显示观察到的随访时间对于生存数据的分析非常有帮助。
OSCC死亡更有可能在诊断后早期发生,而不是其他原因引起的死亡。类型怎么样?
'Surv' num [1:338, 1:2] 5.081+ 0.419 7.915 2.480 2.500 0.167 5.925+ 1.503 13.333 7.666+ ... - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:2] "time" "status" - attr(*, "type")= chr "right"
然后将创建的生存对象用作生存分析的其他特定函数中的因变量。
估计生存函数
非参数估计
我们将首先介绍一类非参数估计 。
Kaplan–Meier
生存曲线基于每个死亡时间的风险数量和事件数量。包的survfit()
创建(估计)生存曲线 。
Call: survfit(formula = Surv(time, all) ~ 1, data = orca) n events *rmean *se(rmean) median 0.95LCL 0.95UCL 338.000 229.000 8.060 0.465 5.418 4.331 6.916 * restricted mean with upper limit = 23.3
函数返回估计的生存曲线的摘要。
time n.risk n.event n.censor surv std.err upper lower 1 0.085 338 2 0 0.9940828 0.004196498 1.0000000 0.9859401 2 0.162 336 2 0 0.9881657 0.005952486 0.9997618 0.9767041 3 0.167 334 4 0 0.9763314 0.008468952 0.9926726 0.9602592 4 0.170 330 2 0 0.9704142 0.009497400 0.9886472 0.9525175 5 0.246 328 1 0 0.9674556 0.009976176 0.9865584 0.9487228 6 0.249 327 1 0 0.9644970 0.010435745 0.9844277 0.9449699
ggsurvplot()
的survminer
提供了估计的生存曲线的信息性说明。
默认的KM图表显示了生存函数。
点击标题查阅往期内容
【视频】分类模型评估:精确率、召回率、ROC曲线、AUC与R语言生存分析时间依赖性ROC实现
01
02
03
04
生存曲线估算
生存曲线在精算师和人口统计学中非常普遍。它特别适用于分组数据。
为了在实际示例中显示此方法,我们首先需要创建聚合数据,即将后续分组并在每个层中计算风险。
基于分组的数据,我们估计会用生存曲线。
nsubs nlost nrisk nevent surv pdf hazard se.surv se.pdf se.hazard 0-1 338 0 338.0 64 1.0000 0.1893 0.2092 0.0000 0.0213 0.0260 1-2 274 4 272.0 41 0.8107 0.1222 0.1630 0.0213 0.0179 0.0254 2-3 229 9 224.5 21 0.6885 0.0644 0.0981 0.0252 0.0136 0.0214 3-4 199 12 193.0 20 0.6241 0.0647 0.1093 0.0265 0.0140 0.0244 4-5 167 9 162.5 13 0.5594 0.0448 0.0833 0.0274 0.0121 0.0231 5-6 145 14 138.0 13 0.5146 0.0485 0.0989 0.0279 0.0131 0.0274 6-7 118 5 115.5 8 0.4662 0.0323 0.0717 0.0283 0.0112 0.0254 7-8 105 8 101.0 9 0.4339 0.0387 0.0933 0.0286 0.0126 0.0311 8-9 88 7 84.5 1 0.3952 0.0047 0.0119 0.0288 0.0047 0.0119 9-10 80 4 78.0 8 0.3905 0.0401 0.1081 0.0288 0.0137 0.0382 10-11 68 4 66.0 5 0.3505 0.0266 0.0787 0.0291 0.0116 0.0352
Nelson-Aalen估计
图形比较
可以绘制不同的生存函数估计值来评估潜在的差异。
可以从估计的生存曲线导出诸如分位数的集中趋势的度量。
q km.quantile km.lower km.upper fh.quantile fh.lower fh.upper 25 0.25 1.333 1.084 1.834 1.333 1.084 1.747 50 0.50 5.418 4.331 6.916 5.418 4.244 6.913 75 0.75 13.673 11.748 16.580 13.673 11.748 15.833
估计半数人的寿命超过5.4年。
第一个四分之一的人在1.3年内死亡,而前四分之三的人的寿命超过1.3岁。
前三分之三的人在13.7年内死亡,而前四分之一的人死亡时间超过13.7岁。
估计量的图形表示(基于使用KM的生存曲线)
参数估算
我们将考虑三种常见的选择:指数,Weibull和log-logistic模型。
flexsurvreg(formula = su_obj ~ 1, data = orca, dist = "exponential") Estimates: est L95% U95% se rate 0.11967 0.10513 0.13621 0.00791 N = 338, Events: 229, Censored: 109 Total time at risk: 1913.673 Log-likelihood = -715.1802, df = 1 AIC = 1432.36
同样,可以用非参数估计图形地比较不同的方法
生存曲线的比较
例如,肿瘤阶段是癌症存活研究中的重要预后因素。我们可以估计和绘制不同颜色的不同组(阶段)的生存曲线。
stage D Y x pt rate lower upper conf.level 1 I 25 336.776 25 336.776 0.07423332 0.04513439 0.1033322 0.95 2 II 51 556.700 51 556.700 0.09161128 0.06646858 0.1167540 0.95 3 III 51 464.836 51 464.836 0.10971611 0.07960454 0.1398277 0.95 4 IV 57 262.552 57 262.552 0.21709985 0.16073995 0.2734597 0.95 5 unkn 45 292.809 45 292.809 0.15368380 0.10878136 0.1985862 0.95
通常,与具有高阶段肿瘤的患者相比,具有较低阶段肿瘤的诊断患者具有较低的(死亡率)。可以使用survfit()
函数执行生存函数的整体比较。
Call: survfit(formula = su_obj ~ stage, data = orca) n events median 0.95LCL 0.95UCL stage=I 50 25 10.56 6.17 NA stage=II 77 51 7.92 4.92 13.34 stage=III 72 51 7.41 3.92 9.90 stage=IV 68 57 2.00 1.08 4.82 stage=unkn 71 45 3.67 2.83 8.17
由于低肿瘤阶段的发病率较低,因此肿瘤分期增加的中位生存时间也会减少。可以观察到相同的行为,分别针对不同的肿瘤阶段绘制KM生存曲线。
也可以为每个阶段级别构建整个生存表。这里是每个肿瘤阶段生存表的前3行。
# Groups: strata [5]
time n.risk n.event n.censor surv std.err upper lower strata <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> 1 0.17 50 1 0 0.98 0.0202 1 0.942 I 2 0.498 49 1 0 0.96 0.0289 1 0.907 I 3 0.665 48 1 0 0.94 0.0357 1 0.876 I 4 0.419 77 1 0 0.987 0.0131 1 0.962 II 5 0.498 76 1 0 0.974 0.0186 1 0.939 II 6 0.665 75 1 0 0.961 0.0229 1 0.919 II 7 0.167 72 1 0 0.986 0.0140 1 0.959 III 8 0.249 71 1 0 0.972 0.0199 1 0.935 III 9 0.413 70 1 0 0.958 0.0246 1 0.913 III 10 0.085 68 2 0 0.971 0.0211 1 0.931 IV 11 0.162 66 1 0 0.956 0.0261 1 0.908 IV 12 0.167 65 1 0 0.941 0.0303 0.999 0.887 IV 13 0.162 71 1 0 0.986 0.0142 1 0.959 unkn 14 0.167 70 2 0 0.958 0.0249 1 0.912 unkn 15 0.17 68 1 0 0.944 0.0290 0.999 0.892 unkn
arrange_ggsurvplots(glist, print = TRUE, ncol = 2, nrow = 1)
R语言生存分析数据分析可视化案例(下):https://developer.aliyun.com/article/1493710