我正在努力为多状态生存分析设置一个数据框架。这是一个可复制的例子,只有3个个体(ID)。这只是多状态的一部分。
f <- structure(list(ID = c(3, 4, 5), time_to_end = c(30, 36, 36)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
f.long<–structure(list(ID = c(3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5), resp_pois = c(1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), time = c(6, 12, 18, 24, 30, 36, 42, 48, 6, 12, 18, 24, 30, 36, 42, 48, 6,
12, 18, 24, 30, 36, 42, 48)), row.names = c(NA, -24L), class = c("tbl_df", "tbl", "data.frame"))
f包括3个服用新药的个体,观察time_to_end。F.long包括不同时间点的生化反应。例如,id3在24个月前立即对药物有反应,但在30个月时有证据表明缺乏生化反应,而id4在24个月时仅显示孤立反应,但再也没有或以前没有。
我正在尝试用tmerge管理响应和无响应之间的可逆条件,如下所示:
f.merge <- tmerge(f %>% select(ID), f, id=ID, tstart = 0, tstop = time_to_end)
f.merge <- tmerge(f.merge, f.long, id=ID, response=event(time, resp_pois))
survfit(Surv(tstart, tstop, response)~1, data=f.merge)
问题是tmerge将每个resp==1解释为一个新事件,因此在最后,surfit函数给出5,而不是2。
有人能提出解决方案吗?我可能误用了tmerge吗?
我是通过电子邮件从Terry Therneau教授那里得到这个答案的
好的,0. 当调试生存包的问题时,我的第一步是在加载生存包的R会话中运行,没有其他任何操作。
- 我无法读取您的数据集:我在某处遇到语法错误。但是通过剪切和粘贴,我能够创建一个"标题"。
但是这些数据到底是什么呢?变量名"resp_pois"对我来说毫无意义。你给出了一些关于你想去哪里的信息,但没有提到你从哪里开始。我冒昧地猜测一下,您处理的是小组数据,即,受试者定期进入,您在每次访问时测量他们的状态?- 现在,tmerge无法区分多次心脏病发作的数据集,以及每次发作一行;