在R中应用函数加速glm

时间:2016-04-27 10:54:59

标签: r performance apply glm

我的问题是基于以下情况:
我有一个20行的矩阵> 100,000列。我想应用glm函数并提取每列的似然比统计量。到目前为止,我试图以这种方式实施。例如:

X <- gl(5, 4, length = 20); Y <- gl(4, 1, length = 20)  
X <- factor(X); Y <- factor(Y)  
matrix <- matrix(sample.int(15, size = 20*100000, replace = TRUE), nrow = 20, ncol = 100000)
apply(matrix, 2, function(x) glm(x ~ X+Y, poisson)$deviance)

有没有办法加快计算时间?我认为因为glm中使用的每个向量都不大(长度为20的向量),所以speedglm在这里没有用。

如果有人能就此给我建议,我会很高兴的。非常感谢你提前!

1 个答案:

答案 0 :(得分:4)

我进行了1000列的测试。它只花了2.4秒。

system.time(apply(matrix[,1:1000], 2, function(x) glm(x ~ X+Y, poisson)$deviance))

   user  system elapsed 
   2.40    0.00    2.46

我也尝试了50,000次,看起来非常线性。

因此,您只需等待4分钟即可计算出100,000列。所以我没有看到问题。然而,瓶颈是调用gbm()函数100,000次的开销。尽量避免多次运行高级功能。

为了更快地运行,列出了努力方面的升序:

  • 将其包裹在并行循环中(加速2倍-4倍)
  • 计算出在R(~50x)
  • 中进行矩阵乘法的计算
  • 使用Rcpp(~100x)实现

所有解决方案都不会花费您不到4分钟的时间来实现