如何解决以矩阵形式实施OLS 说明
我在从a quantitative economics course开始实施此练习时遇到问题。
这是我的代码:
N = 50
M = 20
a = 0.1
b = 0.2
c = 0.5
d = 1.0
σ = 0.1
estimates = zeros(M,5)
for i ∈ 1:M
x₁ = Vector{BigFloat}(randn(N))
x₂ = Vector{BigFloat}(randn(N))
w = Vector{BigFloat}(randn(N))
# Derive y vector (element wise operations)
y = a*x₁ .+ b.*(x₁.^2) .+ c.*x₂ .+ d .+ σ.*w
# Derive X matrix
X = [x₁ x₁ x₂ fill(d,(N,1)) w]
# Implementation of the formula β = inv(XᵀX)Xᵀy
estimates[i,:] = (X'*X)\X'*y
end
histogram(estimates,layout=5,labels=["a","b","c","d","σ"])
我得到一个SingularException(5)
错误,因为矩阵X'X
的行列式为0,没有逆。我的问题是,在此练习中我哪里出错了?我听说行列式可能为零的原因是浮点数不准确,因此我使BigFloats随机变量无效。我知道我犯的错误不是很复杂,但是我迷路了。谢谢!
解决方法
您的X
应该是
X = [x₁ x₁*x₁ x₂ fill(d,(N,1))]
说明
您似乎正在尝试测试OLS以估计模型的参数:
y = α₀ + α₁x₁ + α₁₁x₁² + α₂x₂ + ϵ
其中α₀
是模型的截距,α₁
,α₁₁
,α₂
是解释变量的参数,而ϵ
是随机误差具有期望值0
和方差σ²
。因此X
的结构必须符合您的情况。
两次输入α₁
引入了共线性并得到了错误。
您也不想“估计” ϵ
的参数,因为它表示随机性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。