我想创建一个kaplan-meier图。大多数教程都关注二元生存(死亡/生存(,但在我的情况下,我想画出一个事件的时间(在药物中切换1,2,3次(。这可能吗?
下面是一些示例数据来说明我的观点。
library (data.table)
data <- data.table( ID = c(1,1,2,3,4,5,6,6,7,7,7,8,9,10,11,11,11,12,12,13,14,14,14,15,15,16),
episode = c(1,2,1,1,1,1,1,2,1,2,3,1,1,1,1,2,3,1,2,1,1,2,3,1,2,1),
time_till_next_ep = c(0,5,0,0,0,0,0,8,0,4,14,0,0,0,0,6,17,0,9,0,0,4,9,0,8,0))
首先,我们有一个指示参与者ID
的变量。
然后我们有一个变量来指示药物episode
。这意味着如果参与者在一定时间内服用某种类型的药物。大多数参与者只服用一次药物(第1次(,但也有一些参与者第二次(第2次(或第三次(第3次(再次服用药物。
发作之间的时间在time_till_next_ep
变量中以天为单位计算。由于第一个病例的发作间隔没有时间,因此数据中有很多零。
我想创建一个Kaplan-Meier图:在x轴上是到下一集的时间,在y轴上是集数。随着患者每一次新发作的开始,图表就会下降一步。
我已经尝试过使用生存包来创建这个,但它似乎不起作用
library(survival)
S_input <- Surv(time = data[,as.numeric(time_till_next_ep)], event = data[,episode])
km_fit <- survfit(S_input ~ 1,
data = data,
type = "kaplan-meier")
km_fig <- ggsurvplot(km_fit,
data,
tables.theme = theme_cleantable())
如果我检查输入的S_input
数据,它似乎在我的时间数据旁边添加了问号
> S_input
[1] 0 5? 0 0 0 0 0 8? 0 4? 14? 0 0 0 0 6? 17? 0 9? 0 0 4? 9? 0 8? 0
摘要数据并不是真正的信息来源:
> summary(km_fit)
Call: survfit(formula = S_input ~ 1, data = data, type = "kaplan-meier")
10 observations deleted due to missingness
time n.risk n.event survival std.err lower 95% CI upper 95% CI
0 16 16 0 NaN NA NA
消息说,由于遗漏,10个观察结果被删除,这似乎是我在药物方面的10个转变。
最后,我在绘图时得到以下错误:Error in f(...) : Aesthetics can not vary with a ribbon
在我的情况下,我是否正确地使用了生存分析,或者这真的是为二进制数据保留的?
正如您所提到的,您的设置无法在"简单"生存模型中表示,在该模型中,受试者由于独特的原因而随着时间的推移死亡/退出,因为有重复发生的事件按顺序发生。我认为您的设置最好用多状态模型来表示,它允许您显式地对事件之间的转换进行建模,并考虑它们之间的时间交互。这里有一个很好的教程,你可以参考如何对重复事件进行建模。目前,我无法为您提供具体案例的工作示例,但补充材料中报告了一些代码和数据。
关于Kaplan Meier本身,我认为如果不报告其中一根轴上的"生存份额",你就无法绘制它。Kaplan-Meier图只有在全因死亡率研究中才是直接的。多状态模型使您可以使用其他工具,如转换概率,来绘制经历后续事件的风险。