【问题标题】:Creating time variables for conditional risk set model (Cox regression)为条件风险集模型创建时间变量(Cox 回归)
【发布时间】:2015-01-26 10:19:46
【问题描述】:

我正在准备数据集以使用分层 Cox 回归拟合条件风险集模型。我想知道是否有任何方法可以在不运行耗时循环的情况下创建我需要的变量。

基本上,我的数据框是这样的,显示给定国家 (ID) 在特定时间段内是否以及何时经历过某些事件:

 year    ID event   time
 1991    UK     0      1
 1992    UK     0      2
 1993    UK     0      3
 1994    UK     0      4
 1995    UK     0      5
 1996    UK     0      6
 1997    UK     0      7
 1998    UK     0      8

 1991    FR     0      1
 1992    FR     1      2
 1993    FR     1      3
 1994    FR     0      4
 1995    FR     0      5
 1996    FR     1      6
 1997    FR     0      7
 1998    FR     0      8

 1991    IT     1      1
 1992    IT     0      2
 1993    IT     0      3
 1994    IT     0      4
 1995    IT     0      5
 1996    IT     1      6
 1997    IT     0      7
 1998    IT     0      8

我需要再创建两个变量:一个条件时间变量,类似于time,但每次发生事件时都会“重置时钟”;和一个 sequence 变量,指示国家处于哪个序列或阶段,即下一个事件是第二个、第三个、第四个……(数字应该在 之后增加 em>事件)。因此,数据将如下所示:

 year    ID event   time cond.time sequence
 1991    UK     0      1         1        1
 1992    UK     0      2         2        1
 1993    UK     0      3         3        1
 1994    UK     0      4         4        1
 1995    UK     0      5         5        1
 1996    UK     0      6         6        1
 1997    UK     0      7         7        1
 1998    UK     0      8         8        1

 1991    FR     0      1         1        1
 1992    FR     1      2         2        1
 1993    FR     1      3         1        2
 1994    FR     0      4         1        3
 1995    FR     0      5         2        3
 1996    FR     1      6         3        3
 1997    FR     0      7         1        4
 1998    FR     0      8         2        4

 1991    IT     1      1         1        1
 1992    IT     0      2         1        2
 1993    IT     0      3         2        2
 1994    IT     0      4         3        2
 1995    IT     0      5         4        2
 1996    IT     1      6         5        2
 1997    IT     0      7         1        3
 1998    IT     0      8         2        3

任何人都知道如何以某种有效的方式做到这一点?我试图用ddply 函数来做这件事,但不知道怎么做。

【问题讨论】:

    标签: r survival-analysis


    【解决方案1】:

    您可以使用data.table 包。如果df 是你原来的data.frame:

    library(magrittr)
    library(data.table)
    dt = data.table(df)
    
    dt[,temp:=ifelse(is.na(lag(event,1)), as.integer(0), lag(event,1)), by=ID]
    dt[, sequence:=cumsum(temp)+1, by=ID]
    
    func = function(x)
    {
        which(c(1,lag(x,1)[-1]) %in% 1) %>%
        c(length(x)+1) %>% 
        diff
    }
    
    dt[, cond.time:=func(event) %>% lapply(seq) %>% unlist, by=ID]
    
    > dt
        year ID event time temp sequence cond.time
     1: 1991 UK     0    1    0        1         1
     2: 1992 UK     0    2    0        1         2
     3: 1993 UK     0    3    0        1         3
     4: 1994 UK     0    4    0        1         4
     5: 1995 UK     0    5    0        1         5
     6: 1996 UK     0    6    0        1         6
     7: 1997 UK     0    7    0        1         7
     8: 1998 UK     0    8    0        1         8
     9: 1991 FR     0    1    0        1         1
    10: 1992 FR     1    2    0        1         2
    11: 1993 FR     1    3    1        2         1
    12: 1994 FR     0    4    1        3         1
    13: 1995 FR     0    5    0        3         2
    14: 1996 FR     1    6    0        3         3
    15: 1997 FR     0    7    1        4         1
    16: 1998 FR     0    8    0        4         2
    17: 1991 IT     1    1    0        1         1
    18: 1992 IT     0    2    1        2         1
    19: 1993 IT     0    3    0        2         2
    20: 1994 IT     0    4    0        2         3
    21: 1995 IT     0    5    0        2         4
    22: 1996 IT     1    6    0        2         5
    23: 1997 IT     0    7    1        3         1
    24: 1998 IT     0    8    0        3         2
    

    【讨论】:

    • 是的,这完全有效!即使我不得不将滞后功能更改为这个(来自here):reglag = function(x,lag) {c(rep(NA,lag), x[lag:(length(x)-1)])}
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2012-12-30
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多