tidycmprsk中cuminc与tbl_cuminc的Gray检验差异及正确用法咨询
竞争风险Gray检验结果差异解读与正确执行方式
为啥三种方法结果不一样?
其实是函数参数传递、事件定义和输出逻辑的差异导致的:
1. 第一种方法(cuminc() + tbl_cuminc() + add_p())
这段代码先计算累积发生率,再生成统计表格并添加检验结果。输出里的p-value=0.07就是针对「复发(status=1)」的Gray检验结果,和第三种方法里Relapse的p值完全匹配。tbl_cuminc()的add_p()默认只展示第一个非截尾事件的检验结果,所以你只看到一个p值;表格里的百分比则是各组在对应时间点的累积事件发生率(复发+死亡的综合概率)。
2. 第二种方法(cuminc()用ftime/fstatus/group参数)
这方法存在明显问题——输出里居然出现了「Censored」的检验结果,这完全不符合Gray检验逻辑:Gray检验仅针对非截尾的竞争事件,截尾(status=0)根本不是需要检验的事件类型。这种参数调用方式导致函数错误地把截尾当成事件分析,所以该结果里的所有检验值都不可信,建议放弃这种写法。
3. 第三种方法(cuminc()用Surv对象+公式+cencode=0)
这是最规范的调用方式:用Surv(time_to_event, status)明确生存数据结构,cencode=0指定截尾编码,函数会自动识别status中的1(复发)和2(死亡)为两个独立竞争事件。输出结果是每个事件单独的Gray检验结果:
- 复发:统计量4.31,自由度2,p=0.07,说明三组之间复发的累积发生率差异未达到统计学显著性(按α=0.05标准)。
- 死亡:统计量32.3,自由度2,p<0.001,说明三组之间死亡的累积发生率差异具有高度统计学显著性。
正确执行Gray检验的方式
直接使用第三种方法的代码即可,它能准确针对每个竞争事件输出可靠的检验结果,完全符合竞争风险分析的逻辑。
如果想在表格中同时展示各事件的累积发生率和对应检验结果,可以调整第一种方法的代码,让add_p()针对每个事件输出:
tidycmprsk::cuminc(Surv(time_to_event, status) ~ rh, data = surv_data, cencode=0) %>% tidycmprsk::tbl_cuminc( times = c(6, 12, 24), label_header = "**Month {time}**" ) %>% add_p(test = "gray", group = TRUE) %>% # 指定为每个事件做Gray检验 add_n()
关键注意事项
- Gray检验是针对单个竞争事件的分析,必须分别解读每个事件的检验结果,不能笼统看待综合p值。
- 截尾编码(
cencode)一定要正确指定,否则会导致事件识别错误,出现无效结果(比如第二种方法里的Censored检验)。
内容的提问来源于stack exchange,提问作者anso_s
相关产品推荐
相关产品推荐

