从coxph中提取P值

4

我运行以下代码得到了一个名为res.cox的对象,当我打印出来时可以看到它的p值。

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

我可以通过以下方式轻松提取HR和置信区间: ```可以按如下方式轻松提取 HR 和置信区间:```
HR <- round(exp(coef(res.cox)), 2)
CI <- round(exp(confint(res.cox)), 2)

但无论我尝试什么方法,都无法提取P值列表。非常感谢您的帮助。

1
尝试使用 broom::tidy(res.cox)glance。使用基本的 R 语言 summary(res.cox)[['coefficients']][,'Pr(>|z|)'] - A. Suliman
2个回答

4

通常情况下,在调用summary()方法之前,包括p值在内的统计数据是不可用的。(直接调用res.cox将返回一个p值,但可能存在一个不可见的summary调用)

示例

library(survival)
res.cox <- coxph(Surv(time, status) ~ x + strata(sex), test1) 

观察 str() 结构,可以发现只有 beta 值而没有统计数据。

str(res.cox)

summary()中,它们可以在"coefficients"中找到。

str(summary(res.cox))

那么我们开始吧。
res.cox.sum <- summary(res.cox)$coefficients

您获得的对象是一个"矩阵",因此可以像处理矩阵一样处理它。
class(res.cox.sum)
# [1] "matrix"

由于期望的p值在第五列中,所以请执行以下操作:

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

简而言之:

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

数据

test1 <- structure(list(time = c(4, 3, 1, 1, 2, 2, 3), status = c(1, 1, 
1, 0, 1, 1, 0), x = c(0, 2, 1, 1, 1, 0, 0), sex = c(0, 0, 0, 
0, 1, 1, 1)), class = "data.frame", row.names = c(NA, -7L))

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

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