在子集的Cox PH模型中,我能否重新定义因子的参考水平?

3
这个问题涉及到在使用因素的Cox PH回归中,当默认参考水平被子集化时,危险比参考水平会发生什么变化,特别是在coxph子集操作中是否可以改变这种行为。
应用程序是有原因的风险,因此我想要灵活地分析多个变量的子集 - 每个竞争风险一个 - 而不需要创建所有原因数据集的多个实例。(注意:这是探索性的,不是测试假设。)
定义一个虚构的数据框,它的行为合理(例如具有统计学显著性,没有太多警告)。
smpls = 50
df <- data.frame(time=c(sample.int(10,smpls, replace=TRUE), 
                        sample.int(20,smpls, replace=TRUE), 
                        sample.int(30,smpls, replace=TRUE)),
                 status=1, 
                 x=as.factor(c(rep("A",smpls),
                               rep("B",smpls),
                               rep("C",smpls))))

加载相关库...

require(survival)

进行基本情况,输出B和C的HR系数,以因素A为参考...

coxph(Surv(time, status) ~ x, df) 

然后将A因子进行子集化。这似乎会选择因子C作为因子B系数的参考。

coxph(Surv(time, status) ~ x, df, subset=x!="A")

在上一个例子中,我如何“强制”引用为B而不是C?
1个回答

3

一种选择是使用dplyr包中的mutate函数,它可以让你实时修改数据框:

library(dplyr)        

保留三个级别,但将参考级别设置为B:
coxph(Surv(time, status) ~ x, data = mutate(df, x = relevel(x, ref="B")))

取消 A 级别并将参考级别设置为 B:在此我们也使用 droplevels,这样因子水平 A 不仅会从数据框中删除,而且还会在 x 的可能水平中消除。您不必调用 droplevels,但是这样会收到警告,并且摘要输出将具有 A 级别的一行缺失值。

coxph(Surv(time, status) ~ x, 
  data = df %>% 
    filter(x != "A") %>% 
    mutate(x = droplevels(relevel(x, ref="B"))))

很好的回答,我很高兴问了这个问题,因为我认为我自己不会想到这个。这也是使用管道运算符的一个很好的例子(据我所知)。 - Big Old Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接