1

I ran univariate cox regression model using following code.

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

It output as follows:

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

I want to convert the output into a dataframe. My expected output is:

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
2
  • The broom package's tidy method should do the trick. Commented Oct 11, 2023 at 17:15
  • That is not the print output of coxph. It’s the output of its associated summary method. Commented Oct 11, 2023 at 18:11

1 Answer 1

1

As you are looking for a method to extract information from output of summary(coxph(something)), I recommend a self-written function of the form

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))  
}

Toy data from ?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))

The result looks odd as the row names are identical to the Variable column, but this mimics the expectations.

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

Created on 2023-10-11 with reprex v2.0.2

Sign up to request clarification or add additional context in comments.

1 Comment

lower 0.95 and upper 0.95 on both the lines are same. I am supposed to get 0.4237 and 23.67 in line one and 0.3651 20.50 in line two. But I am getting same values at both the lines

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.