Я пытаюсь оценить пространственную авторегрессионную (SAR) модель в Юлии, используя код MATLAB Джима ЛеСажа.Сначала я должен максимизировать концентрированную логарифмическую функцию правдоподобия по отношению к параметру rho.
Я написал следующую правдоподобную функцию в Юлии:
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 и уже выполнил большинство байесовских подпрограмм (которые намного проще, IMHO) и вспомогательных функций, например, вычислений лог-детерминанта, достоверных интервалов, создания матрицы весов и т. Д.