Statalist The Stata Listserver

[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: instrumental variables with ML

From   Valérie Orozco <>
Subject   st: instrumental variables with ML
Date   Thu, 27 Jul 2006 18:15:48 +0200

I'm estimating a model (AIDS) with ML (thanks to the program from Poi concerning the QUAIDS).
I would like to add instrumental variables, but it doesn't work. On the other hand, my model without the instrumental variables works.
I'm not an expert in ML command in stata. If someone have an idea. I am quite sure that it is easy but I don't succed writing the right code. I hope someone can help me.

I 've tried this :

In my general program :

ml model d0 lnl_aids_v_iv (Y1 = X p1 T TR) (Y2 = X p1 p2 T TR) (Y3 = X p1 p2 p3 T TR) (X = Z W)
with Z and W the instruments for the variable X that I suspect to be endogeneous.
(The first 3 equations are the same except that some constraints impose not to estimate some coefficients)

The ado file "lnl_aids_v_iv" contains the likelihood function of the general equation.

program define lnl_aids_v_iv
version 9.1
args todo b lnf
tempvar theta2
mleval `theta2' = `b', eq(4) /*I've tried this to catch the instrumentation*/
tempname alpha beta gamma t tr
local nm1 = $NEQN-1 /*in this case $NEQN (nb of general equations) = 4 but I have only Y1, Y2, Y3 to estimate due to my constraints.) */
/* Get the parameters out of b. */
quaids_params_iv `b' `alpha' `beta' `gamma' `t' `tr' /*an ado which Breaks up parameter vector into alpha, beta, gamma, t and tr. The constraints recover the coeff for all the 4 general models.*/

/* Now generate the error terms. */
forvalues i = 1/$NEQN {
tempvar lnl_eps`i' gen double `lnl_eps`i'' = Y`i' - `alpha'[1,`i'] - `beta'[1,`i']*(`theta2') - `t'[1,`i'] * T - `tr'[1,`i'] * TR /*I put "`theta2'" here to take into account the instrumentation*/ forvalues j = 1/$NEQN {
replace `lnl_eps`i'' = `lnl_eps`i'' - `gamma'[`i', `j']*p`j'
local allofem ""
forvalues i = 1/$NEQN {
local allofem "`allofem' `lnl_eps`i''"
/* Form sigma. */
matrix accum sigma = `allofem', noconstant
local nobs = r(N)
matrix sigma = sigma/`nobs'
/* Chop off last row & column since singular. */
matrix sigma = sigma[1..`nm1', 1..`nm1']
/* Finally, compute the likelihood function. */
scalar `lnf' = -1*`nobs'/2*(`nm1'*(1+ln(2*_pi)) + ln(det(sigma)))

After ml maximize, I have the error "could not calculate numerical derivatives flat or discontinuous region encountered". It seems the instrumentation is wrong wrong wrong.

Does someone have an idea???

Thanks to have read all this and to tell me if you have any suggestion.



Valérie Orozco
ESR INRA - BP52627 - 31326 Castanet Tolosan Cedex

* For searches and help try:

© Copyright 1996–2021 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index