使用生存套餐的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()
来执行这种计算人员时间的操作,但我没有得到令人满意的结果。我不理解这种混淆(或者可能它非常简单,与生存包函数无关):
它与默认的Rcut
功能的工作方式有关。区间在右侧关闭。我碰巧发现,大多数人都希望间隔在左侧关闭,如果您希望,您可以执行:
> 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
我不理解其中的困惑(或者它可能非常简单,与生存包函数无关):
这与默认的Rcut
功能的工作方式有关。间隔在右侧关闭。我碰巧发现,大多数人都希望间隔在左侧关闭,如果您愿意,您可以执行:
> 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