R 计算多变量的生存p值

R 计算多变量的生存p值,r,survminer,R,Survminer,我有一个很长的变量列表,我想计算每个变量的生存差异(p值)。我使用survfit()和surv_pvalue()函数来获得结果,但在变量循环方面遇到了一些问题 library(survminer) set.seed(2020) data <- data.frame(Months = 10 + rnorm(1:10), Status = c(rep((0),5),rep((1),5)), clin = rep(&q

我有一个很长的变量列表,我想计算每个变量的生存差异(p值)。我使用survfit()和surv_pvalue()函数来获得结果,但在变量循环方面遇到了一些问题

library(survminer)

set.seed(2020)
data <- data.frame(Months = 10 + rnorm(1:10),
                   Status = c(rep((0),5),rep((1),5)),
                   clin = rep("bla bla", 10),
                   Var1 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)),
                   Var2 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)),
                   Var3 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)))

fit.list <- list()

for (i in (4:ncol(data))){
  fit <- survfit(Surv(Months, Status) ~ colnames(data)[3+i], data = data)
  fit2 <- surv_pvalue(fit)
  fit.list[[i]] <- fit2
}

可能意味着
4:ncol(data)
colnames(data)[3+i]
的长度不一致,但我必须如何准确地指定它们?提前感谢您提供的解决方案

您可以使用
lappy
而不是迭代并附加到列表中:

lappy(数据[4:6],函数(i){
surv_pvalue(eval)调用(“survfit”,
公式=重新格式化(名称(数据)[i],
“Surv(月、状态)”,
数据=数据)
})
#>$Var1
#>变量pval方法pval.txt
#>1个月0.3371479对数秩p=0.34
#> 
#>$Var2
#>变量pval方法pval.txt
#>1个月0.3371479对数秩p=0.34
#> 
#>$Var3
#>变量pval方法pval.txt
#>1个月0.3371479对数秩p=0.34

艾伦·卡梅伦的回答直截了当,而且非常有效。我几乎完美地使用了:

library(survminer)

set.seed(2020)
dat <- data.frame(Months = 10 + rnorm(1:10),
                   Status = c(rep((0),5),rep((1),5)),
                   clin = rep("bla bla", 10),
                   Var1 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)),
                   Var2 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)),
                   Var3 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)))

fit.list <- list()

for (i in (4:length(dat))){
  fit <- survfit(Surv(Months, Status) ~ dat[,i], data = dat)
  fit2 <- surv_pvalue(fit)
  fit.list[[i]] <- fit2
}
库(survminer)
设定种子(2020年)

dat谢谢,我几乎达到了目的,将对象名从“data”改为“dat”,并将colnames(data)[3+I]改为dat[,I]。我把它作为一个答案附在下面。看来,for解比lappy快得多,至少对于我的数据(296个观察值x 157个变量)
library(survminer)

set.seed(2020)
dat <- data.frame(Months = 10 + rnorm(1:10),
                   Status = c(rep((0),5),rep((1),5)),
                   clin = rep("bla bla", 10),
                   Var1 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)),
                   Var2 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)),
                   Var3 = sample(0:1, 10, replace=T,prob=c(0.5,0.5)))

fit.list <- list()

for (i in (4:length(dat))){
  fit <- survfit(Surv(Months, Status) ~ dat[,i], data = dat)
  fit2 <- surv_pvalue(fit)
  fit.list[[i]] <- fit2
}