我正在尝试计算罕见类型癌症的发病率(使用泊松回归)。我的数据集非常大,包含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(泊松)模型中的偏移变量工作。
感谢我能得到的所有帮助!
答案 0 :(得分:2)
我希望这能满足您的需求。我使用了lubridate和dplyr,因为它们使事情变得更容易,但在基础上可以实现相同的结果。
没有必要保留year_done
或first_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