我运行以下代码并获得对象名称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值列表。
任何帮助将不胜感激。
答案 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))