使用tmerge或SurvSplit重塑纵向数据集?

问题描述 投票:0回答:1

我正在尝试使用时变协变量进行生存分析。数据来自每年进行的一次纵向调查,我对其进行了操纵,使其看起来像这样:

id  event       end.time    income1      income2    income3     income4
1   1           3           8            10         13          8       
2   0           4           13           15         24          35

event表示事件是否发生,end.time是事件发生的时间,在右边的每个后续周期中,我都有随时间变化的协变量。因此,对于观察值1,该事件发生在第3年,并且在第1年期间,他们的收入为8000美元,以此类推。对于观察值2,该事件进行了审查,并且我们拥有直到第4年的数据(当研究进行时)结束)。

最后,我希望我的数据看起来像这样:

id  st.time end.time    event   inc

1   0       1           0       8
1   1       2           0       10
1   2       3           1       13
2   0       1           0       13
2   1       2           0       15
2   2       3           0       24
2   3       4           0       35

我已经查看了tmerge()和SurvSplit()函数,但不确定如何在这种特定情况下应用它们。似乎通过SurvSplit(),我可以按年份使用切点,但不确定如何重塑随时间变化的协变量。

可能是使用通用重塑效果更好?

任何建议将不胜感激。

r survival-analysis survival
1个回答
0
投票

[大概重新塑形并用dplyr进行一些操作将起作用。

library(dplyr)

df %>%
  tidyr::pivot_longer(cols = starts_with('income'), values_to = 'inc') %>%
  group_by(id) %>%
  slice(1:first(end.time)) %>%
  mutate(st.time = row_number() - 1, 
         end.time = st.time + 1,
         event = replace(event, -n(), 0)) %>%
  select(-name)


#     id event end.time   inc st.time
#  <int> <dbl>    <dbl> <int>   <dbl>
#1     1     0        1     8       0
#2     1     0        2    10       1
#3     1     1        3    13       2
#4     2     0        1    13       0
#5     2     0        2    15       1
#6     2     0        3    24       2
#7     2     0        4    35       3

数据

df <- structure(list(id = 1:2, event = 1:0, end.time = 3:4, income1 = c(8L, 
13L), income2 = c(10L, 15L), income3 = c(13L, 24L), income4 = c(8L, 
35L)), class = "data.frame", row.names = c(NA, -2L))
© www.soinside.com 2019 - 2024. All rights reserved.