Julia中的空间自回归最大似然:多参数

时间:2018-06-05 22:29:33

标签: 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

我正在尝试最大化此功能,但我不确定如何传递不同大小的函数输入,以便Optim.jl包接受它。我尝试过以下方法:

optimize(like_sar2,[betas;rho;sige;y;x;W],BFGS())

optimize(like_sar2,tuple(betas,rho,sige,y,x,W),BFGS())

在第一种情况下,由于尺寸不匹配,括号中的矩阵不符合,而在第二种情况下,Optim包不允许使用元组。

我想尝试最大化此似然函数,以便它可以返回数值Hessian矩阵(使用Optim选项),以便我可以计算参数的t统计量。

如果有更简单的方法来获得这样一个函数的数值Hessian,我会使用它,但似乎像FowardDiff这样的包只接受单个输入。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

不是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参数(在我经常使用的一般自回归模型中,自相关参数是与其他系数一起估算的),你可以通过将其与β矢量混合并在内部解包来实现像这样的功能:

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

关键是你最终会有一个输入向量传递给你的函数。