微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ox 中的有序 Probit 模型

如何解决Ox 中的有序 Probit 模型

我正在学习 Ox,因为它在涉及与我的工作相关的复杂计量经济学模型时非常灵活。但是我正在为我的有序概率模型而苦苦挣扎。对于简单的probit模型(阶数=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,0.35)~ ranbinomial(ct,2,0.45)~ranbinomial(ct,8,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,TRUE);

    print("\n",MaxConvergenceMsg(ir)," using numerical derivatives","\n Function value = ",dfunc * rows(g_mY),"; parameters:",vp);
    
}

效果很好,收敛性强,vp ~ vp0。

现在假设我有一个大于 2 的顺序(具有 3 个或更多类别的因变量)。你如何编码这个有序的概率?

非常感谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。