********************************************************* * Program for numerical tail integration using stratified MC * antithetical * Henrik Støvring, Dec 2001 ********************************************************* program define imc_tail version 7.0 syntax varlist(min = 1 max = 1) [if] [in], /* */ fcnname(string) /* */ ain(real) gparm(passthru) /* */ transf(string) tokenize `varlist' local MC "`1'" qui{ tempfile orgdat save `orgdat' use $utaidat, clear tempvar a b gen double `b' = 0 if "`transf'" == "iexp_xtr" { gen double `a' = exp(- `ain') } if "`transf'" == "iinv_xtr" { gen double `a' = 1 / `ain' } tempvar x_eval x_eval2 delta MCtmp1 MCtmp2 gen double `MCtmp1' = 0 gen double `MCtmp2' = 0 gen double `delta' = (`b' - `a') / _N gen double `x_eval' = sum(`delta') + `delta' * (_unifv - 1) + `a' gen double `x_eval2' = sum(`delta') + `delta' * (- _unifv) + `a' `transf' `x_eval' `MCtmp1' , fcnname("`fcnname'") /* */ `gparm' `transf' `x_eval2' `MCtmp2' , fcnname("`fcnname'") /* */ `gparm' tempname MCtint1 MCtint su `MCtmp1', meanonly scalar `MCtint1' = r(sum) * `delta' su `MCtmp2', meanonly scalar `MCtint' = (r(sum) * `delta' + `MCtint1') / 2 use `orgdat', clear replace `MC' = `MCtint' `if' `in' } end