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

How to create a survival time variable based on start and stop time

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

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

Start 是在数据集中第一次观察到个体的时间,done 分别是每个个体的最后观察日期患者在数据集中的年份。我没有在这个子集中包含审查变量(如果患者没有遭受和事件或由于某种原因退出研究审查日期是 2011-12-31)

生存期 是自纳入日期 (start)

以来患者存活的天数

事件 是如果患者遭受和事件(我提供给您的子集中没有患者有)

这是数据集的样子

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(泊松)模型中的偏移变量。

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

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

不需要保留 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