如何将 cox 回归输出转换为数据帧?

How to convert cox regression output into a dataframe?

提问人:nicholaspooran 提问时间:10/12/2023 更新时间:10/12/2023 访问量:52

问:

我使用以下代码运行了单变量 cox 回归模型。

res <- coxph(Surv(DFS, DFS.Event) ~ Grade, data = Grade)
summary(res)

它输出如下:

Call:
coxph(formula = Surv(DFS, DFS.Event) ~ Grade, data = Grade)

  n= 172, number of events= 38 
   (12 observations deleted due to missingness)

             coef exp(coef) se(coef)     z Pr(>|z|)
GradeGrade2 1.153     3.167    1.026 1.123    0.261
GradeGrade3 1.006     2.736    1.028 0.979    0.327

            exp(coef) exp(-coef) lower .95 upper .95
GradeGrade2     3.167     0.3158    0.4237     23.67
GradeGrade3     2.736     0.3655    0.3651     20.50

Concordance= 0.539  (se = 0.04 )
Likelihood ratio test= 1.82  on 2 df,   p=0.4
Wald test            = 1.34  on 2 df,   p=0.5
Score (logrank) test = 1.45  on 2 df,   p=0.5

我想将输出转换为数据帧。我的预期输出是:

Variable    coef    exp(coef)   se(coef)    z   p   lower 0.95  upper 0.95
GradeGrade2 1.153   3.167   1.026   1.123   0.261   0.4237  23.67
GradeGrade3 1.006   2.736   1.028   0.979   0.327   0.3651  20.5
R DataFrame Cox 回归

评论

0赞 Limey 10/12/2023
包的方法应该可以解决问题。broomtidy
0赞 IRTFM 10/12/2023
这不是 coxph 的打印输出。它是其关联的汇总方法的输出。

答:

1赞 Friede 10/12/2023 #1

当您正在寻找一种从输出中提取信息的方法时,我建议您使用表单的自写函数summary(coxph(something))

CoxphToDF <- function(y) {
  stopifnot(class(y) == "summary.coxph")
  
  y <- 
    cbind(y[["coefficients"]], 
          `lower .95` = y[["conf.int"]][, "lower .95"], 
          `upper .95` = y[["conf.int"]][, "upper .95"]
    )
  
  cbind(Variable = rownames(y), as.data.frame(y))  
}

玩具数据来源:?coxph

library(survival)

test2 <- list(start=c(1,2,5,2,1,7,3,4,8,8), 
              stop=c(2,3,6,7,8,9,9,9,14,17), 
              event=c(1,1,1,1,1,1,1,0,0,0), 
              x=c(1,0,0,1,0,1,1,1,0,0)) 
bladder1 <- bladder[bladder$enum < 5, ] 

testobject <- summary(coxph(Surv(stop, event) ~ (rx + size + number) * strata(enum),
                            cluster = id, bladder1))

结果看起来很奇怪,因为行名与列相同,但这模拟了预期。Variable

CoxphToDF(testobject) |> head()
#>                                    Variable        coef exp(coef)   se(coef)
#> rx                                       rx -0.52598436 0.5909733 0.31582587
#> size                                   size  0.06961334 1.0720936 0.10155903
#> number                               number  0.23817961 1.2689371 0.07588471
#> rx:strata(enum)enum=2 rx:strata(enum)enum=2 -0.10632654 0.8991310 0.50423983
#> rx:strata(enum)enum=3 rx:strata(enum)enum=3 -0.17250719 0.8415522 0.55780009
#> rx:strata(enum)enum=4 rx:strata(enum)enum=4 -0.10945460 0.8963229 0.65730033
#>                        robust se          z    Pr(>|z|) lower .95 upper .95
#> rx                    0.31523946 -1.6685232 0.095211902 0.3185925  1.096226
#> size                  0.08863123  0.7854268 0.432203369 0.9011346  1.275486
#> number                0.07458532  3.1933847 0.001406155 1.0963594  1.468680
#> rx:strata(enum)enum=2 0.33395783 -0.3183831 0.750194332 0.4672589  1.730168
#> rx:strata(enum)enum=3 0.39867743 -0.4326987 0.665233705 0.3852354  1.838383
#> rx:strata(enum)enum=4 0.50636317 -0.2161583 0.828864362 0.3322365  2.418141

创建于 2023-10-11 使用 reprex v2.0.2

评论

0赞 nicholaspooran 10/12/2023
lower 0.95两条线都是相同的。我应该在第一行和第二行。但是我在两条线上都得到了相同的值upper 0.950.423723.670.365120.50