R生存软件包中的岭回归错误

时间:2018-11-04 17:14:04

标签: r statistics survival-analysis

我正在尝试在大型数据集上的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

关于我在做什么错的任何提示吗?重要的是,如果变量名较长,则可以在脊中输入更少的变量。

非常感谢!

1 个答案:

答案 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)不会发出该错误。