1

我正在学习 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 个或更多类别的因变量)。你如何编码这个有序的概率?

非常感谢

4

0 回答 0