You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
2.9 KiB
Plaintext
129 lines
2.9 KiB
Plaintext
*! version 1.0 Alfonso Miranda-Caso-Luengo, November 26 2002 (SJ4-1: st0057)
|
|
*! FIML endogenous-switch Poisson Regression
|
|
|
|
program define espoisson, eclass
|
|
version 6
|
|
if replay() {
|
|
if "`e(cmd)'" != "espoisson" { error 301 }
|
|
else espDisplay `0'
|
|
}
|
|
else espEstimate `0'
|
|
end
|
|
|
|
program define espEstimate, eclass
|
|
syntax varlist [if] [in] , EDummy(varname) /*
|
|
*/ [Switch(varlist) Quadrature(integer 6) /*
|
|
*/ SIGMA0(real 1) RHO0(real 0.1) /*
|
|
*/ EXS *]
|
|
|
|
/* 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'"
|
|
|
|
|
|
/* Diverting to exsp if EXS option active */
|
|
|
|
if "`exs'"!="" {
|
|
#delimit ;
|
|
exspoisson `endgv' `exogv' `if' `in', edummy(`edummy')
|
|
s(`switch') q(`quadrature')
|
|
sigma0(`sigma0') ;
|
|
#delimit cr
|
|
exit
|
|
}
|
|
|
|
/* 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 ch cr b0 bi
|
|
|
|
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 `cr' = `rho0'
|
|
matrix colnames `cr' = rho:_cons
|
|
matrix `b0' = (`b2',`ch',`cr')
|
|
|
|
ml model d0 espoisson_ll ("`endgv'": `endgv' = `exogv') /*
|
|
*/ (switch:`switch')(lnsigma:)(rho:) /*
|
|
*/ if `touse', init(`b0')
|
|
|
|
qui ml search rho: 14 -14
|
|
mat `cr' = ML_b[1,"rho:_cons"]
|
|
mat `bi' = (`b2',`ch',`cr')
|
|
|
|
/* FITTING FULL MODEL */
|
|
|
|
di _skip(3)
|
|
di in gr "Fitting Full model:"
|
|
|
|
ml model d0 espoisson_ll ("`endgv'": `endgv' = `exogv') /*
|
|
*/ (switch:`switch')(lnsigma:)(rho:)/*
|
|
*/ if `touse', init(`bi', skip) max `options' search(off)
|
|
|
|
estimates local cmd "espoisson"
|
|
estimates local edummy "`edummy'"
|
|
est local predict "espoisson_p"
|
|
est local quad "`quadrature'"
|
|
|
|
/* Display Results */
|
|
|
|
espDisplay
|
|
end
|
|
|
|
|
|
program define espDisplay
|
|
|
|
di _skip(12)
|
|
di _n as txt /*
|
|
*/ "Endogenous-Switch Poisson Regression"
|
|
di as text "(`e(quad)' quadrature points)"
|
|
|
|
ml di, neq(2)plus
|
|
_diparm lnsigma, exp pr label("sigma")
|
|
_diparm rho, f((exp(2*@)-1)/(exp(2*@)+1)) /*
|
|
*/ d(4*exp(2*@)/(exp(2*@)+1)^2) label("rho") pr
|
|
di in gre in smcl "{hline 13}{c BT}{hline 64}"
|
|
end
|
|
|
|
|
|
|
|
|