2015-05-11 76 views
1

我试图计算罕见类型癌症的发病率(用泊松回归法)。我的数据集非常大,包含25000个观测值,我只包括前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(泊松)模型中的偏移量变量。

欣赏我所能得到的所有帮助!

+0

已经贴出我的回答,我注意到壳87,访问5具有观察105天您所需的输出。目前还不清楚为什么应该给出2011-12-31的审查日期。还有案例20,访问9。 –

回答

1

我希望这可以满足您的需求。我已经使用了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 
相关问题