我正在尝试在大型数据集上的R中使用生存包。当我尝试在ridge函数中输入很多变量时,出现错误。奇怪的是,这取决于变量名的长度,但是即使使用非常短的变量名(例如X1..X200),在收到此奇怪的错误消息之前,输入的变量也不能超过100个。
if(any(ord> 1))stop(“惩罚性条款不能在互动中”)错误: 缺少需要TRUE / FALSE的值
这是一个代码示例,它将产生此错误:
library(survival)
# Create a test data frame with random data (200 predictors)
test.data <-data.frame(outcome=rbinom(1000,1,0.1),
time=runif(1000,0,1000),replicate(200,rnorm(1000)))
# Create a string with ridge regression formula for 100 predictors
ridge.formula.100 <- paste0("Surv(time,outcome) ~ ridge(",
paste(paste0("X",1:100),collapse=","),",theta=1)")
# Run ridge regression with 100 predictors
m1 <- coxph(as.formula(ridge.formula.100),data=test.data)
summary(m1) # Yay it works!
# Create a string with ridge regression formula for 200 predictors
ridge.formula.120 <- paste0("Surv(time,outcome) ~ ridge(",
paste(paste0("X",1:120),collapse=","),",theta=1)")
# Run ridge regression with 120 predictors
m2 <- coxph(as.formula(ridge.formula.120),data=test.data) # Gives error
# Fails with error above
关于我在做什么错的任何提示吗?重要的是,如果变量名较长,则可以在脊中输入更少的变量。
非常感谢!
答案 0 :(得分:0)
尝试将所有变量放入矩阵allvars <- as.matrix(test.data[,3:ncol(test.data)])
中,然后在公式ridge.formula <- as.formula(paste("Surv(time,outcome) ~ ridge(allvars,theta=1)"))
中使用它。现在,呼叫m2 = coxph(ridge.formula,data=test.data)
不会发出该错误。