r 生存包中的岭回归错误

Error with ridge regression in r survival package

我正在尝试在大型数据集上使用 R 中的生存包。当我尝试将大量变量输入到 ridge 函数中时,出现错误。奇怪的是,这取决于变量名的长度,但即使使用非常短的变量名(即 X1..X200),我也不能输入超过 100 个变量,直到我收到这个奇怪的错误消息:

Error in if (any(ord > 1)) stop("Penalty terms cannot be in an interaction") : missing value where TRUE/FALSE needed

下面是一个会产生此错误的代码示例:

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

关于我做错了什么的任何提示?重要的是,如果变量名更长,可以输入脊线的变量就更少了。

非常感谢!

尝试将所有变量放入一个矩阵 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) 不会给出该错误。