如何使用 R 包 tidycmprsk 对竞争风险数据执行格雷检验

问题描述 投票:0回答:1

我有具有竞争风险的生存数据(删失 0、复发 1、死亡 2),并且我想使用格雷检验来检查变量 rh 组之间的差异(类别 0、1 和 2)。这是我的数据:

> surv_data
# A tibble: 344 × 4
           ID        time_to_event          status    rh
          <dbl>             <dbl>            <dbl> <fct> 
 1            1             61.2                 0 PHLF 0
 2            2              6.53                1 PHLF 0
 3           10            109.                  0 PHLF 0
 4           15             15.5                 2 PHLF 2
 5           19              4.97                0 PHLF 0
 6           20             17.9                 1 PHLF 1
 7           22             61.7                 1 PHLF 0
 8           23             74.0                 2 PHLF 0
 9           26             67.9                 2 PHLF 1
10           27             46.8                 2 PHLF 0
# ℹ 389 more rows
# ℹ Use `print(n = ...)` to see more rows

tidycmprsk::tbl_cuminc 和 tidycmprsk::cuminc 中的 Gray 测试有什么区别。我得到不同的输出。

我尝试了以下操作,但我不明白为什么我得到不同的测试输出。 Hpw 我应该解释结果吗?进行格雷测试的正确方法是什么?

1)

tidycmprsk::cuminc(Surv(time_to_event, status) ~ rh, data = surv_data) %>% 
  tidycmprsk::tbl_cuminc(
    times =  c(6, 12, 24), label_header = "**Month {time}**"
  ) %>% 
  add_p() %>% 
  add_n()

我得到输出:

`
Characteristic  N   Month 6       Month 12          Month 24    p-value1
rh  399                                               0.07
    rh 0        32% (15%, 33%)  45% (39%, 50%)  62% (36%, 65%)  
    rh 1        23% (9%, 28%)   37% (21%, 53%)  46% (38%, 68%)  
    rh  2       28% (12%, 42%)  27% (15%, 63%)  38% (21%, 55%)  
1 Gray’s Test
`
tidycmprsk::cuminc(ftime=surv_data$time_to_event, fstatus=surv_data$status, group=surv_data$rh, cencode=0)

我得到输出:

`
Tests:
                      stat           pv df
Censored          2.20168  1.176649e-01  2
Relapse           5.75114  2.376312e-01  2
Death            28.383626 3.183201e-09  2
`
tidycmprsk::cuminc(Surv(time_to_event, status) ~ rh, data = surv_data, cencode=0)

我得到输出:

`
• Tests
outcome            statistic   df     p.value    
Relapse            4.31        2.00   0.07      
Death              32.3        2.00   <0.001   
`
r survival-analysis chi-squared
1个回答
1
投票

你让自己陷入了困境,因为你混合了

tidycmprsk
cmprsk
。这两个包都有一个名为
cmprsk
的函数。您的第二个代码片段是:

tidycmprsk::cuminc(ftime=surv_data$time_to_event, fstatus=surv_data$status, group=surv_data$rh, cencode=0)

但是,tidycmprsk::cuminc()

docs
表明它要么采用公式,要么采用名为
x
的参数。您提供的参数(
ftime
fstatus
等)是
cmprsk::cuminc()
的参数。由于所有参数都已命名,但没有一个是
x
,因此此代码将生成错误。

一旦解决了这个问题,您应该会得到相同的结果。这是一个示例,其中

trial
数据内置于
tidycmprsk
包中。

tidycmprsk

请注意,这里我使用

death_cr
作为状态变量。正如文档所述:

状态变量必须是一个因子,其中第一个级别表示观察被审查,后续级别是竞争事件。

确保您的数据采用这种形式。

library(tidycmprsk)

tidy_model <- tidycmprsk::cuminc(Surv(ttdeath, death_cr) ~ trt, trial) |>
    tbl_cuminc(times = c(6, 12, 24)) |>
    add_p() |>
    add_n()

data.frame(tidy_model$table_body[1, c("statistic", "p.value")])
#   statistic   p.value
# 1   1.98847 0.1585009

cmprsk

这与使用

cmprsk
等效。同样,当我们使用因子变量
death_cr
作为状态时,我们可以提供
cencode = "censor"
,即指示与被审查相关的因子级别标签的字符向量(而不是您问题中的
cencode = 0
)。


gray_model <- cmprsk::cuminc(
    ftime = trial$ttdeath,
    fstatus = trial$death_cr,
    group = trial$trt,
    cencode = "censor"
)

gray_model$Tests
#                          stat        pv df
# death from cancer  1.98847032 0.1585009  1
# death other causes 0.08856723 0.7660066  1

您可以看到 p 值和统计量是相同的。

关于命名空间的一般评论

如果包有重叠的功能(这两个包也有

crr()
的共同点),有多种方法。在我的示例中,我使用
tidycmprsk
加载
library()
,并使用
cmprsk
显式调用
::
函数。这是在这些情况下您应该做的最低限度的事情。事实上,Google R 风格指南表明:

用户应明确限定所有外部函数的命名空间。

当然,对于拥有大量代码库的大公司来说,这个建议比一般不会面临命名空间冲突的巨大风险的单个研究人员更有意义。

另一种具有许多优点的方法是使用

box
包。这允许您(除其他外)从特定包中显式导入要使用的函数,而不是像
library()
那样从包中导入所有函数。

© www.soinside.com 2019 - 2024. All rights reserved.