提取日志等级(得分)测试结果与Coxph模型的p值

时间:2016-12-04 17:26:19

标签: r cox

我有100个复制的coxph模型适合循环。我试图用数据框或列表中每个复制品的p值提取对数秩分数测试结果。我使用以下内容。但是,它只给出了对数排名,而不是p值。任何帮助将非常感激。

我可以共享数据集,但不知道如何附加在这里。

感谢, Krina

Repl_List <- unique(dat3$Repl)
doLogRank = function(sel_name) {
dum <- dat3[dat3$Repl == sel_name,]
reg <- with(dum, coxph(Surv(TIME_day, STATUS) ~ Treatment, ties = "breslow"))
LogRank <- with(reg, reg$score) 
}
LogRank <- t(as.data.frame(lapply(Repl_List, doLogRank)))

1 个答案:

答案 0 :(得分:0)

这是我从coxph函数的帮助页面中获取的模拟示例。我只是复制数据集100次来创建你的场景。我强烈建议您开始使用tidyverse软件包来完成此类工作。 broom以及dplyrtidyr是一个很好的补充。

library(survival)
library(tidyverse)
library(broom)
  test <- data.frame(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))

下面我使用replicate函数复制数据集100次。

r <- replicate(test,n = 100,simplify = FALSE) %>% bind_rows %>% 
  mutate(rep = rep(seq(1,100,1),each=7))

我将cox模型设置为一个小函数,我可以将它们传递给数据帧的每个复制品。

cxph_mod <- function(df) {
  coxph(Surv(time, status) ~ x + strata(sex), df)
}

下面是拟合模型和提取值的逐步过程。

tidyr::nest数据框 purrr::map将模型放入每个巢中 nest功能library(tidyr) map是与lapply

中的library(purrr)类似的函数
nested <- r %>% 
  group_by(rep) %>% 
  nest %>% 
  mutate(model = data %>% map(cxph_mod))

查看第一个代表以查看coxph输出。您将看到模型对象存储在数据框的单元格中,以便于访问。

nested %>% filter(rep==1)

对于每个模型对象,现在使用扫帚来获取参数估计和从模型到嵌套数据集的预测

nested <- nested %>% 
  mutate(
    ests = model %>% map(broom::tidy)
  )

tidyr::unnest查看您对每个重采样数据集进行拟合的预测

ests <- unnest(nested,ests,.drop=TRUE) %>% dplyr::select(rep,estimate:conf.high)

在这种情况下,因为我重复相同的数据集100次,所以pvalue将是相同的,但在您的情况下,您将有100个不同的数据集,因此有100个不同的p.values。

ggplot(data=ests,aes(y=p.value,x=rep))+geom_point()

维杰