Hi,

I'm working on a Monte Carlo simulation with an endogenous x, so that I need to do 2SLS in my loop. My purpose is to compare the value and graphs of OLS b1 with 2SLS b1, including the discussion about the effect of sample size on b1.
The pop linear reg is y = 0.5 + x + u. n = 40 or 200. x has correlation with u.
For IV z: x = a0 + 0.1 * z + v. The error terms u and v are distributed as standard normal random variables with a correlation coefficient 0.7 between them.

Right now I'm writing the OLS part and I don't know where I should put IV part and how to show the 0.7 between u and v into the loop. Can anyone help me? Thank you!

My code so far:

clear
set obs 5000

gen sample_id = _n

foreach n in 40 200 {
expand `n'
sort sample_id
gen X = uniform()
gen U = uniform()
gen Y = 0.5 + X + U

gen b1_n_`n' = .
gen se_heter_`n' = .

quietly forvalues i = 1/5000 {
quietly reg Y X if sample_id == `i', robust
replace b1_n_`n' = _b[X] if sample_id == `i'
replace se_heter_`n' = _se[X] if sample_id == `i'
}

duplicates drop sample_id, force

drop X U Y
}