2015-05-11 72 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 
相關問題