Cox回归的弹性网

时间:2016-02-11 22:04:45

标签: r bioinformatics linear-regression glm glmnet

我正在尝试使用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。

1 个答案:

答案 0 :(得分:1)

一些指示:

a)这是一个相当小的数据集,R应该比实际更多。您所需要的只是一台现代计算机,意味着相当数量的RAM。我想4GB应该足够用于这么小的数据集。

该软件包在Julia和Python中可用,但我不确定该模型是否可用。

Herehere您有使用GLMNET包的cox模型的示例。还有一个名为survival的包。

您的代码至少存在两个问题:

  • 这不是你想在R中做的事:data <- cbind(data, class)。它只是没有内存效率。如果您需要执行此类操作,请使用data.table package。它允许通过引用进行分配,查看:=运算符。
  • 如果您的所有数据均为数字,则无需使用model.matrix,只需使用data.matrix(X)
  • 如果您有分类变量,请仅使用model.matrix,然后将它们添加到X矩阵,可能使用data.table,使用?data.table::set或{一次一列{1}}运营商。

希望这可以帮助您调试代码。祝你好运!