使R中的滚动窗口回归平行
|
我正在运行与以下代码非常相似的滚动回归:
library(PerformanceAnalytics)
library(quantmod)
data(managers)
FL <- as.formula(Next(HAM1)~HAM1+HAM2+HAM3+HAM4)
MyRegression <- function(df,FL) {
df <- as.data.frame(df)
model <- lm(FL,data=df[1:30,])
predict(model,newdata=df[31,])
}
system.time(Result <- rollapply(managers, 31, FUN=\"MyRegression\",FL,
by.column = FALSE, align = \"right\", na.pad = TRUE))
我有一些额外的处理器,所以我试图找到一种方法来并行化滚动窗口。如果这是非滚动回归,那么我可以使用apply系列函数轻松并行化它。
没有找到相关结果
已邀请:
2 个回复
殿虫
而不是
,这样就不会在处理公式等方面产生所有开销。 更新:所以当我说的很明显时,我的意思是说的很明显,但是看似难以实现! 经过一番摆弄之后,我想到了这个
第一步是认识到可以预先构建模型矩阵,因此我们将其转换回Zoo对象以用于
:
现在,我们需要一个函数使用employ1进行繁重的工作,而不必在每次迭代时都创建设计矩阵:
计时比较:
与原始版本相比,这提供了相当合理的改进。现在检查结果对象是否相同:
请享用!
柑恫祟
旧答案 您可以通过更新分解来减少运行时间。这将在每次迭代中产生一个成本,而不是n是您的窗口宽度。下面是比较两者的代码。在C ++中这样做可能会快得多,但是R中不包含LINPACK
和
,因此您必须编写一个程序包才能这样做。此外,我记得阅读过的文章,对于R更新,您可能会比LINPACK
和
更快地使用其他实现