您如何为生存分析准备纵向数据?

机器算法验证 r 生存 卡普兰迈尔
2022-03-23 17:46:52

我正在尝试用 R 绘制我的数据的 Kaplan-Meier 曲线。目前,数据采用以下格式:

patient_id;number_of_days;survival
1         ;100           ;T
1         ;200           ;F
1         ;300           ;F
2         ;50            ;F
...

在我的上下文中,生存不能按字面解释:它意味着疾病的进展,仅在或多或少等间隔的时间点进行评估。

我无法确定Surv函数期望的输入是什么?我应该如何准备数据?

我尝试将我的数据直接提供给Surv

Surv(data$number_of_days,data$survival)

然而,这似乎多次计算每个患者(每个时间点一次)。所以我的猜测是我必须首先对我的数据进行某种转换。我相当肯定这个将纵向数据转换为“事件数据”的问题一定是相当普遍的,那么这怎么称呼呢?它已经在某个地方实施了吗?

谢谢!

1个回答

这是一个快速示例,显示了如何在类似的上下文中排列数据。


考虑以下数据。

> dataWide
  id       time status
1  1 0.88820072      1
2  2 0.05562832      0
3  3 5.24113929      1
4  4 2.91370906      1

例如,个人 1 在t=0.888, 个人 3 在t=5.241.

为了说明,我采用 3 个时间间隔: [0,1),[1,2),[2,).

在长格式中,相同的数据集变为:

> dataLong
  id period tstart      tstop status
1  1      1      0 0.88820072      1
2  2      1      0 0.05562832      0
3  3      1      0 1.00000000      0
4  3      2      1 2.00000000      0
5  3      3      2 5.24113929      1
6  4      1      0 1.00000000      0
7  4      2      1 2.00000000      0
8  4      3      2 2.91370906      1

对于个人 1,第一个时期开始于t=0并结束于t=0.888其中他有一个事件(status = 1)。个人 3 在第 3 期发生了事件。因此 status = 0对于第 1 期(从01)和第 2 期(从12),status = 1在第 3 期(从25.241)。

根据格式,可以按如下方式获得 Kaplan Meier 曲线,

library(survival)

plot(survfit(Surv(time, status) ~ 1, data=dataWide), 
     conf.int=FALSE, mark.time=FALSE) 

plot(survfit(Surv(tstart, tstop, status) ~ 1, data=dataLong), 
         conf.int=FALSE, mark.time=FALSE)

在此处输入图像描述