Подсчет месяцев наблюдения с помощью pyears () пакета выживания - PullRequest
1 голос
/ 11 марта 2020

Я хочу рассчитать человеко-время наблюдения за календарным месяцем. В моем примере у меня есть три предмета с разным временем наблюдения. Я хочу знать, варьируются ли ставки события в зависимости от года, поэтому хочу подвести итог времени, которое они проводят в каждом из тертилей.

library(lubridate)
library(survival)

event <- c(1,1,1)
id <- c(1,2,2)
followup_time <- c(365, 365*2, 365*3)
right.date <- c(ymd("2012-06-01"), ymd("2013-09-01"), ymd("2011-01-01"))
left.date <- right.date-followup
tertile <- cut(month(right.date), c(0,4,9,12), include.lowest = T)


df <- data.frame(id, left.date, right.date, followup_time, event, tertile); df
 id  left.date right.date followup_time event tertile
1  1 2011-06-01 2012-06-01           365     1   (4,9]
2  2 2011-09-01 2013-09-01           730     1   (4,9]
3  2 2008-01-01 2011-01-01          1095     1   [0,4]

sum(df$followup_time)
[1] 2190


Используя пакет survival в R, функция pyears() Я получаю следующие результаты. Однако, хотя количество предметов и событий правильное, человеко-время наблюдения является неправильным, в соответствии с моими потребностями.


s <- Surv(time =  followup_time, event = event)

summary(pyears(s ~ tertile , scale = 1))

Call: pyears(formula = s ~ tertile , scale = 1)

number of observations = 3

 month    N   Events   Time  
-------- --- -------- ------ 
 [0,4]    1     1      1095 
 (4,9]    2     2      1095 
 (9,12]   0     0         0 

Я ожидаю следующих результатов, которые соответствуют сумме время в группе риска каждый субъект провел в каждом из интервалов.

month    N   Events   Time  
-------- --- -------- ------ 
[0,4]    1     1      547.5
(4,9]    2     2      547.5 
(9,12]   0     0      547.5

Некоторые люди используют функцию tcut() из этого же пакета для выполнения такого рода операций для расчета времени на человека, но у меня не было удовлетворительные результаты.

1 Ответ

0 голосов
/ 13 марта 2020

Я не понимаю путаницы (или, может быть, это действительно просто и не имеет ничего общего с функциями пакета выживания):

df
#--------
  id  left.date right.date followup_time event tertile
1  1 2011-06-02 2012-06-01           365     1   (4,9]
2  2 2011-09-02 2013-09-01           730     1   (4,9]
3  2 2008-01-02 2011-01-01          1095     1   [0,4]

month(right.date)
#[1] 6 9 1

Это связано с тем, как работает функция R cut по умолчанию. Интервалы закрыты справа. Я обнаружил, что большинство людей ожидают, что интервалы будут закрыты слева, и если вы захотите, вы выполните:

> df <- data.frame(id, left.date, right.date, followup_time, event, tertile); df
  id  left.date right.date followup_time event tertile
1  1 2011-06-02 2012-06-01           365     1   [4,9)
2  2 2011-09-02 2013-09-01           730     1  [9,12]
3  2 2008-01-02 2011-01-01          1095     1   [0,4)
> s <- with(df, Surv(time =  followup_time, event = event))
> 
> summary(pyears(s ~ tertile , scale = 1))
Call: pyears(formula = s ~ tertile, scale = 1)

number of observations = 3

 tertile   N   Events   Time  
--------- --- -------- ------ 
  [0,4)    1     1      1095 
  [4,9)    1     1       365 
 [9,12]    1     1       730 
...