/* Stata 18 */ clear set obs 1000 gen keep = 1 set seed 123456 postfile results b1 p reject r2 mss rho_x1e rho_x1z1 fsf p_fsf using ivr2sim , replace forvalues i = 1/2000 { qui capture drop c1 z1 y e2 e x1 e1 gen c1 = invnormal(uniform()) gen z1 = invnormal(uniform()) + 1.5*c1 gen e1 = invnormal(uniform()) gen e2 = invnormal(uniform()) gen x1 = invnormal(uniform()) + c1 + .5*e1 gen e = e1 +e2 qui corr x1 e scalar rho_x1e = r(rho) qui corr x1 z1 scalar rho_x1z1 = r(rho) qui reg x1 z1 scalar fsf = e(F) scalar p_fsf = Ftail(1,98,fsf) qui gen y = 1 - .1*x1 + e qui ivregress 2sls y (x1=z1) qui test x1 = -.1 local reject = (r(p) < .05) post results (_b[x1]) ( r(p)) (`reject') (e(r2)) (e(mss)) /// (rho_x1e) (rho_x1z1) (fsf) (p_fsf) } postclose results clear use ivr2sim summarize count if mss < 0