【问题标题】:Spatial Autoregressive Maximum Likelihood Estimation in JuliaJulia中的空间自回归最大似然估计
【发布时间】:2018-06-04 07:11:22
【问题描述】:

我正在尝试使用 Jim LeSage 的 MATLAB 代码估计 Julia 中的空间自回归 (SAR) 模型。我首先必须最大化关于 rho 参数的集中对数似然函数。

我在 Julia 中编写了以下似然函数:

function like_sar(rho,epe0,eped,epe0d,n,W)

# PURPOSE: evaluates concentrated log-likelihood for the
#  spatial autoregressive model using sparse matrix algorithms
# ---------------------------------------------------
#  USAGE:llike = f_sar(rho,epe0,eped,epe0d,n)
#  where: rho  = spatial autoregressive parameter      
#         epe0   = see below
#         eped   = see below
#         eoe0d  = see below
#         n      = # of obs
#          b0 = AI*xs'*ys;
#          bd = AI*xs'*Wys;
#          e0 = ys - xs*b0;
#          ed = Wys - xs*bd;
#          epe0 = e0'*e0;
#          eped = ed'*ed;
#          epe0d = ed'*e0;

z = epe0 - 2*rho*epe0d + rho*rho*eped

A = speye(n) - rho*W

sar_like = (n/2)*log(z) - log(det(A))

return sar_like, rho

end

我生成数据并将所有参数传递给函数,它给了我似然函数的值和 rho 参数值。

但是,当我尝试使用 Optim 包来最大化这种可能性时,我收到以下错误:

optimize(like_sar,[rho,epe0,eped,epe0d,n,W])
ERROR: MethodError: no method matching zero(::Type{Any})
Closest candidates are:
  zero(::Type{Base.LibGit2.GitHash}) at libgit2\oid.jl:106
  zero(::Type{Base.Pkg.Resolve.VersionWeights.VWPreBuildItem}) at pkg\resolve\versionweight.jl:82
  zero(::Type{Base.Pkg.Resolve.VersionWeights.VWPreBuild}) at pkg\resolve\versionweight.jl:124
  ...
Stacktrace:
 [1] promote_objtype(::Optim.NelderMead{Optim.AffineSimplexer,Optim.AdaptiveParameters}, ::Array{Any,1}, ::Function) at C:\Users\dolacomb\.julia\v0.6\Optim\src\multivariate/optimize\interface.jl:39
 [2] #optimize#151(::Array{Any,1}, ::Function, ::Tuple{#like_sar}, ::Array{Any,1}) at C:\Users\dolacomb\.julia\v0.6\Optim\src\multivariate/optimize\interface.jl:57
 [3] #optimize#148(::Array{Any,1}, ::Function, ::Function, ::Array{Any,1}) at C:\Users\dolacomb\.julia\v0.6\Optim\src\multivariate/optimize\interface.jl:52
 [4] optimize(::Function, ::Array{Any,1}) at C:\Users\dolacomb\.julia\v0.6\Optim\src\multivariate/optimize\interface.jl:52
 [5] eval(::Module, ::Any) at .\boot.jl:235

我不确定我在这里做错了什么,因为这似乎是对 rho 的一个相当简单的单变量优化,但我对使用 Julia 进行编码相当陌生。

任何帮助将不胜感激。我计划将所有 LeSage 代码转换为 Julia,并且已经完成了大部分贝叶斯例程(恕我直言,这更容易)和支持功能,例如记录行列式计算、可信区间、权重矩阵创建等。

【问题讨论】:

    标签: julia spatial


    【解决方案1】:

    如果我正确理解您的情况,您需要进行单变量优化,在这种情况下最好使用https://github.com/JuliaNLSolvers/Optim.jl/blob/master/docs/src/user/minimization.md#minimizing-a-univariate-function-on-a-bounded-interval(如果您知道初始间隔 - 但我猜在您的问题中应该是[-1,1])。

    然后你应该向求解器传递一个接受一个参数并返回一个值的函数。在您的情况下,一个简单的匿名函数会执行此操作,从而导致以下调用:

    optimize(rho -> -like_sar(rho,epe0,eped,epe0d,n,W)[1], -1, 1)
    

    当然,您必须在调用的封闭范围中定义 epe0epedepe0dnW 才能使其正常工作。

    在定义中,我在like_sar 之前添加了减号-,因为optimize 最小化了一个函数。

    【讨论】:

    • 亲爱的 Bogumil, 非常感谢您的回答!它完美地工作!我所做的唯一更改是删除“like_sar”之前的 (-) 符号,因为我确实想找到最小值。再次感谢您回答我的问题。这应该使我能够在夏末之前提供 Julia 中几乎所有的空间计量经济学模型。
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2019-11-25
    相关资源
    最近更新 更多