Actual StataMP numerical output. Log header and machine paths omitted. . * BEGIN conventional . regress score str el Source | SS df MS Number of obs = 420 -------------+---------------------------------- F(2, 417) = 155.01 Model | 64864.3011 2 32432.1506 Prob > F = 0.0000 Residual | 87245.2925 417 209.221325 R-squared = 0.4264 -------------+---------------------------------- Adj R-squared = 0.4237 Total | 152109.594 419 363.030056 Root MSE = 14.464 ------------------------------------------------------------------------------ score | Coefficient Std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- str | -1.101296 .3802783 -2.90 0.004 -1.848797 -.3537945 el | -.6497768 .0393425 -16.52 0.000 -.7271112 -.5724423 _cons | 686.0322 7.411312 92.57 0.000 671.4641 700.6004 ------------------------------------------------------------------------------ . * END conventional . record conventional str . * BEGIN robust . regress score str el, vce(robust) Linear regression Number of obs = 420 F(2, 417) = 223.82 Prob > F = 0.0000 R-squared = 0.4264 Root MSE = 14.464 ------------------------------------------------------------------------------ | Robust score | Coefficient std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- str | -1.101296 .4328472 -2.54 0.011 -1.95213 -.2504616 el | -.6497768 .0310318 -20.94 0.000 -.710775 -.5887786 _cons | 686.0322 8.728224 78.60 0.000 668.8754 703.189 ------------------------------------------------------------------------------ . * END robust . record robust str . * BEGIN policy . lincom -2*str ( 1) - 2*str = 0 ------------------------------------------------------------------------------ score | Coefficient Std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- (1) | 2.202592 .8656943 2.54 0.011 .5009232 3.90426 ------------------------------------------------------------------------------ . * END policy . * BEGIN practical_null . test str=-1 ( 1) str = -1 F( 1, 417) = 0.05 Prob > F = 0.8151 . * END practical_null . . postclose results . use "output/meeting_04_estimates.dta", clear . export delimited using "output/meeting_04_estimates.csv", replace (file output/meeting_04_estimates.csv not found) file output/meeting_04_estimates.csv saved . display "ECO603_MEETING_04_COMPLETE" ECO603_MEETING_04_COMPLETE Actual StataMP numerical output. Log header and machine paths omitted. . * BEGIN short . regress y x, vce(robust) Linear regression Number of obs = 4,000 F(1, 3998) = 11775.50 Prob > F = 0.0000 R-squared = 0.7514 Root MSE = 1.2294 ------------------------------------------------------------------------------ | Robust y | Coefficient std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- x | 1.516317 .0139733 108.51 0.000 1.488921 1.543712 _cons | .9947365 .0194616 51.11 0.000 .9565808 1.032892 ------------------------------------------------------------------------------ . * END short . record biased x . * BEGIN controlled . regress y x ability, vce(robust) Linear regression Number of obs = 4,000 F(2, 3997) = 10761.78 Prob > F = 0.0000 R-squared = 0.8390 Root MSE = .98934 ------------------------------------------------------------------------------ | Robust y | Coefficient std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- x | .9976925 .0159362 62.61 0.000 .9664487 1.028936 ability | 1.031297 .0224454 45.95 0.000 .9872913 1.075302 _cons | .9881499 .0156569 63.11 0.000 .9574537 1.018846 ------------------------------------------------------------------------------ . * END controlled . record controlled x . generate double clean_y=1+x+rnormal() . generate double noisy_x=x+sqrt(2)*rnormal() . * BEGIN measurement . regress clean_y noisy_x, vce(robust) Linear regression Number of obs = 4,000 F(1, 3998) = 2103.91 Prob > F = 0.0000 R-squared = 0.3458 Root MSE = 1.4013 ------------------------------------------------------------------------------ | Robust clean_y | Coefficient std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- noisy_x | .5177554 .0112879 45.87 0.000 .4956249 .5398859 _cons | 1.045476 .0221565 47.19 0.000 1.002037 1.088915 ------------------------------------------------------------------------------ . * END measurement . record measurement noisy_x . preserve . capture program drop mcdraw . program define mcdraw, rclass 1. syntax, N(integer) 2. clear 3. set obs `n' 4. generate double a=rnormal() 5. generate double x=a+rnormal() 6. generate double y=1+x+a+rnormal() 7. quietly regress y x 8. return scalar short=_b[x] 9. quietly regress y x a 10. return scalar adjusted=_b[x] 11. end . simulate b_short=r(short) b_adjusted=r(adjusted), reps(300) seed(6030610) nodots: mcdraw, n(100) Command: mcdraw, n(100) b_short: r(short) b_adjusted: r(adjusted) . generate n=100 . tempfile small . save `small' file /var/folders/77/1vjhzbsn76q82b04p34nzxjm0000gn/T//St62962.000002 saved as .dta format . simulate b_short=r(short) b_adjusted=r(adjusted), reps(300) seed(6030611) nodots: mcdraw, n(1000) Command: mcdraw, n(1000) b_short: r(short) b_adjusted: r(adjusted) . generate n=1000 . append using `small' . export delimited using "output/meeting_06_simulation.csv", replace (file output/meeting_06_simulation.csv not found) file output/meeting_06_simulation.csv saved . restore . . postclose results . use "output/meeting_06_estimates.dta", clear . export delimited using "output/meeting_06_estimates.csv", replace (file output/meeting_06_estimates.csv not found) file output/meeting_06_estimates.csv saved . display "ECO603_MEETING_06_COMPLETE" ECO603_MEETING_06_COMPLETE Actual StataMP numerical output; machine-specific log header omitted. . * BEGIN ols . regress score str el Source | SS df MS Number of obs = 420 -------------+---------------------------------- F(2, 417) = 155.01 Model | 64864.3011 2 32432.1506 Prob > F = 0.0000 Residual | 87245.2925 417 209.221325 R-squared = 0.4264 -------------+---------------------------------- Adj R-squared = 0.4237 Total | 152109.594 419 363.030056 Root MSE = 14.464 ------------------------------------------------------------------------------ score | Coefficient Std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- str | -1.101296 .3802783 -2.90 0.004 -1.848797 -.3537945 el | -.6497768 .0393425 -16.52 0.000 -.7271112 -.5724423 _cons | 686.0322 7.411312 92.57 0.000 671.4641 700.6004 ------------------------------------------------------------------------------ . * END ols . predict double residual, residuals . predict double fitted, xb . generate double residual_sq=residual^2 . * BEGIN bp . estat hettest str el, iid Breusch–Pagan/Cook–Weisberg test for heteroskedasticity Assumption: i.i.d. error terms Variables: str el H0: Constant variance chi2(2) = 29.50 Prob > chi2 = 0.0000 . * END bp . scalar bp_stat=r(chi2) . scalar bp_p=r(p) . * BEGIN white . estat imtest, white White's test H0: Homoskedasticity Ha: Unrestricted heteroskedasticity chi2(5) = 42.46 Prob > chi2 = 0.0000 Cameron & Trivedi's decomposition of IM-test -------------------------------------------------- Source | chi2 df p ---------------------+---------------------------- Heteroskedasticity | 42.46 5 0.0000 Skewness | 6.23 2 0.0443 Kurtosis | 0.01 1 0.9157 ---------------------+---------------------------- Total | 48.70 8 0.0000 -------------------------------------------------- . * END white . * Installed StataMP returns White's result in r(chi2), r(df), r(p). . scalar white_stat=r(chi2) . scalar white_p=r(p) . generate double staffing_sq=str^2 . generate double language_sq=el^2 . generate double staffing_language=str*el . quietly regress residual_sq str el . assert abs(e(N)*e(r2)-bp_stat)<1e-7 . quietly regress residual_sq str el staffing_sq language_sq staffing_language . assert abs(e(N)*e(r2)-white_stat)<1e-5 . * BEGIN robust . regress score str el, vce(robust) Linear regression Number of obs = 420 F(2, 417) = 223.82 Prob > F = 0.0000 R-squared = 0.4264 Root MSE = 14.464 ------------------------------------------------------------------------------ | Robust score | Coefficient std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- str | -1.101296 .4328472 -2.54 0.011 -1.95213 -.2504616 el | -.6497768 .0310318 -20.94 0.000 -.710775 -.5887786 _cons | 686.0322 8.728224 78.60 0.000 668.8754 703.189 ------------------------------------------------------------------------------ . * END robust . scalar ols_b=_b[str] . scalar ols_se=_se[str] . * Candidate variance model: Var(u|X,enrol)=sigma^2/enrol. . * This is a substantive hypothesis for district averages, not a fact established . * by enrolment or by rejection of a homoskedasticity test. Use robust inference. . * BEGIN wls . regress score str el [aw=enrol], vce(robust) (sum of wgt is 1,104,093) Linear regression Number of obs = 420 F(2, 417) = 162.94 Prob > F = 0.0000 R-squared = 0.5408 Root MSE = 12.105 ------------------------------------------------------------------------------ | Robust score | Coefficient std. err. t P>|t| [95% conf. interval] -------------+---------------------------------------------------------------- str | -1.32611 .6605944 -2.01 0.045 -2.62462 -.0276004 el | -.6390283 .0408085 -15.66 0.000 -.7192442 -.5588124 _cons | 693.1913 13.26319 52.26 0.000 667.1203 719.2624 ------------------------------------------------------------------------------ . * END wls . scalar wls_b=_b[str] . scalar wls_se=_se[str] . generate double root_n=sqrt(enrol) . generate double score_star=root_n*score . generate double staffing_star=root_n*str . generate double language_star=root_n*el . * BEGIN transformed . regress score_star staffing_star language_star root_n, noconstant vce(robust) Linear regression Number of obs = 420 F(3, 417) > 99999.00 Prob > F = 0.0000 R-squared = 0.9997 Root MSE = 620.63 ------------------------------------------------------------------------------- | Robust score_star | Coefficient std. err. t P>|t| [95% conf. interval] --------------+---------------------------------------------------------------- staffing_star | -1.32611 .6605944 -2.01 0.045 -2.62462 -.0276004 language_star | -.6390283 .0408085 -15.66 0.000 -.7192442 -.5588124 root_n | 693.1913 13.26319 52.26 0.000 667.1203 719.2624 ------------------------------------------------------------------------------- . * END transformed . assert abs(_b[staffing_star]-wls_b)<1e-8 . export delimited score str el enrol residual residual_sq fitted /// > using "output/variance_plot.csv", replace (file output/variance_plot.csv not found) file output/variance_plot.csv saved . clear . set obs 1 Number of observations (_N) was 0, now 1. . generate double bp=bp_stat . generate double bp_pvalue=bp_p . generate double white=white_stat . generate double white_pvalue=white_p . generate double ols=ols_b . generate double ols_robust_se=ols_se . generate double wls=wls_b . generate double wls_robust_se=wls_se . export delimited using "output/variance_results.csv", replace (file output/variance_results.csv not found) file output/variance_results.csv saved . display "ECO603_VARIANCE_COMPLETE" ECO603_VARIANCE_COMPLETE