/* syntax: semip_bsample yvar xvar ndiff controls */ program semip_bsample, eclass version 12 preserve syntax varlist(fv) [, ndiff(real 1)] token `varlist' local yvar="`1'" local xvar="`2'" local k=1 while "``k''"!="" { local ++k } local --k local i=3 local controls="" local factors="" local ifactors="" while `i'<=`k' { if substr("``i''",1,2)=="i." { local factors="`factors' "+substr("``i''",3,.) local ifactors="`ifactors' "+"``i''" local ++i } else { local controls="`controls' "+"``i''" local ++i } } keep `yvar' `xvar' `controls' `factors' capture drop ptwhat dtwhat xgrid pred capture matrix drop _all quietly sum `xvar' global xmin=`r(min)' global xmax=`r(max)' * set number of gridpoints global gsize=100 * set step sizes and gridpoints global st1=($xmax-$xmin)/($gsize-1) bsample sort `xvar' local dallvars="" foreach var of varlist `yvar' `controls' { if `ndiff'==1 { gen d`var'=.7071*`var'[_n]-.7071*`var'[_n-1] } else if `ndiff'==2 { gen d`var'=.8090*`var'[_n]-.5*`var'[_n-1]-.3090*`var'[_n-2] } else { gen d`var'=.8582*`var'[_n]-.3832*`var'[_n-1]-.2809*`var'[_n-2]-.1942*`var'[_n-3] } local dallvars="`dallvars' "+"d`var'" } quietly reg `dallvars' `ifactors', nocon foreach var of varlist `yvar' `controls' { replace d`var'=`var' } predict ptwhat, xb gen dtwhat=`yvar'-ptwhat gen xgrid=. replace xgrid=$xmin+(_n-1)*$st1 in 1/$gsize lpoly dtwhat `xvar', nograph ci generate(pred) at(xgrid) mkmat pred xgrid, nomiss mat comb=pred\xgrid matrix names=J(200,1,.) foreach i of numlist 1/200 { matrix names[`i',1]=comb[`i',1] } mat out=names' ereturn post out ereturn local cmd="bootstrap" restore end