带 Cox 回归的弹性网络

Elastic net with Cox regression

我正在尝试对具有 ~100k 特征的 120 个样本执行带 cox 回归的弹性网络。

我用 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。

一些提示:

a) 这是一个相当小的数据集,R 应该绰绰有余。您所需要的只是一台现代计算机,这意味着相当数量的 RAM。我想对于这么小的数据集,4GB 应该足够了。

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

Here and here 您有带有 GLMNET 包的 cox 模型示例。还有一个包叫 survival.

您的代码至少有两个问题:

  • 这不是你想在 R 中做的事情:data <- cbind(data, class)。只是内存效率不高。如果您需要执行此类操作,请使用 data.table package。它允许通过引用进行赋值,查看 := 运算符。
  • 如果您的所有数据都是数字,则不需要使用 model.matrix,只需使用 data.matrix(X)
  • 如果您有分类变量,请仅对它们使用 model.matrix,然后将它们添加到 X 矩阵,也许使用 data.table,一次使用 ?data.table::set:= 运算符。

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