1

I'm trying to perform a tobit regression with the lower limited (left-)censoring at 0, in Ox (Cramer, 1987, chap 11). I followed the Ox documentation, but I'm still struggling to make it work.

Here is my code:

#include <oxstd.h>
#include <oxprob.h>
#import <maximize>

decl g_mY, g_m;
decl g_iX;


Lik(const vp, const adFunc, const avScore, const amHessian){ 
//Mapping parameters
decl vBeta  = vp[0:(g_iX-1)];
decl vT     = vp[g_iX];
decl XB = (g_mX)*vBeta;

//Complete likelihood. 
decl vLike = new matrix [rows(g_mY)][1];
        for(decl i = 0; i < rows(g_mY); ++i){
       
        if(g_mY[i] == 0 )
        {
        vLike[i][] = max(1.e-20, tailn(XB[i][])) ; // probit part
        }
        
        else if(g_mY[i] > 0) 
        {
        vLike[i][] = fabs(vT) - 0.5 * (g_mY[i][] * fabs(vT) - XB[i][]).^2 ;
        }
    }
    adFunc[0] = double(meanc(log(vLike)));
return 1;
}

main()
{
    decl vp, dfunc, mh, ir, avScore;
    //Loading data
    decl mx = loadmat("p_intervfin.dta");
    // Depedent variable
    g_mY = mx[][0]; 
    // X, explaining y
    //with intercept
    decl mX =  ones(rows(g_mY), 1)~mx[][14:24]~mx[][28]~mx[][36]~mx[][38];
    g_mX = mX;
    //Number of parameters X
    g_iX = columns(g_mX);
    // Starting values.
    vp = zeros(g_iX,1); 
    vp[0] = 1;     //Intercept
    //Scale
    vp[g_iX] = 0.02;

    println("Starting values", vp)   ;
    println("Ordered Probit, run on ", date());

    MaxControl(-1, 1, 1); // print each iteration maximize

    ir = MaxBFGS(Lik, &vp, &dfunc, 0, TRUE);
            
    print("\n", MaxConvergenceMsg(ir),
        " using numerical derivatives",
        "\n Function value = ", dfunc * rows(g_mY),
        "; parameters:", vp);
    
    if (ir == MAX_CONV || ir == MAX_WEAK_CONV){
        if (Num2Derivative(Lik, vp, &mh))
        {
            decl mcovar = -invertgen (mh) / rows(g_mY);
            print("SE: ", sqrt(diagonal(mcovar)'));
        }
     }
        println("N:", rows(g_mY));
}

This function does not converge. Any idea on how to make this simpler and efficient?

Tande
  • 31
  • 5

0 Answers0