我正在使用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))