Julia中adj_price[i, :] \ t是否返回一元线性回归系数?
Julia中
adj_price[i, :] \ t能否获取一元线性回归的梯度系数? 你的代码里adj_price[i, :] \ t不能得到你想要的回归梯度(斜率),问题出在两个核心点:
1. 自变量与因变量完全颠倒
你要拟合的是「以时间t为自变量,资产价格adj_price[i,:]为因变量」的线性回归模型(即price = a*t + b,其中a是你要的梯度),但adj_price[i, :] \ t的实际作用是求解以价格为自变量、时间为因变量的最小二乘解(即t = β*price),得到的系数和你的目标完全无关。
2. 未正确构造回归所需的设计矩阵(若包含截距项)
标准的一元线性回归需要包含截距项的设计矩阵(即每个样本对应[1, t]),否则拟合的是过原点的回归模型(price = a*t),这通常不符合金融时间序列分析的常规需求。
修正后的代码
包含截距项的标准线性回归(推荐)
这个版本拟合的是price = a*t + b,提取的系数a就是时间t对价格的梯度:
function fᵢ(adj_price::Matrix{Float64}) n_assets, n_days = size(adj_price) n_days > 1 || throw(ArgumentError("n_days must be greater than 1")) t = 1:n_days # 构造包含截距项的设计矩阵:每行是 [1, tᵢ] design_matrix = hcat(ones(n_days), t) aᵢ = zeros(n_assets) for i in 1:n_assets # 求解最小二乘系数,第二个元素是斜率a coeffs = design_matrix \ adj_price[i, :] aᵢ[i] = coeffs[2] end return aᵢ end
过原点的线性回归(无截距项)
如果你明确不需要截距项,只想拟合price = a*t,可以直接调整自变量和因变量的顺序:
function fᵢ(adj_price::Matrix{Float64}) n_assets, n_days = size(adj_price) n_days > 1 || throw(ArgumentError("n_days must be greater than 1")) t = 1:n_days aᵢ = zeros(n_assets) for i in 1:n_assets # 以t为自变量,price为因变量,求解过原点回归的斜率 aᵢ[i] = t \ adj_price[i, :] end return aᵢ end
内容的提问来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

