2016-04-27 40 views
0

我的問題是基於以下情況:
我有一個20行和> 100,000列的矩陣。我想應用glm函數併爲每列提取似然比統計量。到目前爲止,我試圖以這種方式實施。例如:R加速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在這裏沒有幫助。

如果有人能給我這方面的建議,我會很高興。非常感謝您提前!

回答

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次的開銷。儘量避免多次運行高級功能。

要努力方面跑得更快,列出升序:

  • 敷在並行循環(2X-4X倍加速)
  • 弄明白來執行計算,如R矩陣乘法( 〜50X)
  • 與RCPP(實施〜100倍)

無解的將帶你不到4分鐘達到