1

我正在尝试并行运行 R 来运行回归。我正在尝试使用降雪库(但对任何方法都持开放态度)。目前,我正在运行以下回归,这需要很长时间才能运行。有人可以告诉我如何做到这一点吗?

 sales_day_region_ctgry_lm <- lm(log(sales_out+1)~factor(region_out) 
             + date_vector_out + factor(date_vector_out) +
             factor(category_out) + mean_temp_out)

我已经开始了以下路径:

library(snowfall)
sfInit(parallel = TRUE, cpus=4, type="SOCK")

wrapper <- function() {
return(lm(log(sales_out+1)~factor(region_out) + date_vector_out +
               factor(date_vector_out) + factor(category_out) +   mean_temp_out))
}

output_lm <- sfLapply(*no idea what to do here*,wrapper)
sfStop()
summary(output_lm)

但是这种方法充满了错误。

谢谢!

4

2 回答 2

3

partools包通过其函数提供了一个简单的、现成的并行线性回归实现calm()。(“ca”前缀代表“块平均”。)

在你的情况下——抛开@Roland关于混合因子和连续预测变量的正确评论——解决方案应该很简单:

library(partools)
#library(parallel) ## loads as dependency

cls <- makeCluster(4) ## Or, however many cores you want/have.

sales_day_region_ctgry_calm <- 
  calm(
    cls, 
    "log(sales_out+1) ~ factor(region_out) + date_vector_out + 
     factor(date_vector_out) + factor(category_out) + mean_temp_out, 
     data=YOUR_DATA_HERE"
    )

请注意,模型调用在引号中进行了描述。进一步注意,如果以任何方式(例如按日期)订购数据,您可能需要先随机化您的数据。有关更多详细信息,请参阅partools 插图

于 2017-07-10T18:33:20.983 回答
2

由于您正在拟合一个大模型(而不是几个小模型),并且您正在使用线性回归,因此获得并行性的一种快速简便的方法是使用多线程 BLAS。像Microsoft R Open(以前称为 Revolution R Open)这样的东西应该可以解决问题。*

* 披露:我为 Microsoft/Revolution 工作。

于 2016-03-11T05:29:11.937 回答