我正在按照 GitHub Copilot 代码编写一个函数,该函数获取一个矩阵,并根据时间在矩阵的每一行上拟合单变量线性回归,我遇到了一个奇怪的过程:
function fᵢ(adj_price::Matrix{Float64})
n_assets, n_days = size(adj_price)
n_days > 1 || ArgumentError("") |> throw
t = 1:n_days
# Fit a linear regression on each row of the adjusted price \
# matrix against t and store the gradients in aᵢ Vector.
aᵢ = zeros(n_assets)
for i in 1:n_assets
aᵢ[i] = adj_price[i, :] \ t
end
return aᵢ
end
重点是将每个回归模型的梯度存储在一个 Vector 中,并将该 Vector 作为最终输出返回。因此,应该针对时间变量对矩阵的每一行进行回归,以获得其系数(梯度)。我的问题在于我们有什么adj_price[i, :] \ t
。这个小运算能达到系数吗?
是的,确实如此,查看文档很有用:
所以在你的基本线性回归中:
y = X * b
其中 y 是结果,X 是回归矩阵,b 是协变量向量,将方程两边乘以 X 的倒数即可得到
X\y=b
这就是线性回归的计算结果。
请注意,这与简单回归不同
可以使用 GLM 运行,因为
@formula
默认情况下宏包含截距项,因此您可以拟合y = a + Xb
反而。要复制这个,
\
你必须这样做手动将截距列包含在回归矩阵中。