Julia-Optim-每个观察值的渐变

时间:2018-08-29 15:53:22

标签: r julia gradient

我正在使用Julia开发一个即席多项式物流模型。 效果很好(尽管我相信可以改善的!)

我编写了似然函数,并使用Optim估计参数和标准误差。

我现在想得出一些可靠的估计。来自R,我将使用三明治包装。我在朱莉娅中没有找到任何同等学历。所以我可以开发一些特定的东西。

为此,我需要每个观察(行)的渐变值。我找不到使用Optim做到这一点的方法。 (当我使用gradient!(func, x)时,会得到各行的梯度总和,这不是我想要的)

有没有办法使用OnceDifferentiable或TwiceDifferentiable?

或者,是否有与R Sandwich等效的软件包可以从我的Google研究中获得?

我到目前为止开发的代码:

LLIK_MNL = function(init::Array{Float64})
    b = init
    u1 = X1*b
    u2 = X2*b
    u3 = X3*b
    umax = max.(u1, u2, u3)
    umin = min.(u1, u2, u3)
    ucensor = (umax + umin)/2

    exu1 = exp.(u1 - ucensor)
    exu2 = exp.(u2 - ucensor)
    exu3 = exp.(u3 - ucensor)
    sexu = exu1 .+ exu2 .+ exu3 

    Pr=(choice1 .* exu1 + choice2 .* exu2 + choice3 .* exu3) ./ sexu
    LL = sum(log.(Pr))
    return -LL
end

func = TwiceDifferentiable(var -> LLIK_MNL(var), beta_ini)
opt = optimize(func, beta_ini)

est_MNL = Optim.minimizer(opt)
numerical_hessian = hessian!(func, est_MNL)
var_cov_matrix = inv(numerical_hessian)
temp = diag(var_cov_matrix)
t_stats = est_MNL ./ sqrt.(temp)
pp = 2 * cdf.(Normal(), -abs.(t_stats))
hcat(est_MNL, sqrt.(temp), t_stats, round.(pp, 4))

0 个答案:

没有答案