R语言中是否存在更快的滚动窗口回归工具包?
滚动线性回归的性能优化与相关R包疑问
这个问题在金融领域计算因子滚动暴露的场景中经常被提及,但始终没有明确答案。目前不少R包看似支持滚动回归,但本质只是语法糖,并未针对线性回归的特殊场景做性能优化。以下是测试代码示例:
################################################################ ## neither runner nor roll.reg speeds up sequential regressions. ################################################################ N <- 100 set.seed(0) x <- cumsum(rnorm(N)) y <- 3 * x + rnorm(N) y[N/2] <- NA df <- data.frame(y, x) ################################################################ ## naive slope <- rep(NA, 40) norunner <- function() { for (j in 2:nrow(df)) slope[j] <- coefficients(lm(y ~ x, data = df[1:j,]))[2] slope } library(runner) withrunner <- function() { slope <- as.numeric( runner( df, function(x) { coefficients(lm(y ~ x, data = x))[2] } ) ) slope } library(fDMA) withroller <- function() { with(df, roll.reg( y=y, as.data.frame(x=x), window=nrow(df))$coeff.[,2] ) } ################################################################ R <- 100 ## repeat for timing purposes print( system.time( lapply( 1:R, function(i) norunner() ) ) ) print( system.time( lapply(1:R, function(i) withrunner() ) ) ) print(system.time( lapply( 1:R, function(i) withroller() ) ) )
在我的硬件上,三个方法的运行耗时分别约为2.2秒、2.2秒和4.3秒。
针对相关R包,有以下疑问:
- 曾在CRAN上的rollRegres包现已移除,它是否真的比现有方法更快?被移除的原因是什么?目前还有用户在使用吗?
- 线性回归具备可滚动计算的特性,比如Gentleman提出的更新算法AS 274(通过给观测值赋予-1权重实现删除),CRAN上是否有基于此类算法的R包?
内容的提问来源于stack exchange,提问作者ivo Welch
相关产品推荐
相关产品推荐

