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.

99 lines
2.2 KiB
Plaintext

*! Version 1.0.0 (11/22/00), G. R. Frechette (STB-59: sg158; STB-61: sg158.1)
program define reoprob, eclass
version 6.0
if replay() {
if "`e(cmd)'" ~= "reoprob" {
error 301
}
Replay `0'
}
else Estimate `0'
end
program define Estimate, eclass
syntax varlist [if] [in] [, I(varname) Quadrat(int 12) /*
*/ Level(passthru) *]
tempvar touse x w
marksample touse
markout `touse' `i'
tokenize `varlist'
local lhs "`1'"
macro shift 1
local rhs "`*'"
/* Get points and weights for Gauss-Hermite quadrature. */
ghquadm `quadrat' `x' `w'
/* Set up macros for ml function. */
global S_i "`i'"
global S_x "`x'"
global S_w "`w'"
global S_quad "`quadrat'"
global S_rhs "`rhs'"
global S_lhs "`lhs'"
/* get starting values */
tempname b0 s0
quietly oprobit `lhs' `rhs' if `touse'
mat `b0' = e(b)
mat `b0' = [`b0', 0.5]
quietly oprobit `lhs' if `touse'
mat `s0' = e(b)
mat `s0' = [`s0', 0.5]
/* number of categories */
quietly tab1 $S_lhs if `touse'
global S_n = _result(2)
/* create our version of `lhs' that runs from 0, ..., n-1 where
n is the number of categories */
tempvar dv
rename $S_lhs `dv'
quietly egen $S_lhs = group( `dv' ) if `touse'
quietly replace $_lhs = $_lhs-1
/* estimation equations */
local meqe "($S_lhs=`rhs', nocons)"
local start "(_cut1: $S_lhs=)"
local i = 1
while ( `i' < $S_n ) {
local meqe "`meqe' /_cut`i'"
local i = `i' + 1
}
local i = 2
while ( `i' < $S_n ) {
local start "`start' /_cut`i'"
local i = `i' + 1
}
local meqe "`meqe' /rho"
local start "`start' /rho"
/* Sort data. */
sort $S_i
/* optimization */
di in green _n "Fitting constant-only model:"
ml model d1 reopc_ll `start' if `touse', /*
*/ init(`s0', copy) maximize /*
*/ search(off) /*
*/ `options'
di in green _n "Fitting full model:"
ml model d1 reop_ll `meqe' if `touse', /*
*/ continue init(`b0', copy) maximize /*
*/ search(off) /*
*/ `options' /*
*/ title("Random Effects Ordered Probit")
estimate local cmd "reoprob"
Replay, `level'
end
program define Replay
syntax [, Level(int $S_level)]
ml display, level(`level')
end