我正在学习 Ox,因为它在与我的工作相关的复杂计量经济学模型方面非常灵活。但我正在为我的有序概率模型而苦苦挣扎。对于一个简单的probit模型(order = 2),函数如下:
decl g_mX, g_mY;
fProbit(const vP, const adFunc, const avScore,
const amHessian)
{
decl prob = probn(g_mX * vP); // vP is column vector
adFunc[0] = double(
meanc(g_mY .* log(prob) + (1-g_mY) .* log(1-prob)));
return 1; // 1 indicates success
}
在“主要”部分,我模拟我的数据并调用集成在 Ox 包中的 BFGS 最大化器“最大化”:
main()
{
decl ct, mx, vbeta, veps;
decl vp, dfunc, ir;
println("Probit example 1, run on ", date());
ct = 546 ;
mx = ranbinomial(ct, 1, 1, 0.35)~ ranbinomial(ct, 2, 1, 0.45)~ranbinomial(ct,8, 1, 0.48) ;
veps = rann(ct, 1);
g_mX = 1~mx[][1:10]; // regressors: 1, Marital, Gender, Age, etc.
vp0 = <.7034119;-.0416732;-.2973156;-.1419538 ;-.4537812; -.3036446;-.1783031 ; .0619869; .0310086; .0011324; -.0310052 > ; // starting values
g_mY = (g_mX*vp0 + veps) .> 0 ; // dependent variable: 0,1 dummy
vp = <0 ;0 ;0;0 ;0;0;0 ;0;0;0; 0 >;
MaxControl(-1, 1); // print each iteration maximize
ir = MaxBFGS(fProbit, &vp, &dfunc, 0, TRUE);
print("\n", MaxConvergenceMsg(ir),
" using numerical derivatives",
"\n Function value = ", dfunc * rows(g_mY),
"; parameters:", vp);
}
效果很好,收敛性强,vp~vp0。
现在假设我有一个大于 2 的订单(具有 3 个或更多类别的因变量)。你如何编码这个有序的概率?
非常感谢