clear
set seed 12345
local n = 100
local R = 1000
matrix true_beta = (1, 0, -1, 3)'
matrix bias_beta = J(4, 1, .)
matrix sd_beta = J(4, 1, .)
matrix rmse_beta = J(4, 1, .)
forvalues i = 1/`R' {
// Generate data
set seed `i'
matrix x1 = rnormal(`n', 0, 1)
matrix x2 = runiform(`n', -1, 1)
matrix x3 = rnormal(`n', 0, sqrt(2))
matrix X = J(`n', 1, 1) \ x1 \ x2 \ x3
matrix e = rnormal(`n', 0, 1)
matrix y = X * true_beta + e
// OLS estimation
qui reg y x1 x2 x3
matrix b_hat = e(b)
// Calculate bias, standard deviation, and RMSE
matrix bias_beta = (bias_beta*(i-1) + (b_hat - true_beta))/i
matrix sd_beta = (sd_beta*(i-1) + (b_hat - mean(b_hat)))/i
matrix rmse_beta = (rmse_beta*(i-1) + (b_hat - true_beta)^2)/i
}
matrix table = (bias_beta, sd_beta, sqrt(rmse_beta))
matlist table, format(%9.3f) title("Table 1: OLS estimation over 1000 repetitions")