# Maximum Likelihood Estimation with Analytic Gradients#

This GAUSS maximum likelihood example demonstrates the use of CMLMT to estimate parameters of a tobit modelwith analytic first derivatives.

## Key example features#

• Usages of data from the file cmlmttobit.dat (included with cmlmt).

• User defined likelihood function, `lpr` with four inputs:
• A parameter vector.

• Additional X and y data matrices, which are passed to `cmlmt`()` as optional arguments.

• The required ind input.

• The inclusion of analytic gradient computations, as specified in the `lpr` function.

### Code for estimation#

```/*
**   Maximum likelihood tobit model
*/
new;
library cmlmt;

// Tobit likelihood function with 4 inputs
//    i.      p      - The parameter vector
//    ii-iii. x and y - Extra data needed by the objective procedure
//    ii.     ind     - The indicator vector
proc lpr(p, x, y, ind);
local s2, b0, b, yh, u, res, g1, g2;

// Declare 'mm' to be a modelResults
// struct local to this procedure
struct modelResults mm;

// Parameters
b0 = p[1];
b = p[2:4];
s2 = p[5];

// Function computations
yh = b0 + x * b;
res = y - yh;
u = y[., 1] ./= 0;

// If first element of 'ind' is non-zero,
// compute function evaluation
if ind[1];
mm.function = u.*lnpdfmvn(res, s2) + (1 - u).*(ln(cdfnc(yh/sqrt(s2))));
endif;

// If second element of 'ind' is non-zero,
// compute function evaluation
if ind[2];
yh = yh/sqrt(s2);
g1 = ((res~x.*res)/s2) ~ ((res.*res/s2) - 1)/(2*s2);
g2 = ( -( ones(rows(x), 1) ~ x )/sqrt(s2) ) ~ (yh/(2*s2));
g2 = (pdfn(yh)./cdfnc(yh)).*g2;
mm.gradient = u.*g1 + (1 - u).*g2;
endif;

// Return modelResults struct
retp(mm);

endp;

// Set parameter starting values
p0 = {1, 1, 1, 1, 1};

// Separate X and y
y = z[., 1];
x = z[., 2:4];

// Declare 'out' to be a cmlmtResults
// struct to hold optimization results
struct cmlmtResults out;
out = cmlmtprt(cmlmt(&lpr, p0, x, y));
```

### Results#

The `cmlmtprt()` procedure prints three output tables:

• Estimation results.

• Correlation matrix of parameters.

• Wald confidence limits.

## Estimation results#

```===============================================================================
CMLMT Version 3.0.0
===============================================================================

return code =    0
normal convergence

Log-likelihood        -43.9860
Number of cases     100

Covariance of the parameters computed by the following method:
ML covariance matrix
Parameters    Estimates     Std. err.  Est./s.e.  Prob.    Gradient
---------------------------------------------------------------------
x[1,1]          1.4253        0.0376      37.925   0.0000      0.0000
x[2,1]          0.4976        0.0394      12.642   0.0000      0.0000
x[3,1]          0.4992        0.0458      10.889   0.0000      0.0000
x[4,1]          0.4141        0.0394      10.506   0.0000      0.0000
x[5,1]          0.1231        0.0196       6.284   0.0000      0.0000
```

The estimation results reports:

• That the model has converged normally with a return code of 0. Any return code other than 0, indicates an issue with convergence. The `cmlmt()` documentation provides details on how to interpret non-zero return codes.

• The log-likelihood value and number of cases.

• Parameter estimates, standard errors, t-statistics and associated p-values, and gradients.

## Parameter correlations#

```Correlation matrix of the parameters
1      0.067006788      -0.24418626       0.05530654      -0.10868104
0.067006788                1      -0.30495236     -0.061965451       0.05808199
-0.24418626      -0.30495236                1       -0.3165649      0.067030893
0.05530654     -0.061965451       -0.3165649                1       0.04466025
-0.10868104       0.05808199      0.067030893       0.04466025                1
```

## Confidence intervals#

```Wald Confidence Limits

0.95 confidence limits
Parameters    Estimates     Lower Limit   Upper Limit   Gradient
----------------------------------------------------------------------
x[1,1]    1.4253        1.3507        1.4999        0.0000
x[2,1]    0.4976        0.4195        0.5757        0.0000
x[3,1]    0.4992        0.4082        0.5903        0.0000
x[4,1]    0.4141        0.3358        0.4923        0.0000
x[5,1]    0.1231        0.0842        0.1620        0.0000
```