*! Alfonso Miranda-Caso-Luengo (SJ4-1: st0057) *! FIML exogenous sitching Poisson *! version 2.0 June 26 2003 program define exspoisson, eclass version 6 if replay() { if "`e(cmd)'" != "exspoisson" { error 301 } else exspDisplay `0' } else exsEstimate `0' end program define exsEstimate, eclass syntax varlist [if] [in] , EDummy(varname) /* */ [Switch(varlist) Quadrature(integer 6) /* */ SIGMA0(real 1) *] /* Obtaining dependent variable and explanatory variables */ gettoken endgv exogv : varlist, parse("") /* Selecting sample */ marksample touse markout `touse' `varlist' /* defining some globals */ global S_quad "`quadrature'" global S_edum "`edummy'" /* Get points and weights for Gaussian-Hermite quadrature. */ tempvar x w qui gen double `x' = 0 qui gen double `w' = 0 ghquad `x' `w', n(`quadrature') local j = `quadrature' while `j' >0 { scalar x`j' = `x'[`j'] local j = `j' -1 } local j = `quadrature' while `j' >0 { scalar w`j' = `w'[`j'] local j = `j' - 1 } /* GETTING INITIAL VALUES */ di _skip(3) qui probit `edummy' `switch' if `touse' tempname b b1 b2 bi ch mat `b'=e(b) xcolnames `b', head(switch) di as txt "Getting Initial Values:" qui poisson `endgv' `exogv' if `touse' mat `b1' = e(b) mat `b2' = (`b1',`b') matrix `ch' = ln(`sigma0') matrix colnames `ch' = lnsigma:_cons matrix `bi' = (`b2',`ch') /* FITTING FULL MODEL */ di _skip(3) di in gr "Fitting Full model:" ml model d0 exspoisson_ll ("`endgv'": `endgv' = `exogv') /* */ (switch:`switch')(lnsigma:) /* */ if `touse', init(`bi', skip) max difficult search(off) `options' estimates local cmd "exspoisson" est local predict "exspoisson_p" est local quad "`quadrature'" /* Display Results */ exspDisplay end program define exspDisplay di _skip(12) di _n as txt /* */ "Exogenous-Switch Poisson Regression" di as text "(`e(quad)' quadrature points)" ml di, neq(2)plus _diparm lnsigma, exp pr label("sigma") di in gre in smcl "{hline 13}{c BT}{hline 64}" end exit