我的问题是基于以下情况:
我有一个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在这里没有用。
如果有人能就此给我建议,我会很高兴的。非常感谢你提前!
答案 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次的开销。尽量避免多次运行高级功能。
为了更快地运行,列出了努力方面的升序:
所有解决方案都不会花费您不到4分钟的时间来实现