Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用生存套餐的pyears()计算随访月数_R_Survival Analysis_Survival - Fatal编程技术网

使用生存套餐的pyears()计算随访月数

使用生存套餐的pyears()计算随访月数,r,survival-analysis,survival,R,Survival Analysis,Survival,我想按日历月计算随访的人次。在我的例子中,我有三个受试者,有不同的随访时间。我想知道事件的发生率是否因年份而异,所以我想总结一下他们在每一个三分位数中所花费的风险时间 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-

我想按日历月计算随访的人次。在我的例子中,我有三个受试者,有不同的随访时间。我想知道事件的发生率是否因年份而异,所以我想总结一下他们在每一个三分位数中所花费的风险时间

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
使用R中的包
survival
,函数
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 


有些人使用同一个包中的函数
tcut()
来执行这种计算人员时间的操作,但我没有得到令人满意的结果。

我不理解这种混淆(或者可能它非常简单,与生存包函数无关):

它与默认的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 
>dfs
>汇总(Pyear(三分位数,比例=1))
调用:pyears(公式=s~tertile,比例=1)
观察次数=3
三次事件时间
--------- --- -------- ------ 
[0,4)    1     1      1095 
[4,9)    1     1       365 
[9,12]    1     1       730 

我不理解其中的困惑(或者它可能非常简单,与生存包函数无关):

这与默认的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 
>dfs
>汇总(Pyear(三分位数,比例=1))
调用:pyears(公式=s~tertile,比例=1)
观察次数=3
三次事件时间
--------- --- -------- ------ 
[0,4)    1     1      1095 
[4,9)    1     1       365 
[9,12]    1     1       730 

您的回答很有帮助,但这不是我想要的。我需要每个人通过每个时间间隔的确切时间。在我的示例中,每个时间间隔在最终输出中的时间应该相等。在这个示例中,他们教您如何使用tcut和年龄和日历时间,但我找不到这个月周期的解决方案:您没有解释为什么你认为每个间隔都应该有相等的“时间”。在我看来,数据帧的检查应该向你表明这是不可能的。当原始数据只有前两个间隔的值时,如果使用默认的
cut
函数定义,就无法在三个间隔内重新分配“时间”。。(你也应该意识到,有时候Therneau使用365.24作为一年中的天数。然而,我不认为这就是这里发生的事情。)在流行病学中,我们使用图像中的这种框架来使用人-时间风险。如果每一行代表多年的每一个特例,每一行代表观察中的人,那么所有人的特定特例之和应该大致平均分布。至少根据我的逻辑。也许我错了。你的答案是helpful,但这不是我想要的。我需要每个人通过每个间隔的确切时间。在我的例子中,每个间隔在最终输出中应该有相等的时间。在这个例子中,他们教如何使用年龄和日历时间的tcut,但我找不到这个月周期的解决方案:你没有解释为什么你认为每个间隔rval应该有相等的“时间”。在我看来,对数据帧的检查应该表明这是不可能的。当原始数据在使用默认的
cut
函数定义的前两个间隔中只有值时,就无法在三个间隔内重新分配“时间”。。(你也应该意识到,有时候Therneau使用365.24作为一年中的天数。然而,我不认为这就是这里发生的事情。)在流行病学中,我们使用图像中的这种框架来使用人-时间风险。如果每一行代表多年的每一个特例,每一行代表观察中的人,那么所有人的特定特例之和应该大致平均分布。至少根据我的逻辑。也许我错了
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
> 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