如何根据开始和停止时间创建生存时间变量

时间:2015-05-11 05:39:16

标签: r datetime dataset survival-analysis poisson

我正在尝试计算罕见类型癌症的发病率(使用泊松回归)。我的数据集非常大,包含25.000个观测值,我只包含前20行。

nrcase 变量表示每个人,因为您可以看到一个人可以有多个观察结果,具体取决于他们访问诊所的次数。变量访问是每个唯一个体在数据集中的观察次数, maxvisit 是总数。

开始是指在数据集中首次观察个体,完成分别是患者在数据集中每年的最后观察日期。我没有将检查变量包括在这个子集中(如果患者没有因为某种原因事件或退出研究,审查日期是2011-12-31)

生存期是患者自入选日期起居住的天数(开始

事件是指患者遭受的伤害和事件(我所提供的子集中没有患者)

这就是数据集的样子

first <- read.table(header = TRUE, text ="nrcase  visit maxvisit    done    start   survival    event
7   1   6   31/12/06    04/09/06    118 0
7   2   6   31/12/07    04/09/06    483 0
7   3   6   31/12/08    04/09/06    849 0
7   4   6   31/12/09    04/09/06    1214    0
7   5   6   31/12/10    04/09/06    1579    0
7   6   6   31/12/11    04/09/06    1944    0
20  1   9   31/12/03    24/10/03    68  0
20  2   9   31/12/04    24/10/03    434 0
20  3   9   31/12/05    24/10/03    799 0
20  4   9   31/12/06    24/10/03    1164    0
20  5   9   31/12/07    24/10/03    1529    0
20  6   9   31/12/08    24/10/03    1895    0
20  7   9   31/12/09    24/10/03    2260    0
20  8   9   31/12/10    24/10/03    2625    0
20  9   9   31/12/11    24/10/03    2990    0
87  1   6   31/12/06    17/01/06    348 0
87  2   6   31/12/07    17/01/06    713 0
87  3   6   31/12/08    17/01/06    1079    0
87  4   6   31/12/09    17/01/06    1444    0
87  5   6   31/12/10    17/01/06    1809    0")

这就是我想要数据集的样子:

make <- read.table(header=TRUE, text="nrcase  visit maxvisit    done    start   survival    event   startstop
7   1   6   31/12/06    04/09/06    118 0   118
7   2   6   31/12/07    04/09/06    483 0   365
7   3   6   31/12/08    04/09/06    849 0   365
7   4   6   31/12/09    04/09/06    1214    0   365
7   5   6   31/12/10    04/09/06    1579    0   365
7   6   6   31/12/11    04/09/06    1944    0   365
20  1   9   31/12/03    24/10/03    68  0   68
20  2   9   31/12/04    24/10/03    434 0   365
20  3   9   31/12/05    24/10/03    799 0   365
20  4   9   31/12/06    24/10/03    1164    0   365
20  5   9   31/12/07    24/10/03    1529    0   365
20  6   9   31/12/08    24/10/03    1895    0   365
20  7   9   31/12/09    24/10/03    2260    0   365
20  8   9   31/12/10    24/10/03    2625    0   365
20  9   9   31/12/11    24/10/03    2990    0   233
87  1   6   31/12/06    17/01/06    348 0   348
87  2   6   31/12/07    17/01/06    713 0   365
87  3   6   31/12/08    17/01/06    1079    0   365
87  4   6   31/12/09    17/01/06    1444    0   365
87  5   6   31/12/10    17/01/06    1809    0   105")

如您所见,我想创建一个名为startstop的新变量,即患者每年为观察行贡献的总天数。

Startstop 稍后将作为glm(泊松)模型中的偏移变量工作。

感谢我能得到的所有帮助!

1 个答案:

答案 0 :(得分:2)

我希望这能满足您的需求。我使用了lubridate和dplyr,因为它们使事情变得更容易,但在基础上可以实现相同的结果。

没有必要保留year_donefirst_jan_done,这些可以通过%>% select(-year_done, -first_jan_done)删除,但我想我会留下来让这个过程更加清晰。

require(dplyr)
require(lubridate)
make <- first %>% 
  mutate(start = dmy(start), done = dmy(done),
         year_done = year(done), first_jan_done = dmy(paste0("01/01/",year_done)),
         days_in_year = as.numeric(done - first_jan_done)+1
         ) %>% # Need to deal with those observations where patients entered study part way into year
  mutate(days_in_year = ifelse(start > first_jan_done, as.numeric(done - start),
                               days_in_year))
make
   nrcase visit maxvisit       done      start survival event year_done first_jan_done days_in_year
1       7     1        6 2006-12-31 2006-09-04      118     0      2006     2006-01-01          118
2       7     2        6 2007-12-31 2006-09-04      483     0      2007     2007-01-01          365
3       7     3        6 2008-12-31 2006-09-04      849     0      2008     2008-01-01          366
4       7     4        6 2009-12-31 2006-09-04     1214     0      2009     2009-01-01          365
5       7     5        6 2010-12-31 2006-09-04     1579     0      2010     2010-01-01          365
6       7     6        6 2011-12-31 2006-09-04     1944     0      2011     2011-01-01          365
7      20     1        9 2003-12-31 2003-10-24       68     0      2003     2003-01-01           68
8      20     2        9 2004-12-31 2003-10-24      434     0      2004     2004-01-01          366
9      20     3        9 2005-12-31 2003-10-24      799     0      2005     2005-01-01          365
10     20     4        9 2006-12-31 2003-10-24     1164     0      2006     2006-01-01          365
11     20     5        9 2007-12-31 2003-10-24     1529     0      2007     2007-01-01          365
12     20     6        9 2008-12-31 2003-10-24     1895     0      2008     2008-01-01          366
13     20     7        9 2009-12-31 2003-10-24     2260     0      2009     2009-01-01          365
14     20     8        9 2010-12-31 2003-10-24     2625     0      2010     2010-01-01          365
15     20     9        9 2011-12-31 2003-10-24     2990     0      2011     2011-01-01          365
16     87     1        6 2006-12-31 2006-01-17      348     0      2006     2006-01-01          348
17     87     2        6 2007-12-31 2006-01-17      713     0      2007     2007-01-01          365
18     87     3        6 2008-12-31 2006-01-17     1079     0      2008     2008-01-01          366
19     87     4        6 2009-12-31 2006-01-17     1444     0      2009     2009-01-01          365
20     87     5        6 2010-12-31 2006-01-17     1809     0      2010     2010-01-01          365