簡體   English   中英

加快R中的Apply功能中的glm

[英]Speed up glm in apply function in R

我的問題基於以下情況:
我有一個包含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在這里沒有幫助。

如果有人可以給我建議,我將很高興。 提前非常感謝您!

我進行了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個cols。 所以我看不到問題。 但是,瓶頸是調用gbm()函數100,000次的開銷。 盡量避免多次運行高級功能。

為了更快地運行,在工作量方面列為升序:

  • 將其包裝在並行循環中(加速的2到4倍)
  • 找出以R(〜50x)為矩陣乘法執行計算
  • 用Rcpp實現(〜100x)

所有解決方案都不會花費您不到4分鍾的時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM