在本文中,作者通过以下方式进行放射组学特征选择以进行生存预测:
我想复制这种方法(尽管是逻辑回归而不是 cox 回归)。
我能够使用以下 R 代码使用“boot”库从 Lasso 模型中获取前 K 个特征:
lasso_Select <- function(x, indices){
x <- x[indices,]
y <- x$Outcome
x = subset(x, select = -Outcome)
x2 <- as.matrix(x)
fit <- glmnet(x2, y , family="binomial",alpha=1, standardize=TRUE)
cv <- cv.glmnet(x2, y, family="binomial",alpha=1, standardize=TRUE)
fit <- glmnet(x2, y, family="binomial",alpha=1, lambda=cv$lambda.min, standardize=TRUE)
return(coef(fit)[,1])
}
myBootstrap <- boot(scaled_train, lasso_Select, R = 1000, parallel = "multicore", ncpus=5)
但是,我不相信我可以访问各个重新采样的数据集,然后运行多个逻辑回归模型并选择最常见的模型。
关于如何解决这个问题有什么建议吗?
正如
boot()
的手册页所解释的:
对于大多数引导方法,重采样是在主进程中完成的,但如果
或simple = TRUE
则不会。sim = "parametric"
由于您没有进行参数引导,并且不需要指定
simple = TRUE
,因此当您在 R 提示符下键入 boot::boot
时显示的代码显示了如何生成重采样数据索引。关键代码是:
if (!simple)
i <- index.array(n, R, sim, strata, m, L, weights)
其中
n
是数据行数,R
是引导样本数,其他参数在对 boot()
的调用中定义,似乎不适用于您的情况。输入 boot:::index.array
显示该函数的代码,该代码又根据您的情况调用 boot:::ordinary.array
。在您的情况下,i
只是一个矩阵,显示每个引导样本使用哪些数据行。
调整
boot()
的代码以返回索引矩阵以及函数通常返回的其他值应该相当简单。
另一种方法可能是直接在
indices
函数中返回 lasso_Select()
,尽管我不确定 boot()
函数处理得如何。
有一些
R
软件包也可以实现相对透明的引导LASSO分析!
查看:
您不必显式使用
boot
包 - 您可以简单地循环遍历 lasso 过程并保存系数。
保存单独的“重新采样”数据集将会非常快地消耗内存 - 我建议简单地保存每次迭代的采样方案:即采样的列和行。
您的具体要求是我没有想到的,
fastFeatures
,这是一个好主意,可以保留作为进一步分析的选项。