program define example3 version 2.1 * residual resampling regression bootstrap * assumes variables "Y" and "X" in "source.dta" * set more 1 drop _all set maxobs 2000 * If source.dta contains > 2,000 cases, set maxobs higher. quietly use source.dta quietly drop if Y==. | X==. quietly regress Y X capture predict Yhat capture predict e, resid quietly replace e=e/sqrt(1-((_result(3)+1)/_result(1))) * Previous two commands obtain full-sample regression * residuals, and "fatten" them, dividing by: * sqrt(1 - K/_N) * where K is # of model parameters and _N is sample size. macro define _coefX=_b[X] quietly save, replace capture erase bootdat3.log log using bootdat3.log log off set seed 1111 macro define _bsample 1 while %_bsample<1001 { quietly use source.dta, clear quietly generate ee=e[int(_N*uniform())+1] quietly generate YY=Yhat+ee quietly regress YY X * We resample residuals only, then generate bootstrap * Y values (called YY) by adding bootstrap residuals (ee) * to predicted values from the original-sample * regression (Yhat). Finally, regress these bootstrap * YY values on original-sample X. macro define _bSE=_b[X]/sqrt(_result(6)) * Stata version 3.0 or later: delete previous line log on display %_bsample display _b[_cons] display _b[X] display %_bSE display (_b[X]-%_coefX)/%_bSE * Version 3.0 or later: replace two previous lines with: * display _se[X] * display (_b[X]-%_coefX)/_se[X] display log off macro define _bsample=%_bsample+1 } log close drop _all infile bsample bcons bcoefX bSE stucoefX using bootdat3.log label variable bsample "bootstrap sample number" label variable bcons "sample Y-intercept, b0" label variable bcoefX "sample coefficient on X, b1" label variable bSE "sample standard error of b1" label variable stucoefX "studentized coefficient on X" label data "regression boot/residual resampling" save boot3.dta, replace end