我有具有竞争风险的生存数据(删失 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
`
你让自己陷入了困境,因为你混合了
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()
那样从包中导入所有函数。