Hello! i am a new beginner of Gauss. I hope to do a monte carlo simulation with regression y= xB + error, and x are two a random variables from correlated bi-variate normal distribution. It's any one know how to write the codes? Thank you!
1 Answer
0
You can use the function, rndMVn to take draws from the multivariate normal distribution and if you only want parameter estimates, you can use the slash operator '/' to compute least squares estimates. Something like this would work for a model with a zero intercept:
beta_true = { 1.2, -0.5 };
//Covariance between 'x1' and 'x2'
cov = { 1 0.6,
0.6 1 };
//Mean of 'x1' and 'x2'
mu = { 0, 0 };
//Number of rows per draw of 'x'
r = 100;
//Number of iterations of Monte Carlo simulation
iters = 1e5;
//Pre-allocate vector to contain
//parameter estimates for all iterations
beta_hat = zeros(iters, 2);
for i(1, iters, 1);
//Take draws from multivariate normal distribution
//parameterized by 'mu' and 'cov' from above
x = rndMVn(r, mu, cov);
//Create error term: err ~ N(0, 1)
err = rndn(r, 1);
//Create simulated 'y'
y = x * beta_true + err;
//Estimate beta_1 and beta_2
//Notice transpose operator
beta_hat[i,.] = (y / x)';
endfor;
After that you could draw a histogram of the estimated values of each estimated parameter:
//Draw histogram of beta_1
plotHistP(beta_hat[.,1], 30);
//Add histogram of beta_2 to plot
plotAddHistP(beta_hat[.,2], 30);
or calculate descriptive statistics, like this:
call dstatmt("", beta_hat);
Your Answer
1 Answer
You can use the function, rndMVn to take draws from the multivariate normal distribution and if you only want parameter estimates, you can use the slash operator '/' to compute least squares estimates. Something like this would work for a model with a zero intercept:
beta_true = { 1.2, -0.5 };
//Covariance between 'x1' and 'x2'
cov = { 1 0.6,
0.6 1 };
//Mean of 'x1' and 'x2'
mu = { 0, 0 };
//Number of rows per draw of 'x'
r = 100;
//Number of iterations of Monte Carlo simulation
iters = 1e5;
//Pre-allocate vector to contain
//parameter estimates for all iterations
beta_hat = zeros(iters, 2);
for i(1, iters, 1);
//Take draws from multivariate normal distribution
//parameterized by 'mu' and 'cov' from above
x = rndMVn(r, mu, cov);
//Create error term: err ~ N(0, 1)
err = rndn(r, 1);
//Create simulated 'y'
y = x * beta_true + err;
//Estimate beta_1 and beta_2
//Notice transpose operator
beta_hat[i,.] = (y / x)';
endfor;
After that you could draw a histogram of the estimated values of each estimated parameter:
//Draw histogram of beta_1
plotHistP(beta_hat[.,1], 30);
//Add histogram of beta_2 to plot
plotAddHistP(beta_hat[.,2], 30);
or calculate descriptive statistics, like this:
call dstatmt("", beta_hat);