我正在尝试使用cox回归对具有~100k特征的120个样本进行弹性网络。
我用glmnet包试过R但R不支持大矩阵(似乎R不是为64位设计的)。此外,封装glmnet确实支持稀疏矩阵,但无论出于何种原因,它们都没有实现稀疏矩阵+ cox回归。
我没有推动R,但这是我到目前为止找到的唯一工具。任何人都知道我可以使用什么程序来计算弹性网+大型模型的cox回归?我确实读过我可以使用支持向量机,但我需要先计算模型,由于上述限制,我不能在R中做到这一点。
编辑: 一点澄清。我没有在R中报告错误,因为显然R被它的矩阵可以容纳多少元素限制是正常的(因为glmnet不支持稀疏矩阵+ cox我不知道)。我不是在推动工具,但如果有另一个软件包或独立程序可以执行我正在寻找的工具,那将会更容易。
如果有人有想法或已经这样做过,请分享您的方法(R,Matlab,其他)。
编辑2:
这是我以前测试的内容: 我做了一个100x100000的矩阵。添加标签并尝试使用model.matrix创建模型。
data <- matrix(rnorm(100*100000), 100, 100000)
formula <- as.formula(class ~ .)
x = c(rep('A', 40), rep('B', 30), rep('C', 30))
y = sample(x=1:100, size=100)
class = x[y]
data <- cbind(data, class)
X <- model.matrix(formula, data)
我得到的错误:
Error: cannot allocate vector of size 37.3 Gb
In addition: Warning messages:
1: In terms.formula(object, data = data) :
Reached total allocation of 12211Mb: see help(memory.size)
2: In terms.formula(object, data = data) :
Reached total allocation of 12211Mb: see help(memory.size)
3: In terms.formula(object, data = data) :
Reached total allocation of 12211Mb: see help(memory.size)
4: In terms.formula(object, data = data) :
Reached total allocation of 12211Mb: see help(memory.size)
提前谢谢! :)
编辑3: 感谢@marbel,我能够构建一个有效且不会变得太大的测试模型。似乎我的问题来自于在我的测试中使用cbind。
答案 0 :(得分:1)
一些指示:
a)这是一个相当小的数据集,R应该比实际更多。您所需要的只是一台现代计算机,意味着相当数量的RAM。我想4GB应该足够用于这么小的数据集。
该软件包在Julia和Python中可用,但我不确定该模型是否可用。
Here和here您有使用GLMNET包的cox模型的示例。还有一个名为survival
的包。
您的代码至少存在两个问题:
data <- cbind(data, class)
。它只是没有内存效率。如果您需要执行此类操作,请使用data.table
package。它允许通过引用进行分配,查看:=
运算符。model.matrix
,只需使用data.matrix(X)
。 model.matrix
,然后将它们添加到X矩阵,可能使用data.table
,使用?data.table::set
或{一次一列{1}}运营商。希望这可以帮助您调试代码。祝你好运!