Пространственное авторегрессионное максимальное правдоподобие в Юлии: несколько параметров - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий код, который оценивает функцию правдоподобия для пространственной авторегрессионной модели в Юлии, например так:

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 нене разрешать кортежи.

Я хотел бы попытаться максимизировать эту функцию правдоподобия, чтобы она могла возвращать числовую матрицу Гессиана (используя параметры Optim), чтобы я мог вычислять t-статистику для параметров.

Если есть какой-либо более простой способ получить числовой гессиан для такой функции, я бы использовал это, но кажется, что пакеты, такие как FowardDiff, принимают только один вход.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 14 июня 2018

Не уверен на 100%, что я правильно понимаю, как работает ваша функция, но мне кажется, что вы используете вероятность для оценки вектора коэффициента бета с фиксированными другими входными переменными.Способ сделать это состоит в том, чтобы изменить функцию следующим образом:

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())

Если вам нужно оптимизировать больше, чем ваши бета-параметры (в общих моделях авторегрессии, которые я использовал, часто параметр автокорреляции оценивался совместнос другими коэффициентами), вы могли бы сделать это, поместив его в бета-вектор и распаковав его внутри функций следующим образом:функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...