Julia中的空间自回归最大似然:多参数
我有以下代码,用于计算Julia中空间自回归模型的似然函数,如下所示:Julia中的空间自回归最大似然:多参数,julia,spatial,Julia,Spatial,我有以下代码,用于计算Julia中空间自回归模型的似然函数,如下所示: function like_sar2(betas,rho,sige,y,x,W) n = length(y) A = speye(n) - rho*W e = y-x*betas-rho*sparse(W)*y epe = e'*e tmp2 = 1/(2*sige) llike = -(n/2)*log(pi) - (n/2)*log(sige) + log(det(A)) - tmp2*epe end 我试图最大化此函
function like_sar2(betas,rho,sige,y,x,W)
n = length(y)
A = speye(n) - rho*W
e = y-x*betas-rho*sparse(W)*y
epe = e'*e
tmp2 = 1/(2*sige)
llike = -(n/2)*log(pi) - (n/2)*log(sige) + log(det(A)) - tmp2*epe
end
我试图最大化此函数,但我不确定如何传递不同大小的函数输入,以便Optim.jl包接受它。我尝试了以下方法:
optimize(like_sar2,[betas;rho;sige;y;x;W],BFGS())
及
在第一种情况下,括号中的矩阵由于维度不匹配而不一致,在第二种情况下,Optim包不允许元组
我想尝试最大化这个似然函数,这样它可以返回数值Hessian矩阵(使用Optim选项),这样我就可以计算参数的t统计量
如果有任何更简单的方法来获得这样一个函数的数值Hessian,我会使用它,但是像FowardDiff这样的包似乎只接受单个输入
任何帮助都将不胜感激 不是100%确定我正确理解了你的函数是如何工作的,但在我看来,你似乎在使用似然估计系数向量beta,而其他输入变量是固定的。实现这一点的方法是对功能进行如下修改:
using Optim
# Initialize some parameters
coeffs = rand(10)
rho = 0.1
ys = rand(10)
xs = rand(10,10)
Wmat = rand(10,10)
sige=0.5
# Construct likelihood with parameters fixed at pre-defined values
function like_sar2(β::Vector{Float64},ρ=rho,σε=sige,y=ys,x=xs,W=Wmat)
n = length(y)
A = speye(n) - ρ*W
ε = y-x*β-ρ*sparse(W)*y
epe = ε'*ε
tmp2 = 1/(2*σε)
llike = -(n/2)*log(π) - (n/2)*log(σε) + log(det(A)) - tmp2*epe
end
# Optimize, with starting value zero for all beta coefficients
optimize(like_sar2, zeros(10), NelderMead())
如果您需要优化的beta参数多于beta参数(在我经常使用的一般自回归模型中,自相关参数是与其他系数一起估计的),您可以通过使用beta向量将其插入并在函数中解包来实现,如下所示:
append!(coeffs,rho)
function like_sar3(coeffs::Vector{Float64},σε=sige,y=ys,x=xs,W=Wmat)
β = coeffs[1:10]; ρ = coeffs[11]
n = length(y)
A = speye(n) - ρ*W
ε = y-x*β-ρ*sparse(W)*y
epe = ε'*ε
tmp2 = 1/(2*σε)
llike = -(n/2)*log(π) - (n/2)*log(σε) + log(det(A)) - tmp2*epe
end
关键是你最终得到了一个输入向量来传递到你的函数中
append!(coeffs,rho)
function like_sar3(coeffs::Vector{Float64},σε=sige,y=ys,x=xs,W=Wmat)
β = coeffs[1:10]; ρ = coeffs[11]
n = length(y)
A = speye(n) - ρ*W
ε = y-x*β-ρ*sparse(W)*y
epe = ε'*ε
tmp2 = 1/(2*σε)
llike = -(n/2)*log(π) - (n/2)*log(σε) + log(det(A)) - tmp2*epe
end