从coxph提取P值

时间:2019-11-25 09:47:27

标签: r

我运行以下代码并获得对象名称res.cox,在我打印时可以看到其p值

res.cox <- coxph(
  Surv(DB$time,DB$event) ~
    age + gender + var1 + var2 + ... + varN
  , data =  DB)

我可以通过以下方式轻松提取HR和Conf间隔:

HR <- round(exp(coef(res.cox)), 2)
CI <- round(exp(confint(res.cox)), 2)

但是无论如何,我都无法提取P值列表。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

通常,在调用df= doc.astype(int) 方法之前,包括 p 值在内的统计信息尚不可用。 (直接调用summary()会产生一个 p 值,但可能涉及一个不可见的res.cox调用。)

示例

summary

仔细观察library(survival) res.cox <- coxph(Surv(time, status) ~ x + strata(sex), test1) 的构图,发现只有beta,而没有统计信息。

str()

str(res.cox) 中,它们在summary()中可用。

"coefficients"

所以让我们开始吧。

str(summary(res.cox))

您获得的对象是res.cox.sum <- summary(res.cox)$coefficients ,因此可以像这样对待。

"matrix"

由于所需的 p 值位于第五列中,所以请执行以下操作:

class(res.cox.sum)
# [1] "matrix"

或更短:

res.cox.sum[, 5]
# [1] 0.3292583

数据

summary(res.cox)$coefficients[, 5]
# [1] 0.3292583

答案 1 :(得分:0)

由于您需要HR,CI和P值,因此我使用broom::tidy将它们放到表或图形表示的数据框中:

library(survival)
mod <- coxph(Surv(time, status) ~ x1 + x2, df) 
mod0 <- broom::tidy(mod)
term <- HR <- lb <- ub <- p <- vector()
for (i  in 1:2) {
  term[i] = mod0$term[i]
  HR[i] = mod0$estimate[i]
  lb[i] = mod0$conf.low[i]
  ub[i] = mod0$conf.high[i]
  p[i] = mod0$p.value[i]
} 
outcome <- data.frame(term, HR, lb, ub, p)
outcome
  term        HR         lb       ub         p
1   x1 0.7547319 -0.9071983 2.416662 0.3734241
2   x2 0.1931036 -0.4794228 0.865630 0.5735932

数据

df <- list(time = c(4, 3, 1, 1, 2, 2, 3), 
           status = c(1, 1, 1, 0, 1, 1, 0), 
              x1 = c(0, 2, 1, 1, 1, 0, 0), 
              x2 = c(1, 2, 3, 4, 5, 6, 7))