如何在Julia中获得滚动窗口回归

问题描述 投票:0回答:1

说我有一个股票的价格,我想以给定窗口大小以滚动方式找到回归线的斜率。我如何在Julia中完成它?我希望它真的很快,因此不想使用for循环。

julia linear-regression rolling-computation
1个回答
0
投票

通常,您不必担心Julia中的for循环,因为它们没有R或Python for循环的开销。因此,您只需要担心渐近复杂性,而不必担心解释器开销所引入的潜在大常数因数。

但是,与单纯的O(n²)切片和回归方法相比,使用卷积可以更有效地(渐近地)完成此操作。 DSP.jl程序包提供卷积功能。以下是一个没有截距的示例(它计算滚动beta);可以通过修改公式来支持拦截。

using DSP

# Create some example x (signal) and y (stock prices)
# such that strength of signal goes up over time
const x = randn(100)
const y = (1:100) .* x .+ 100 .* randn(100)

# Create the rolling window
const window = Window.rect(20)

# Compute linear least squares estimate (X^T X)^-1 X^T Y
const xᵗx = conv(x .* x, window)[length(window):end-length(window)+1]
const xᵗy = conv(x .* y, window)[length(window):end-length(window)+1]
const lls = xᵗy ./ xᵗx  # desired beta

# Check result against naïve for loop
const βref = [dot(x[i:i+19], y[i:i+19]) / dot(x[i:i+19], x[i:i+19]) for i = 1:81]
@assert isapprox(βref, lls)
© www.soinside.com 2019 - 2024. All rights reserved.