You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:57:14